乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2....

90
乾勤科技 1 XC166 开发 FAQs 版本: AP050813v1 整理: Yin Ying 网站: www.c166.org 北京乾勤科技发展有限公司

Transcript of 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2....

Page 1: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

1

XC166 开发 FAQs

版本: AP050813v1

整理: Yin Ying

网站: www.c166.org

北京乾勤科技发展有限公司

Page 2: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

2

目 录

1. PEC 工作方式,与普通中断的区别 .....................................................................................1 2. C164 单片机的译码方式 .....................................................................................................2 3. 总线片选及地址定位? ........................................................................................................3 4. C167 单片机 CAN2 的使用.................................................................................................5 5. 重装载模式辅助定时器正负跳变判断 ..............................................................................6 6. Capture/Compare Unit 6 中 T12 状态转换的规则 ..............................................................7 7. KEIL 与 DAVE 的关系 ........................................................................................................8 8. XC166 系列单片机中 OCDS 功能......................................................................................9 9. XC164 评估板仿真调试速度问题 ....................................................................................10 10. Tsking 软件环境设置 .......................................................................................................11 11. JTAG 接口连接问题 ........................................................................................................13 12. XC164 中 SRAM 的一般用途 .........................................................................................16 13. 关于 JTAG 和串口下载的问题 ......................................................................................18 14. 关于 JTAG 和串口下载的问题 ......................................................................................19 15. DAVE 启动设置问题 .......................................................................................................20 16. IO 口负载能力问题 .........................................................................................................21 17. 串口调试问题..................................................................................................................23 18. Motorola 与 Infineon XC166 性能比较 ...........................................................................24 19. 芯片选型问题..................................................................................................................25 20. 开发环境选择..................................................................................................................27 21. 定时器 T12 的 PWM 功能..............................................................................................28 22. Infineon XC166 与 LPC21X 性能比较............................................................................29 23. 定时器中断响应时间......................................................................................................31 24. 马达控制中 Infineon XC166 的优势..............................................................................32 25. 软件定时问题..................................................................................................................33 26. 反汇编问题......................................................................................................................34 27. C167 编译错误 .................................................................................................................35 28. Keil 编译环境下经常出现的错误 ...................................................................................36 29. CC2 和 CCU6 的比较功能 ..............................................................................................39 30. XC164CM 的 JTAG 烧写问题.........................................................................................40 31. Infineon XC16x 和 C8x 系列单片机命名规则 ...............................................................41 32. XC16x 单片机 PORT 口 ..................................................................................................43 33. XC164CM 启动模式问题 ................................................................................................44 34. XC164CS 的 CAN 中断问题 ...........................................................................................45 35. 与 C166 配合使用的 LED 驱动芯片 .............................................................................47 36. InfineonXC16x 与 PIC 芯片比较 ....................................................................................48 37. CAN 接收功能 .................................................................................................................49 38. XC16x 与 DSP 比较.........................................................................................................50 39. CCU6 映像寄存器问题 ...................................................................................................51

Page 3: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

3

40. Motorola 与 Infineon XC166 性能比较 ...........................................................................52 41. Motorola 与 Infineon XC166 性能比较 ...........................................................................54 42. 双机通信..........................................................................................................................55 43. BootStrap Load .................................................................................................................56 44. XC164 的 ASC 口 ............................................................................................................57 45. 陷阱与外部中断..............................................................................................................58 46. FIFO 功能及用法 .............................................................................................................59 47. 同步串口仿真..................................................................................................................60 48. 指定地址定义变量..........................................................................................................61 49. OCDS 的 TMS 引脚替换功能 .........................................................................................63 50. CAN 模块 Message Object...............................................................................................64 51. CAN 和 CPU 对 Message Object 处理 ............................................................................65 52. P1H 口的驱动电流...........................................................................................................66 53. 软件复位问题..................................................................................................................67 54. 软件复位函数..................................................................................................................68 55. 实时时钟和通用定时单元区别......................................................................................69 56. START_V2.A66 启动文件 ...............................................................................................70 57. PEC 数据传送问题 1 .......................................................................................................73 58. PEC 数据传送问题 2 .......................................................................................................74 59. CAN 设置疑点 .................................................................................................................75 60. PWM 死区时间 ................................................................................................................77 61. CAN 中断节点问题 .........................................................................................................78 62. SPI 总线通信问题 ............................................................................................................79 63. 变量扩展问题..................................................................................................................80 64. PEC 数据传送次数的计算 ..............................................................................................81 65. 输出端口驱动继电器问题..............................................................................................82 66. 片选信号切换问题..........................................................................................................83 67. 振荡器监视器..................................................................................................................84 68. PWM 影像寄存器问题 ....................................................................................................85 69. CCU6 捕获功能 ...............................................................................................................86 70. 外部中断响应时间..........................................................................................................87

Page 4: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

1

1. PEC工作方式,与普通中断的区别

问题 PEC 的工作方式?什么时候用 PEC 什么时候用普通中断?

回答 对于外设设备控制器的中断过程 PEC,其中断速度要比正常中断要快,它是由中断请求触

发工作的。PEC 执行一个单字或者字节数传递,有 8 个可编程的 PEC 服务通道。在 PEC 执

行时只是暂停 CPU 的一个指令循环,不需要保留程序状态,相比于正常中断需要保护现场

进行堆栈来说,这种 PEC 中断要高效的多。 PEC 独立于 CPU 中断响应,类似于 DMA 数据传递,在不切换 CPU 任务时可以发送数据到

0 段的任何地址,响应时间最小为 150ns,一般为 300ns,仅占用 CPU100ns(200MHZ)。 打个比方,单片机相当于一个贸易公司, CPU 相当于总经理, PEC 相当于区域销售经理, 而内存相当于是公司的帐户. 总经理的职责是调度管理,而销售经理的指责是处理客户需求为公司增加收入, 销售经理只需要把收入存入公司帐户,而不必把每一笔收入都交给总经理, 总经理不需要关心每个销售环节的细节,只需要了解销售经理完成任务的结果, 根据其业绩给予奖励或者督促 因为 PEC 可以减轻 CPU 的负荷,所以,在能够使用 PEC 的地方,就尽量使用 PEC 尤其是同时使用很多外设的时候,如果老让 CPU 去处理,CPU 会很累,而在任务单一、CPU负荷率不高的情况下,可以采用普通的中断. 根据 PEC 运行机制,它相当于外勤,

Page 5: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

2

2. C164单片机的译码方式

问题 C164 单片机是如何实现译码的?

回答 C164 单片机的译码不是采用 74LS138,因为硬件电路一旦确定了,地址就不容易更改,需要

改变硬件电路,它采用的是通过地址寄存器来选定片选信号,16 位的地址寄存器的前 12 位

代表 CSx 的起始地址,后 4 位代表他的地址空间的大小,还要配合 BUSCONx 的设置。具

有极大的灵活性。p0L.6 和 P0L.7 选定总线方式。 在 keil 环境下由 ADDRSELx 窗口大小位域(RGSZ)选择参与相应 CSx 译码的地址线。当

相关地址位值与 ADDRSELx.RGSAD 的对应高位值匹配,并且该 CSx 被使能时,CSx 便有

效。

Page 6: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

3

3. 总线片选及地址定位?

问题 请问下面的初始化代码, 通过 ADDRSEL1 把地址定位到什么地方了?和 BUSCON1 一起看

也没搞清楚。谢谢! mov TFR, #0 mov PSW, #0 mov SYSCON, #80h ; Write Configuration Control Pin WR acts as WRL, pin BHE acts as WRH ; Pin BHE enabled ; mov BUSCON0, #488h ; Memory Cycle Time Control 7 Wait states ; External Bus Configuration 16-bit Demultiplexed Bus ; Bus Active Control External bus enabled within respective address window ; (ADDRSEL) ; mov BUSCON1, #488h mov ADDRSEL1, #1004h ; 64 KByte Windows Size ; mov DPP0, #0 mov DPP1, #1 对于地址的间接引用是下面的那种形式呢? 1、所有的地址操作都是基于这个窗口

2、当操作地址在窗口内则引发 bus 读写(类似于 X86 的设备内存)

回答 由 ADDRSEL1, #1004h 可 判 断 : BASE ADDRESS : 000100000000 , Length 为

64Kb.BUSCON1=0000010010001000 说明是 16 位非复用总线. ADDRSEL1 的 RGSZ 位域值为 4,因此设置了 CS1 窗口大小为 64kB,此时只有 RGSAD 位

域的高 8 位参与片选地址译码,这高 8 位对应 24 位物理地址的 A23~A16。因此 CS1 窗口

的起始地址为 0x10*64k=0x100000 程序可以对 16MB 的任意地址操作,某个 CSx 所定义的地址窗口只是 16MB 总地址空间的

一部分,你的程序自然可以寻址这个窗口内或窗口外的地址。 所有的外部地址操作都会反映到外部总线引脚上。但是只有当操作地址落在某个使能了的

CSx 地址窗口内,在这个外部总线周期内该 CSx 才会有效,而且同时只会有一个片选信号

有效.

Page 7: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

4

CSx 与 BUSCONx 有关, 当对 BUSCONx 规定的地址窗访问时,会使对应的 CSx 激活 而对其地址窗外访问时,都会使其对应的 CSx 禁止.

Page 8: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

5

4. C167单片机 CAN2的使用

问题 我使用 C167CS-LM 单片机已经有一段时间,做了好几块应用的板子了,所以基本用法比较清

楚,第一个 CAN 口使用没有问题。 我使用 Keil uVision2 编译器,使用该单片机的第二个 CAN 口的时候碰到问题: infineon 的资料上说第二个 CAN 口用法和第一个一样,就是地址不一样,我用和第一个 CAN口一样的用法,然后在配置文件 start167.a66 中把 INIT_XPERCON变量置 1,下面的 V_CAN2变量置 1,使之在 C167 初始化时把 CAN2 这个 XBUS 外设启动。运行后,观察 XPERCON寄存器(F024H),发现还是缺省值 0401H,而不是我设的 0403H,CAN2 没有被启动。 我估计是 start167.a66 文件中的问题,但找了几天,也没找到原因,恳请有经验人士指教!

回答 使用 XBUS 外部设备时必须选择寄存器 XPERCON,并将系统寄存器 SYSCON 和 SYSCON3中的 XPEN 位使能. 可以尝试在 DAvE 中对端口进行配置,观察 DAvE 更新的 start167.a66 文件和您自己修改的

文件是否有不同之处. 用 DAvE 配置后,加载到 Keil 中,start167.a66 文件会自动修改。 另外,建议你把程序放到 c:\keil 路径下,否则,Keil 可能会使用默认的 start167.a66 文件,

而不是你修改后的文件.

Page 9: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

6

5. 重装载模式辅助定时器正负跳变判断

问题 在使用辅助定时器的重装载功能时,对两个辅助定时器使用 T3OTL 单跳变的工作方式时,

可以得到一种 PWM,请问在程序中如何获得 T3OTL 是正跳变还是负跳变?在汇编语言中可

以直接将 T2 和 T4 设置成上升沿或下降沿进行重装载。在用 DAVE 进行设置时,应怎么设

置?

回答 T3OTL 是 GPT12E_T3CON 的第 10 位,可由程序读出,便可知上次和下次的 T3OTL 的跳

变极性. DAvE 中选择辅助定时器 T2 工作于重装 T3 模式后,便会出现 T2 输入边沿选择,可选择

T3OTL 正沿/负沿触发等.

Page 10: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

7

6. Capture/Compare Unit 6中 T12状态转换的规则

问题 CCU6 单元中定时器 T12 是如何实现状态转换的?

回答 对于三个比较通道来说,比较动作是并联发生的,对不同的计数方向,比较的匹配有各种不

同的含义。为了得到不依赖于输出电平的 PWM 信息,在比较动作中提到了两种不同的状态:

主动态和被动态,它们作为被 T13 传送的状态组合来产生需要的 PWM,陷阱控制单元和多

通道控制单元。如果把主动态解释为 1,把被动态作为 0,状态信息使用与逻辑来组合: active AND active = active active AND passive= passive passive AND passive= passive 比较状态的变化是随着检测到的比较匹配变化的并且由 CC6xST 的位来表示,T12 的比较状

态被定义如下: 计数值小于比较值时为被动态 计数值高于比较值时为主动态 那么,比较状态的转换规则如下: 加计数时,当计数值]达到比较值时设为主动态; 减计数时,当计数值达到比较值时置为被动态; 加计数时,发生 0 匹配而无比较匹配时设为被动态; 减计数时,发生 0 匹配同时又比较匹配时设为主动态; 转换规则仅仅在定时器运行是有效。这样,当定时器停止时,对定时器寄存器进行写动作时,

不会导致比较动作。

Page 11: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

8

7. KEIL与 DAVE的关系

问题 关于C166系列的代码编写都用到KEIL和DAVE,但是两者之间的关系是什么,我不是很了解.有没有那个高手详细的讲解一下?

回答 英飞凌给 DAvE 起的名字,就是数字助理工程师,它的用途就是帮你干活。首先是配置,主

要是两部分,其一是系统配置,(在 Project settings 中), 例如:对 SYSCON 和 BUSCON 进行

初始化;设置 DPP0~DPP3,以及寄存器,用于存储器和寄存器寻址。如果没有 DAVE 的话,

你恐怕要用程序一条一条根据各控制寄存器的含义进行编写,工作量大,而用 DAVE 则只

需要你根据要求进行选择设置,比较方便,而且还可以根据需要选择某些已经功能化的函数,

极大的方便了程序的编写。配置完成之后,会生成.dav 文件,您可以在同目录下的.rtf 文件

中看到 DAvE 所做的工作,同时,会生成 main.C, main.h,以及经过您配置的外设资源相关

的.C .h 文件。 对于 KEIL,它是建立在你设置的.dave 文件上的,它所作的具体工作是将你选择实现的功能

模块根据设置具体化,并且分成各个部分,这既有利于编写程序,又有利于程序的易读性和

可移植性。 如果只用 KEIL,程序的编写也是可以实现的,但这是建立在你对单片机的各个寄存器及工

作模式比较熟悉的基础上。

Page 12: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

9

8. XC166系列单片机中 OCDS功能

问题 对 XC166 系列单片机的 OCDS-片上调试功能不是很了解,OCDS 能实现哪些功能呢?

回答 在 XC166 产品系列中,片上调试支持系统在没有使用载波芯片的情况下可以提供全范围的

调试和仿真特性。它允许设置断点,并且追踪存储器地址。OCDS 的典型应用就是调试在

XC164 客户系统环境中运行的用户软件。 OCDS 通过调试接口,受外部调试设备的控制,包括独立的 JTAG 接口和停止接口。调试

系统通过一组可被 JTAG 接口访问的 OCDS 寄存器来管理调试任务。除此之外,OCDS 系统

还可以由 CPU 控制,例如:监视程序。OCDS 连同内核通过一个插入接口和停止端口来执

行 OCDS 产生的指令。 OCDS 提供了以下基本功能:

硬件,软件和外部引脚断点 对由 CPU 暂停,监视调用,数据传输和/或外部信号产生的中断做出反应 对整个地址空间的读/写访问 单步执行 用于 JTAG 接口和停止接口的调试接口引脚 通过 JTAG 接口的仲裁指令插入 传送至外部总线的高速追踪 分析和状态寄存器

OCDS 系统的功能由调试接口,OCDS 功能控制和调试 IO 控制(名为:Cerberus)代表

和控制。提供所有调试接口(外部调试)和内部系统(包括 OCDS 控制器)之间相互作用

的必要功能.

Page 13: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

10

9. XC164评估板仿真调试速度问题

问题 使用 XC164CS 评估板及仿真器时,同样的程序在使用片内 FLASH 进行仿真时速度很快,但

换作片外 RAM 进行仿真时速度就很慢,大概能相差 4,5 倍吧。这是怎么回事那?我是这

样理解的: 片内程序执行时采用 4 级流水线形式, 特殊的流水线操作使取指,译码,执行,写回四个

不同的指令同时执行,执行速度可达 25ns@40MHz,所以执行速度比较快; XC164CS 提供了集成的外部总线控制器,在执行指令时还要对总线模式数据总线宽度等进

行配置所以执行速度相对较慢,但是我觉得在同时应用单片机多种外设时采用片外寄存器还

是比较好的。 不知道我的理解是否正确,还请大家多提宝贵意见啊!

回答 XC164 的内部程序存储器块(IMB)包括 128K 的程序 Flash, 2K 的配置 Flash, 最高 2K 的程序 SRAM 和 8K 的启动 ROM。 内部程序存储器区域起始于段 192,即起始于地址 C0’0000H。 内部程序存储器能用于代码(指令)和数据(常数,表格,其他)存储。 代码和数据是以 64 位来提取的,使用字节选择线来选择字和字节数据。 内部程序存储器按 64 位读取,而外部程序存储器最多能够按照 16 位读取, 这也是造成执行速度差别的一个重要原因。

Page 14: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

11

10. Tsking软件环境设置

问题 在 Tasking 环境下调试程序,环境如何设置?

回答 下面简单介绍一下 Tasking 软件的设置问题: Tasking 软件 V8.5 版本提供了 9 个例程,供用户了解 Tasking 环境下的一个完整的工程项目

是如何组织的、起始配置文件如何编写等。用户还可以根据自己所用的目标板和处理器,对

工程文件进行修改、主要是修改工程文件的设置部分。 下面以经典的 8 王后问题为例,对如何使用 Tasking EDE 进行说明。 第一步 打开 Tasking EDE Examples 目录下的 C166-ST10 Examples 项目空间文件。 此时可以看到项目空间的文件列表。项目文件的管理窗口在主菜单 Windows/Project 下。 项目空间的黑体文件为默认文件,如果此时 Queens 不是黑体, 则可以通过右键选择 Set as Current Project 使之成为默认的项目文件。 第二步 对 Project Options 进行设置: Processor MCU 类型, 选择 XC164CS Flash Setup 如果选择 XC164CS,并且采用内部程序空间进行调试,则需要把 Flash workspace 设置为

0xC00000H。 根据 MCU 的型号,选择对应的 On-chip Flash,这里选择 XC164CS-16FF BA。 Add Rom Range⋯可以先不选。 Memory Model 如果使用 Tasking Demo 版本, 内存模式只能选择 Small。 Startup 对和 MCU 工作模式相关的重要寄存器、如 CPUCON0/CPUCON1/PLLCON/RSTCON 等进

行配置。 问题: XC164CS 有三种起动配置的方式:从 Startup ROM 起动采用默认配置、从用户内存

(ROM/Flash)读取起动配置信息、从起动配置管脚读取配置信息。但两种以上的配置能否

同时存在、相互之间是什么关系? 第三步 设置链接/定位选项

Page 15: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

12

默认情况下,可选择 output 格式为 IEEE-695。 第四步 设置 CrossView Pro 相关选项。 Execution Enviorment 勾销 simulator, 如果选中,则采用软件仿真;开始时可以选择 simulator,学习 CrossView 调

试软件的使用方法。 选择 Infineon / Infineon XC164CS with OCDS。 第五步 编译链接,生成仿真文件.abs。 第六步 点击 debug application,进入 CrossView,进行仿真调试。

Page 16: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

13

11. JTAG接口连接问题

问题 在使用 XC164CS 评估板进行硬件仿真时遇到一个问题,每当新建工程文件时完成程序编写

及正确设置目标项目选项后,讲程序下载到内部 FLASH 或用外部 RAM 进行硬件仿真时会

出现以下窗口:

如何解决?

回答 首先检查硬件连接是否出现问题.

保证硬件连接正确的前提下,这个问题可通过配置Reset选项来实现,根据窗口中出现的需要

配置的寄存器FCONCSx,TCONCSx,及外部总线相关的寄存器EBCMOD0,EBCMOD1 TCONCSSM,准备配置以上寄存器来实现Reset设置使能。

Page 17: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

14

图1 进行以上寄存器的配置有一个比较快捷的查找方式,即通过DAVE软件。单击图标进入查看

各个模块寄存器地址、内容窗口,找到相应的寄存器得到Reset值,将这些值填写到如图2所示的初始值设定栏中,这样就完成了对应寄存器的Reset设置。

图 2

重新编译工程文件,再将文件下载到内部 FLASH 或外部 RAM 进行硬件仿真时就不会出现

Target Not Found 的窗口了,而且程序能正常顺利的运行了。希望以上的内容能在进行 Keil

Page 18: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

15

设置时给大家提供一些启示。

Page 19: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

16

12. XC164中 SRAM的一般用途

问题 XC164 内部存储器资源是如何映射的?SRAM 的一般用途?

回答 XC164 内部存储器资源映射在如下的全部地址空间中.

FF,FFFFH

C0,0000H

40,0000H

20,0000H

00,0000H

SFR 空间 起始地址:00’FE00H 空间:0.5K 双接口 RAM 起始地址:00’F600H 空间:最高达到 2K

ESFR 空间 起始地址:00’F000H 空间:0.5K 内部 IO/XSFR 空间用于 EBL,IFC,SOLM,CCV6 寄存器 起始地址:00’E000H 空间:4K 数据 SRAM 起始地址:00’C000H 空间:最高达到 4K TwinCAN 寄存器 起始地址:20’0000H 空间:2K 默认(可以由 SW 通过 ADDRSEL7 寄存器进行改变) 程序 Flash 起始地址:C0’0000H 空间:128K 程序 SRAM 起始地址:E0’0000H 空间:最高 2K

255-192

On-Chip Program

Memory Areas

191-64

External Memory

Areas

63-32

External IO Areas

31-0

External Memory

Area

Page 20: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

17

启动和自举 ROM 起始地址:FF’0000H 空间:8K Flash 寄存器空间 起始地址:FF’F000H 空间:4K

Page 21: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

18

13. 关于 JTAG和串口下载的问题

问题 我的 Memtool 串口也不能用!!怎么回事情呢?要那些注意事项啊? 但是我自己写的传口通讯的程序却能正常使用。 它说我的连接有问题。过我在 TASKING 下传口还是不能用,JTAG 可以用。 KEIL 怎么才能用他的 JTAG 啊?他的串口我也不能使用呢。

回答 一般来说 Keil 需要是 full version 才能正常使用 Jtag,demo 的不行。 memtool 不能正常使用,可能是你的跳块设置的不对,必须要设置成 bootload 模式才能用

memtool 软件。 要进行 memtool 下载,最重要的是把单片机设置成 bootstrape 模式。不同的单片机设置的方

式不同。比如 C167CR 只需要 P0.4 下拉就可以了。而对于 XC164CS 单片机来说,还需要把

RD 下拉。另外对于 XC164CM 又有所不同。请根据你的芯片,查手册。

Page 22: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

19

14. 关于 JTAG和串口下载的问题

问题 有关管脚输出能力的说明,在XC164CS Datasheet V2.1 page 49 的Table 12 Current Limits for Port Output Drivers 中的 Nominal Output Current 为 2.5mA,不知 IO 口输出长期超过 Normal Output Current(2.5mA)会不会对器件造成伤害,毕竟 XC164CS 的输出驱动和 HCPL0600的导通阈值均有点临界,会不会影响系统可靠性? 如果 XC164CS 采用漏极输出,是不是也没多大改善?还想问有没有电流传输比高一些的高

速光耦可用于 CAN 总线的隔离?

回答 我们用 C167CR 单片机 IO 直接驱动 LED,没有串联电阻。结果 LED 非常亮,电流大约是

10mA 以上,这个电路用了 1 年多了,单片机一点问题都没有。 所以个人觉得 C166 系列单片机的 IO 驱动能力很强。至少可以保证 10mA。 我们设计的硬件电路中就是用 CAN_TX 串连 510ohm 电阻然后再接光耦 HCPL0600,运行没

有问题.

Page 23: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

20

15. DAVE启动设置问题

问题 请大虾指点,问题:在使用 DAVE 时,以下两种方法生成的程序到底有那些地方不一样,当然只

是设置 project settings,其他不设置: (1)在设置 project settings 时,设置#EA=high during reset ;VECSEG 设置为 start from internal program memory. (2)在设置 project settings 时 ,设置#EA=low during reset ;VECSEG 设置为 start from external memory. 望高手为我解惑,先谢谢了!

回答 /EA=外部访问使能引脚。复位配置输入。 复位期间及以后,在这个引脚上的一个低电平将使 X164 从外部存储器开始执行命令;为高

电平时,则从内部 ROM 取指执行。 前者是从内部起动,后者是从外部程序存储器起动。

Page 24: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

21

16. IO口负载能力问题

问题 我利用 P2.8 输出 但是得到的波形 high 电位都掉在 2V 多 不知道是我程序有问题 还是有其它硬件没注意到 open drain 我也有设定不要了 但还是不行 麻烦各位大大帮帮我 下面是我的程序 =========================================== #include <REG167.H> /* Register defin for C167 */ #include <INTRINS.H> /* Prototyping of specific Funktionen for C167 */ sbit out = P2^8; sbit dout = DP2^8; sbit Drain28=ODP2^8; #define out_on dout=1 void delay(unsigned int j); /* ------ main Program: -------------------------------------------- */ void main (void) { Drain28=0; out_on; while (1) /* endless loop */ { out=1; delay(100); out=0; delay(100); } } void delay(unsigned int j) { T6R=1; while(j!=0) {T6=0xfffa; while(T6OTL!=1); T6OTL=0;

Page 25: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

22

j--; } T6R=0; }

回答 端口输出的高电平主要取决于 IO 口的负载。如果负载设计的不合理,就会出现这种情况。 请仔细检查你的 IO 口连接电路。 另外查看一下启动配置文件 start167.a66 配置是否正确.

Page 26: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

23

17. 串口调试问题

问题 最近,在 Keil C 中,把以前写的几个串口的通讯程序(正确的),翻出来重新编译连机,

竟然在串口调试工具中没有任何反应,检查了一下硬件和软件竟然都正确,软件模拟都有结

果,但是和 PC 机的传送就没有数据! 重新建立新的工程,把代码复制到新的工程中,竟然有了数据! 有没有那位大虾对此发表一下自己的看法!

回答 可以看一下串口调试工具的波特率以及串口号是否设置正确,还有可能是工程文件的设置问

题了. 另外不赞成用 Stdio.h 中的函数 printf(), 串口通讯用 DAvE 生成的发送接收函数要直观和方

便的多.

Page 27: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

24

18. Motorola与 Infineon XC166性能比较

问题 哪位大虾帮我比较以下 motorola 的 HCS12 与 infeneon 的 XC166 的性能?谢谢

回答 XC166 的资源比大多数HCS12产品要丰富的多,比如所有的XC166都是双CAN、双UART、双 SPI,具备至少 14 路 10 位以上的 ADC,若干个 16 位定时器,至少 64kB 的 FLASH,并

且集成单周期 MAC,具备 DSP 功能。 XC166 和 freescale 的 56F800 系列 DSP 性能上更具备可比性.

Page 28: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

25

19. 芯片选型问题

问题 大家好!我现在负责一个项目,想用 xc166cs 来实现。有一些问题想请教: 1:在 40MHz 的时候,xc164cs 是 25ns 的单指令周期。现在我只想要 100ns 的单指令周期,

请问是不是接 10MHz 晶振就行了,还是可以软件设置?象 philiphs 的 arm,lpc2119 一样 2:xc164cs 的 pdf 资料上说的“两个具有独立时序基准的 16 通道 ccu”是指什么?

请详细说说 ccu 的用处。因为我的系统中对脉冲个数的处理非常重要!

3:我查了一下 xc164cs 的价格,好像是“价格 9.82 美元”。不知道实际上我买散片多少钱?

以后量产了,1k 又是多少钱?

回答 1:在 40MHz 的时候,xc164cs 是 25ns 的单指令周期。现在我只想要 100ns 的单指令周期,

请问是不是接 10MHz 晶振就行了,还是可以软件设置?象 philiphs 的 arm,lpc2119 一样 XC164CS 有 20MHz 和 40MHz 两种版本,无论哪种版本,都可以采用适当频率的晶体,比

如 8MHz 或 10MHz,然后通过锁相环电路,得到您所需要的 CPU 时钟频率。在 DAvE 中设

置 PLL 非常简单。 在 DAvE 中设置 PLL 非常简单”==是不是就是在软件中由程序员设置? 在 DAVE 中 Project Setting 窗口中有一个 System Clock 设置,通过选择锁相环不同的分频参

数来改变系统时钟输出。 PLLODIV EQU 4 ; 0 .. 14 Fpll = Fvco / (PLLODIV+1) ; 15 = reserved _PLLIDIV EQU 1 ; 0 .. 3 Fin = Fosc / (PLLIDIV+1) _PLLVB EQU 0 ; ValueVCO output frequency Base frequency ; _PLLMUL EQU 19 ; 7 .. 31 Fvco = Fin * (PLLMUL+1) ; 0 .. 6 = reserved _PLLCTRL EQU 3 按以上设置可实现系统时钟输出为 20M。 另外也可以在 KEIL 环境下工程文件中的 START_V2.A66 文件设置相应寄存器就可以了。 2:xc164cs 的 pdf 资料上说的“两个具有独立时序基准的 16 通道 ccu”是指什么? 指的是两个独立时间基准的捕获比较单元,可以用于频率、周期捕获,处理脉冲信号非常方

便。 3:我查了一下 xc164cs 的价格,好像是“价格 9.82 美元”。不知道实际上我买散片多少钱?

以后量产了,1k 又是多少钱? 买散片,价格 100~200 不等。前端时间从深圳买过散货,是 100 元/片,可能是不走运,都

Page 29: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

26

不能用。从正规代理商途径买,应该是 150、160 左右。 量产的价格等量产时再通过代理商

问询,他们可以申请好的价格,因为代理商不止一家,所以,不怕某一家出高价。 我以前问过,1k 应该是<120 元。

Page 30: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

27

20. 开发环境选择

问题 刚开始进行的 C166 开发,手头上又没有苦于没有限制编译器、嵌入式操作系统和开发环境。 不知大侠能不能给我点建议,谢谢!

回答 开发环境可以使用 KEIL C166 或 TASKING,网上可以找到,不过是评估版哦。 另外针对英飞凌单片机有DAVE软件可以生成.C文件,便于在KEIL环境下进行编程,DAVE软件可以在英飞凌网站上得到。 www.infineon.com/DAvE 英飞凌还提供了串口下载程序工具 MEMTOOL,可以到英飞凌网站下载。 另外英飞凌网站还提供了很多 Application Note,可以方便于开发. 如果条件允许的话可以考虑用我们公司的 XC164CS 的评估板及仿真器套件,我们同时会提

供一些学习资料,视频教程以及例程,这样可以使您尽快的进入 C166 系列单片机的学习中,

充分感受此系列单片机强大的功能。

Page 31: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

28

21. 定时器 T12的 PWM功能

问题 把 T12 设置成比较方式的边缘对齐模式,当比较定时器的值等于 T12P 时,产生中断,在中

断服务子程序中修改 T12P 的值,会对上次的脉冲造成影响,不知道是为什么? 用同步更新影像锁存器的能解决吗? 我试了一下,不行。可能是我用的方法不对吧。

回答 用同步更新 shadow register 不是不可以,而是触发同步操作事件的相关寄存器需要正确设

置. 同步更新是指:如果在这次脉冲还没有发送完成时,更新 T12P 的值的话,不会对本次产生

影响。

Page 32: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

29

22. Infineon XC166与 LPC21X性能比较

问题 各位高手:以前没用过 C166 系列(毕竟在国内应用不广,连 C196 都赶不上),只知道它

的配置,主要应用在电机驱动,工业控制领域。而 PHILIPS 出的 ARM 系列 LPC21XX/22XX是 32 位/16 位机,配置比 C166 高多了,最高 60MHZ ARM7TDMI-S 内核,16K~64K SRAM,

128K~256K 的片内 FLASH,外设 10 位 A/D、PWM、I2C/SPI、GPIO,双 UART550、多 CAN总线一应俱全,封装从 48 脚到 144 脚。两者主要区别是 LPC2XXX 是双电源工作:内核 1.8V,

IO 3.3V,C166 是 5V 工作。在开发上 LPC2XXX 带片上 JTAG,支持简单的在片调试。 RMB 价格:LPC21xx 从 4x 元到 7x 元,C66 不清楚,估计可能得上百元。 LPC21XX/22XX 系列应用上厂家也写明了工业控制。 请问高手:LPC2XXX 是否也可用于汽车电子?(推出时间关系,目前还不知道谁在汽车里

用了 ARM),C166 与 LPC2XXX 相比优势在那里?C166 的设计特点是什么?以后的应用

前景怎样?

回答 的确,C166 在国内的普及程度,比不上 MSC196、TI C2000 等类似产品,但如果您熟悉欧

洲市场,就会了解到 C166 的应用范围不仅仅局限于电机驱动等工业控制领域,汽车电子产

品——如发动机 ECU、ABS 等,消费类电子产品——如手机、打印机等,C166 都有极为广

泛的应用。在世界范围内,汽油机电控单元约有 30%选用 C166、在欧洲,这个比例接近于

50%。 ARM 作为与单片机、DSP 并列的微处理器产品的又一个分支,具有鲜明的特色,比如精简

指令集、低功耗等,已经在多媒体、手持设备中得到普及。在第三方合作伙伴的推动下,

PHILIPS 的 LPC21XX 产品在国内 ARM 产品市场上有较高的知名度。如您所说,LPC21XX具有丰富的资源,我们可以选择其中的一个型号 LPC2104,与 Infineon 目前主推的 XC166产品中的一个同样封装的典型的产品 XC164CM 做简单对比: * 项目 Infineon XC164CS LPC2119 1 处理器 C166S V2 ARM7TDMI-S 2 处理器特性 5 级流水线,DSP 支持 单周期乘法累加指令(MAC) 3 CPU 时钟频率 40MHz 60MHz 4 封装 LQFP64 LQFP64 5 温度等级 SAF:-40~85 工业级 -40~85 工业级 SAK:-40~125 汽车级 6 FLASH 64kB 128kB 7 RAM 6kB 16kB

Page 33: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

30

8 GPIO 47 46 9 定时器 (3+2 )*16 位定时器 2×32bit 10 捕捉比较 2×16 通道 4 通道 11 PWM 6+1,面向电机控制 6 通道 优化的 CAPCOM6E 12 AD 14 通道 10 位 4 通道 10 位 13 CAN 2×CAN2.0 2×CAN2.0 14 SPI 2,支持 I2C 2 15 I2C - 高速 I2C 16 UART 2 个,自动波特率识别 2 个 17 仿真调试 JTAG JTAG 18 电源 双电源:IO-5V, 内核 2.5V 双电源:IO-3.3V,内核 1.8V 可以看出,在存储器资源方面,LPC 容量更大;由于 XC164CM 内核集成 MAC 单元,所以

具有更强的数据处理功能;在通讯接口方面,两者不相上下,在定时器、中断、PWM、AD等事件处理或面向控制的资源方面,XC164CM 更胜一筹。XC164CM 另外一个突出的优势

胜具有更宽的工作温度范围,有汽车级的芯片,而 LPC 系列产品的绝大多数都是普通工业

级芯片。 根据上述比较,在汽车电子和要求严格的工业控制领域,Infineon 的 XC166 更为

适用。 就价格而言,由于厂商市场推广策略和产品普及程度的不同,零售市场的 Infineon 产品比

Philips 产品价格要高一些,考虑到它汽车级的温度范围,其价格仍然具有竞争优势——无论

是存储器、还是 AD 等外设芯片,汽车级产品的价格比普通工业级高一个等级是很合理的。 Infineon 目前非常重视中国市场的产品推广,但以前的推广大多以大企业为推广对象。目前,

也越来越重视通用市场。随着通用市场上产品的增加,C166 和 XC166 的价格也将越来越具

有竞争力。

Page 34: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

31

23. 定时器中断响应时间

问题 1:xc164cs 的定时器和外部中断响应时间是多少?资料上没看到? 2:其 pwm 输出是不是独立时序的?其输出是不是不占用 cpu 的操作时间?

回答 XC164 提供 16 个优先级的中断系统

70 个具有独立中断向量的中断源,分成 15 个优先级,8 个组优先级 非常短的中断响应时间:在内部程序和数据执行时,通常 8 个周期的中断延迟 快速外部中断 可编程向量表地址 外围事件控制器(PEC)的单周期数据发送

PWM 输出是独立时序的,除非是更改占空比之类的操作,否则不占用 CPU 资源。

Page 35: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

32

24. 马达控制中 Infineon XC166的优势

问题 在马达控制中好象采用 DSP 的比较多,英飞凌的 XC166 系列 MCU 在这领域有何优势? 谢谢!

回答 XC166 本身就是具有 DSP 功能的单片机,只是采用冯-诺依曼结构,程序数据统一编址; 与 DSP 相比,XC166 同样具备单周期的 MAC(乘加单元),采用流水线结构,具有较高处

理能力。 类似于 TI C2000 DSP 的 EVA/EVB,XC166 单片机同样具备专面面向电机控制优化

CAPCOM6E 用于 PWM 波形发生。 英飞凌给出过基于 XC164 的矢量控制 PMSM 控制器,CPU 典型负荷为 5%,具有足够的处

理能力。 对于交流感应电机控制,XC166 也是足以胜任的;CAPCOM6E 中还有 BLDC 电机控制模式,

使永磁无刷直流电机的控制变的极为简单。 在板级设计方面,XC166 内核为 2.5V,外围为 5V,更容易进行接口设计; 而多数新款 DSP 都是 3.3V I/O 接口,增加了电路设计的复杂性和成本。 价格方面,XC166 比 TI 24xx 稍高,但因为具有-40~+120 度的工作范围,因此能够满足

更为苛刻的环境要求。 (28xx 也有同类温度等级的产品,但价格比 XC166 高) XC166 更接近于传统的单片机,相对容易掌握。 重复:XC166 本身就是具有 DSP 功能的单片机。

Page 36: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

33

25. 软件定时问题

问题 发现用 C 语言软件定时不准确?能不能提供一个软件定时的简单例程?

回答 今天针对软件定时做一个小测试。 生成了一个工程文件,把 P1L 设置为通用 IO 口。在主程序中写入下面程序段: while(1) { for(i=0;i<10;i++) {}; IO_vWritePort(P1L,j++); } 设置为硬件仿真模式,通过示波器观测出在 P1L 管脚产生了 9.2μs 的定时。以上程序段在

汇编环境下为以下四条语句: MOVE DPP2:0x0240,ZEROS SUB DPP2:0x0240,ONES MOVE R4,DPP2:0x0240 CMP R4,#0x000A JMPR CC_C,0Xc0027E 以上一个小的测试程序说明:单纯的用软件定时也就是 for 语句,不加任何操作语句时,每

条循环耗时大约 0.9μs。 以后大家应用软件定时时可以此作为参考。如果实现精确定时,建议采用定时器。 测试环境 硬件:XC164CS 评估板 内部 FLASH 仿真模式 时钟设置:输入晶振 8M PLL 设置 CPU 输出频率 20M

Page 37: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

34

26. 反汇编问题

问题 请问楼主:我是C166的初学者,C166反汇编的代码在用 keil uvison3直接编译时提示下列错误

是什么原因,该如何解决呢,是不是反汇编工具的原因,我用的是 IDA,用TASKING是不是更好

呢,非常感谢! TEST2.ASM(34): error A69: NOT A BITADDRESSABLE BASE TEST2.ASM(39): error A74: OPERAND TYPE MISMATCH 附: 34 行 : bmovn word_FD64.0, word_FD60.3 39 行: subc word_3030, CC16

回答 TEST2.ASM(34): error A69: NOT A BITADDRESSABLE BASE 非可位寻址基址? TEST2.ASM(39): error A74: OPERAND TYPE MISMATCH 操作数类型不匹配 bmovn 和 subc 如何使用您查过了吗?word_FD64.0 和 CC16 是否能够为 keil 编译器所识

别? 可能是编译环境对反汇编代码长度等有一定的限制.

Page 38: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

35

27. C167编译错误

问题 我的程序中出现了以下类型的大量警告,不知道是什么原因? warning A78: 'FAR RETURN' IN NON FAR PROCEDURE 查看后的确应该要用 RETI 指令,但恰恰在该指令处出错, warning A80: 'INTERRUPT RETURN' IN NON INTERRUPT PROCEDURE 该错误出现在RETS处,但检查后发现就应该是段内子程序调用,请高手指教,另外想询问高手

启动代码的作用是什么,有了启动代码是不是就可以不用单独管 DPP 了呢,上述的错误和启

动代码有关吗,使用启动代码时要做哪些修改呢,启动代码对 C 程序和汇编程序的作用是一样

的吗,够罗嗦的吧,呵呵,谢谢!

回答 在C语言中如果设置了启动模式及起始地址等信息,就不用再管DPP了,系统会自动配置DPP的.至于汇编程序,以前我看过一些在 KEILC 环境下汇编语言的使用方面的资料,还是需要自

己设置 DPP 的. 至于以上您提出的问题我也不是太清楚,我会尽量帮您看一下问题出在何处,还是请您把问

题说的详细清楚些. 另外您可以参阅 Keil Support Solutions Knowledgebase 中 C166 C Complier,那里有一些问

题的解答.

Page 39: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

36

28. Keil编译环境下经常出现的错误

问题 使用 XC164 单片机在 Keil 环境下编译程序时经常出现一些问题,希望得到帮助.

回答 以下有一些 Keil C166 编译器使用过程中常见问题,请参考. 1. 在 C 环境下能访问到 16M 范围吗? 可以的.通过 huge 和 xhuge 类型就可以访问到 16M 地址空间. Huge 存储类型使用 16 位地址

计算,所以最大范围为 64K,但这是最优的一种存储方式.xhuge 存储类型没有大小的限制. 2. 如何修改系统堆栈的大小和位置? 需要编辑 START166.A66 文件.修改 STK_SIZE=7,然后设置 SSTSZ 为自己设定的值.例如

SSTSZ EQU 200H 则设置了系统堆栈大小为 200H BYTES 但要注意系统堆栈要放到

IDATA 存储区内. 3. 能不能在运行或编译时确定程序的大小? 不可以.但可以在程序的结尾放一个变量,这一变量并非自动生成并需要在程序中放置所有变

量,然后把”EOF”变量放到最后. 4. 如何在函数中禁止中断? 可以用#pragma disable 来禁止中断,例如: #pragma disable void function(void) { if (flag==0) { flag=1; flag2=1; } } 在进入函数时禁止中断,在退出函数时恢复中断.

Page 40: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

37

5. Keil C166 编译器是否支持 C164? 是的, Keil C166 编译器可以支持 80C166,C167,C165,C164,C163,C161,XC164 和 ST10 系列. 6. 如何使能 XBUS 外围设备? 通过修改\C166\LIB 中的 START166.A66 来实现的.设置 INIT_XPERCON 为 1 并将 XRAM设置为需要的值. 7. 当声明一位作为外部变量时得到如下错误信息提示: *** ERROR C102 IN LINE 4 OF .\MAIN.C: 'mybit0': different const/volatile qualifiers 在 MIAN.H 头文件中定义 extern bit mybit0; /* bit 0 of ibase */ MAIN.C 如下 #include "main.h" int bdata ibase; /* Bit-addressable int */ sbit mybit0 = ibase ^ 0; /* bit 0 of ibase */ void main (void) { } 错误出现的原因是 sbit实际上并非一个位变量.解决的方法必须声明一个外部的位变量,与 sfr不同时定义,最简单的方法是用#define,例如: 在 MAIN.H #ifndef SBITS extern bit mybit0; /* Bit 0 of ibase */ #endif 在 MAIN.C #define SBITS #include "main.h" int bdata ibase; /* Bit-addressable int */ sbit mybit0 = ibase^0; void main (void) { mybit0 = 0; } 在 JUNK.C #include "main.h" void junk (void) { mybit0 = 1; } 8. Keil C166 编译器时候支持浮点数运算?时候有库文件来声明浮点变量? C166 编译器支持单精度和双精度浮点数,所有的操作与 ANSI C 中的浮点数运算相同.默认情

况下 C166 编译器以 IEEE 形式存储 32 位浮点数,给出 7 位小数点精度.当需要高于 7 位精度

Page 41: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

38

时可以用 C166 的 FLOAT64 指令使能 64 位双精度 .也可以通过 Project>-Optioin for Target>-Double-precision floating-point 来设置.

Page 42: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

39

29. CC2和 CCU6的比较功能

问题 CAPCOM2 和 CAPCOM6 哪个的“比较”功能好用?

回答 CAPCOM2 是带有两个定时器 8 通道 16 位的捕获/比较单元,可用于产生脉宽调制信号 PWM,对内部和外部信号的捕获以及通过比较当前值和给定值改变输出信号.此单元通常用于 I/O任务的控制,如脉冲及波形的产生,脉宽调制,或记录特定时间发生时刻.也可用作软件定时

器.XC164CS 提供了 CAPCOM1 和 CAPCOM2 两个单元共 16 通道的捕获/比较单元,这两个

模块只是对应引脚不同,工作方式完全一致.这两个模块共有 18 个中断,其中 16 个捕获中断和

2 个定时器中断. CAPCOM6 单元是专为产生数字信号和事件捕获方面的,该模块提供了两个独立的定时器,并有专门的霍耳传感器接口,此单元尤其在无刷直流电机控制方面有很好的应用.此单元除了具

有捕获/比较工作方式外还有专门针对电机控制的组合多通道模式和块交换模式.其中定时器

T12,T13 都可以用来进行脉宽调制. 不知道楼主具体在什么地方应用 CAPCOM 单元,至于代码,我们这边都有相关例程.

Page 43: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

40

30. XC164CM的 JTAG烧写问题

问题 我现在用 xc164cm-8ff 来做 UPS 得控制芯片。不过手头上只有 xc164cs 的仿真板。所以

xc164cm 的 jatg 烧写电路都是抄 xc164cs 的。不知道这样子行不行?到时候能不能正常烧入,

OCDS 可以正常运行吗?DAVE 里头用 XC164cs 的模块来做 cm 的设定可以吗?请版主帮

忙。

回答 用 JTAG 来烧写 XC164CM 是可以的,在 DAVE 设置中确实没有 XC164CM,完全可以用

XC164CS 模板,其模块的设置有一些差别,比如在 CAN 模块中 XC164CS 使用 P4.5,P4.6 作为

接收与发送引脚,但在 SC164CM 中则使用 P9.2,P9.3 作为接收与发送引脚,所以使用前建议仔

细阅读一下 DATASHEET. 在 KEIL 环境下最好选择 XC164CM 作为 DEVICE.其他选项的设置均与 XC164CS 相同.

Page 44: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

41

31. Infineon XC16x和 C8x系列单片机命名规则

问题 能否介绍一下 XC16x 和 C8x 系列单片机的命名规则?

回答

Page 45: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

42

Page 46: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

43

32. XC16x单片机 PORT口

问题 能否介绍一下 XC16x 单片机的 PORT 口的情况及使用方法?

回答 xc16x 系列提供了丰富的 IO 口,其中部分 IO 端口还可以设置漏极输出或推挽输出方式,同

时内部上拉或下拉电阻有三种模式可供选择以适应不同功率的驱动。 大部分 IO 并行口都是复用的,所以首先要定义 IO 的输入或输出功能,系统中复用功能的

寄存器都是分离的。用作 IO 口时直接引用 IO 寄存器进行操作;采用特殊功能时则相应的

定义其控制寄存器就可以实现特殊功能。 另外介绍几个用 C 语言进行位操作的函数: 1. _getbit(BITADDR operand,ICE bitoffset) 它返回一个可位寻址变量的第 bitoffset 值。如 m=_getbit(P1L,2) 2. _putbit(bit value,BITADDR operand,ICE bitoffset) 分配给可位寻址变量某一位值,要么为 1 要么为 0。 3. bfld(BITADDR operand,ICE mask,ICE value) 将常数value分配给经mask屏蔽的任何可位寻址的变量BITADDR,即用mask先和BITADDR相与再将结果与 value 值相或。如_bfld(P1L,0x80,1)

Page 47: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

44

33. XC164CM启动模式问题

问题 XC164CM 启动模式问题: 从 infineon 上下载的资料说在 P1H4=1,P9.5=1,P9.4=0 的时候,reset时当/TRST=1 的时候可以进入 ocds 模式。那如果不需要进入 ocds 模式而只需要正常启动,

P1H4,P9.5,P9.4 这三个脚可不可以不用去配置?我要的 I/O 口好像有点紧张的。

回答 P1H4. P9.5 P9.4 仅在启动的时候作为配置用,不影响其作为 IO 使用,无论输入输出,只需要稍

做处理,比如加一级缓冲,用 RESETOUT 进行控制. 这些引脚接高和接低可以用 100k 的上拉下拉电阻实现。起动后作为输出口,上拉下拉电阻

不会有影响。 作为输入口,可以用一个 245 通过 RSTOUT 实现。

Page 48: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

45

34. XC164CS的 CAN中断问题

问题 問一個關於 XC164CS 的 CAN 中斷問題,目前我使用 WAVE 的開發板,調試 CAN 通訊,

已經可以正確發送 CAN 數據,但使用中斷接收有些問題,我使用 DAVE 來新建的 project,全部 CAN 中斷都映射到 Node 0,可以正常發送 CAN 數據,但開始時,總線上的數據無法

產生 CAN 中斷,後來檢查發現是 AIM4 裡的 IMC33(TX/RX interrupt INIID mask control),沒有置位,置位後,中斷可以產生,但 CAN 數據似乎沒有進入 messagebox 0,我配置 MSG box 0 為接收,MSG box1 為發送。繼續查閱有關 CAN 的寄存器,發現 AIM0 是控制所有的

MSG box 的,DAVE 已經將所有的 AIM0 置位,但還是無法檢測到 MSG box0 裡面有數據,

下面抓取源代碼的部分如下: void CAN_viSRN0(void) interrupt CAN_SRN0INT { // USER CODE BEGIN (SRN0,2) P1H_P5 = !P1H_P5; // USER CODE END if(CAN_ASR & CAN_ASR_RXOK) { CAN_ASR &= ~(uword)CAN_ASR_RXOK; P1H_P6 = !P1H_P6; } while((( ((ulong)CAN_RXIPNDH << 16) + CAN_RXIPNDL) & 0x00000003)) { P1H_P7 = !P1H_P7; // message object 0 interrupt if((CAN_HWOBJ[0].uwMSGCTR & 0x0003) == 0x0002) // if INTPND { if(CAN_RXIPNDL & CAN_RXIPNDL_RXIPND0) // message object 0 receive interrupt { if((CAN_HWOBJ[0].uwMSGCTR & 0x0300) == 0x0200) // if NEWDAT is set { if ((CAN_HWOBJ[0].uwMSGCTR & 0x0c00) == 0x0800) // if MSGLST is set { // Indicates that the CAN controller has stored a new // message into this object, while NEWDAT was still set, // ie. the previously stored message is lost.

Page 49: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

46

CAN_HWOBJ[0].uwMSGCTR = 0xf7ff; // reset MSGLST // USER CODE BEGIN (SRN0_OBJ0,1) // USER CODE END } else { // The CAN controller has stored a new message // into this object. // USER CODE BEGIN (SRN0_OBJ0,2) // USER CODE END } CAN_HWOBJ[0].uwMSGCTR = 0xfdff; // reset NEWDAT } } // End of RXIPND0 CAN_HWOBJ[0].uwMSGCTR = 0xfffd; // reset INTPND // USER CODE BEGIN (SRN0_OBJ0,6) // USER CODE END } 如上程序,當總線上有 CAN 數據時,P1H_5 是有輸出的,P1H_6 也是有輸出的,證明消息

已經收到了,但 P1H_7 就沒有輸出了,我很細心的檢查過我的 CAN 初始化代碼,再也找不

出是哪裡的問題,所以急著請教各位。

回答 将 AIM4 的 IMC33 置位後,产生的应该是 Status Change Interrupt,该中断由 ACR 的 SIE 位

控制,当节点每成功接收或成功发送一个 CAN 帧后,都会产生该中断,其中成功是指硬件

成功,即无论该 CAN 帧的 Message Identifier 是否符合 Message Box0 的接收需求,即使不被

Message Box0 接收,只要该 CAN 帧在传输中不发生硬件错误都会产生该中断。所以如果

Message Box0 只接收特定 Message Identifier 的数据,用这种中断每次都要查询,比较麻烦,

不如用 Message Box0 的接收中断省去许多判断。 而 CAN 节点产生 Message Box0 的接收中断至少需要以下条件: 1.当寄存器MSGAMRH0和 MSGAMRL0各位均为 1时,网上传输的某个CAN帧的Message Identifier 必须与寄存器 MSGARH0、 MSGARL0 中的 Message Identifier 相同,数据才能进

入到 Message Box0 的数据寄存器中;当寄存器 MSGAMRH0 和 MSGAMRL0 各位均为 0 时,

对网上传输的 CAN 帧的 Message Identifier 没有要求。 2.MSGCTRL0 的 RXIE、 MSGVAL 位应置为 10; 3.MSGCFGH0 的 RXINP 应为 0; 4.最好将 ACR 的 SIE 位关掉,或者将 Message Box0 的接收中断映射到其它中断节点,例如

Node 1。

Page 50: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

47

35. 与 C166配合使用的 LED驱动芯片

问题 谁能介绍一下用哪款的 8 位 LED 驱动芯片配合 C166 系列单片机使用起来方便、性能好、

显示效果稳定! 谢谢!

回答 并行接口:ICM7218 7228, maxim 公司产品 串行接口:ZLG7290, MAX6950 等。 都没有在 C166 环境下验证过。不过 C166 不挑食,应该没啥问题。

Page 51: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

48

36. InfineonXC16x与 PIC芯片比较

问题 能否比较一下 XC16x 系列单片机与 PIC 系列单片机的性能,价格,资源等?

回答

Page 52: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

49

37. CAN接收功能

问题 關於 CAN 的 message object,XC164CS 共有 32 個 message object,目前我使用 0-14 為接收,

15 為發送,然後使用 DAvE 進行配置,只使用 NODE A。但我發現,所有的 CAN 數據都只

進入到 Message Object 0,當 Object 0 裡面有數據時,依然會被後來的數據覆蓋,而不會自

動放到 Message Object 1,2...裡面去,所以我在接收 CAN 數據的時候,依然會丟失數據。我

查看了 XC164 的 user's manual V2.1, 在 21-21 頁有這樣的描述:If the NEWDAT bitfield in register MSGCTR is still set, the CAN controller assumes an overwrite of the previously stored message and signals a data loss by setting bitfield MSGLST.那看起來,如果 message object 0 裡

的數據沒有被讀出,則 NEWDAT 一直為 1,後面來的數據依然會覆蓋之前沒有讀出的數據,

那最終還是只在用一個 message object,那後面的 message object 1-14,要如何設置,才能讓

數據進入到裡面???而不覆蓋之前的數據???我看了整個 CAN module 的描述,沒有找

到所要的資訊,所以向各位請教。 非常感謝

回答 相关内容在 User’s Manual, V1.0, May 2004 在接收数据时,CAN 模块按 message object0- message object31 的顺序依次比较 ID 号和

屏蔽字,无论该 message object 以前的数据是否被读出,只要符合接收要求就会将数据写

入此 message object。也就是说,假设你的 message object0 和 message object1 设置为

都能接收相同 ID 号的 CAN 帧,那么该 CAN 帧将永远只能进入 message object0。

可以将 message object0- message object14 的接收 ID 号和屏蔽字设置成接收不同的 ID

号的 CAN 帧,不同的 CAN 帧就会进入不同的 message object。

若要使相同 ID 号的 CAN 帧要进入不同的 message object,仅*一次设置是不行的,除非在

运行过程中人为改变 ID 号的设置,但这样做没有任何意义,因为时间是随机的。至少我认

为是这样的。

Page 53: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

50

38. XC16x与 DSP比较

问题 XC166 和控制类 DSP 的比较,问谁更有优势

回答

既使在控制领域,某些 DSP 也很有优势,比如 TI 的 LF24xx 或 LF28xx,其片上资源也很

丰富,运算能力很强(2812 时钟可以到 150MHz,当然 XC166 更高 CPU 频率的产品也在

开发中)。相对于这些产品,XC166 有以下优势: (1) 其电磁兼容性做了更多的处理:比如管脚做了特别的抗干扰处理,这也是其成本

增加的一个因素。 (2) 管脚布局进行了优化,便于布局布线。 (3) 5V I/O 接口,便于外围电路的设计,电源系统相对简单,有助于降低板级电路成

本。 (4) 外部 8M byte 存储空间,便于大容量程序设计。 (5) 更丰富的通讯接口,比如双 CAN、双 UART、双 SPI、I2C。 (6) 更宽的温度等级,更优异的适应恶劣工业环境的能力。 除此之外,用户还将通过我们 c166 开发论坛得到逐步加强的技术支持。 当然,C2000 DSP 也有很多有优势的地方,比如双 6 路 PWM、硬件空间矢量波形产生等,

所以用户也很广泛。 正如西安交大袁裳在研讨会上演示的,由于 XC166/C166 产品的高可*性,它才会同时被 ABB和西门子所采用,用在高压直流输电的等对可*性要求极高的关键设备中。西门子很多种变

频器也基于 C166 开发,而 C166/XC166 在汽车应用中就更为广泛。 总之,对于工业和汽车类用户,尤其是希望产品高度可*的用户,C166/XC166 具有很强的

竞争力,也是不错的选择

Page 54: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

51

39. CCU6映像寄存器问题

问题 1:映象寄存器: 书上说定时器周期值,偏移量和比较值是写到映象锁存器,而不是实际寄存器.从锁存器

到 寄 存 器的 传 送 , 只要 STEx 使 能 位 置位 就 可 以 . 但 是 我 在 DAVE 中 生 成 的

CCU6_vLoadChannelShadowRegister(RegName, Value)函数只有一个 load 量,而且我看 cc6.h文件,如果你调用 CCU6_vLoadChannelShadowRegister(CCU6_CHANNEL_0,Value)那么它的

作用是 CCU6_CC60SR = Value.在 DAVE 的 configure channel0 里面 control 中说明

CCU6_CC60SR 是 compare register,也就是比较寄存器. 我想问如何把定时器周期值,偏移量写到映象锁存器?我没有找到相应的函数! 2:CCU6_vSetDeadTimePeriod(ubValue)该函数是设定死区时间,我想问是不是就是偏移量?是不是放在 T12OF 寄存器里面的值? 3: 我想把比较值直接写到寄存器里 , 而不通过映象锁存器 , 请问如何实现 ? 就像

CCU6_vSetTmrPeriod 这个函数设定周期值一样.我没有找到相应的函数.

回答

函数 CCU6_vEnableChannelShadowRegister()为使能 3 个比较/捕获通道值传送的函数,

调用该函数则相应通道的比较值从-SR 寄存器传送到-R 寄存器中,但前提是将新的值

已经写入映像寄存器中。

但 T12,T13 映像寄存器值的传送则受 CCU6_TCTR0 中位 SET12 和 SET13 控制的。将

CCU6_TCTR0 中位 SET12 置 1 则新的 T12SR 中的值传送到 T12PR 中。

死区时间寄存器则通过启动 CCU6_CMPSTAT 中 CC6xST 来实现,一旦 CCU6_T12DTC中写入了各通道死区时间发生器计数器的值,在 CCU6_CMPSTAT 中 CC6xST 置位后

可实现死区时间控制,其中三个通道可单独控制。另外死区时间寄存器即偏移量设定值

寄存器,是书中提到的放在 T12OF 寄存器中的值,因为 C166 与 XC164 有一些差别,

建议参考 XC164 的 datasheet 文档。 比较值不能直接写入寄存器中,必须通过映像寄存器写入。带有映像寄存器的一些寄存器只

能进行读操作不能进行写操作,只能通过控制相应寄存器位来使能映像传送来实现数据的更

新。详细的设置请参考以上三点。

Page 55: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

52

40. Motorola与 Infineon XC166性能比较

问题 AD 转换器提供了固定通道转换模式和自动扫描转换模式以及通道插入模式,如何区别使用

这几种模式?如何取出某一通道转换后的结果?在中断中取出与在主程序中取出有什么区

别?在多通道同时转换时如何实现各通道数据连续取出?

回答 XC164 提供了多种 AD 转换模式 固定通道单次转换:设置好某一通道后通过位 ADST 置 1 启动 AD 转换,转换结束后将停

止工作并将 ADST 与 ADBSY 清零。 固定通道连续转换:启动 AD 后将自动对由位域 ADCH 指定通道开始转换,每次转换完将

中断请求标注位置位。所以可在中断程序中读出每次转换的结果,也可在主程序中通过查询

ADCIR 位来读出每次转换后的结果。 自动扫描单次转换:启动后开始从 ADCH 指定通道开始转换,转换完成后 ADCIR 置位,并

开始下一个通道的转换,直至转换到 0 通道。这个模式可结合定时器使用实现每隔一段时间

读取某几个通道的 AD 转换值。可在中断中读出每个 AD 转换结果,或在主程序中查询

ADCIR 位来读取转换结果。 自动扫描连续转换:转换将连续不断的从 ADCH 指定通道开始向 0 通道转换,每个通道转

换结束后都将对 ADCIR 置位并开始下一个通道的转换。 另外如果对数据读取的实时性要求比较高时可使用 PEC 中断来实现。建议在进入 PEC 中断

后关闭 AD 转换器,并屏蔽掉所有的中断,数据处理完后再打开 AD 转换器并打开中断。当

系统有多个中断时,这样做可能会影响到系统时钟,也有客户反映设置 PEC 中断后其他中

断的执行有时会出现问题,这个问题还有待进一步研究。 以下是两个我做的 ADC 的例程,例一是采用自动扫描方式得到第 15 通道转换结果;例二

是用连续扫描方式得到 15 个通道的转换结果并存储在一个数组中。 //auto scan continuous mode only read channel 15 data //---------------------------------------------

Page 56: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

53

//--------------------------------------------- while(1) { if((ADC_DAT&0xF000)==0xF000) { dat=ADC_DAT; } } //read 15 channel data and store to a array //----------------------------------------------- //----------------------------------------------- unsigned int data[15]; unsigned int i=14; while(1) { if(ADC_CIC_IR==1) { data=ADC_DAT; i--; if(i<0) i=14; } } //---------------------------------------------- //-----------------------------------------------

Page 57: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

54

41. Motorola与 Infineon XC166性能比较

问题 PLL 锁相环如何配置?为什么在 DAVE 环境下设置好后仿真时不能得到正确的结果?

回答 XC164CS 内部设置有 PLL 锁相环,可配置不同输出频率。芯片最高输出时钟频率为 40M,

一般配置在 20M 使用。做过超频实验,在 60M 下工作比较正常,80M 下出现异常。 DAVE 软件提供了配置 PLL 的窗口,但有时候会发现,即使在 DAVE 中配置了也不能在硬

件仿真情况下按照用户意图进行仿真,问题出在 KEIL 环境下 STARTUP 文件中

PLLIDIV,PLLMUL,PLLPDIV 三个位的设置。用户可以手动修改这些参数这样可以在预定的

频率下硬件仿真。以下总结了一下 PLL 的设置值 当 fosc=10M fcpu=20M PLLODIV=4, PLLMUL=19, PLLIDIV=1 fcpu=40M PLLODIV=4, PLLMUL=19, PLLIDIV=0 当 fosc=8M fcpu=20M PLLODIV=5, PLLMUL=29, PLLIDIV=1 fcpu=40M PLLODIV=5, PLLMUL=29, PLLIDIV=0

Page 58: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

55

42. 双机通信

问题 keil 环境下在软件中能不能把两个管脚联起来?要能就可以直接在软件上检测了,小弟不知

能不能连啊 两个单片机之间的双机通信能在 keil 上仿真么?怎么操作? 我用的是 XC164CS 编译器是 keil 谢谢.

回答 虽然 keil 软件可以提供完善的功能丰富的仿真功能,包括对外设的仿真,但能否将内部两个

模块连接,使其中一个作为输入,另一个作为输出,倒是没有研究过,个人认为难度较大;

同时对两个设备仿真的难度也比较大。对于 SPI 接口,可以先让一个作为主设备,对从设备

进行仿真。SPI 双机通讯至少需要 3 个管脚吧:clock/di(do)/cs。

Page 59: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

56

43. BootStrap Load

问题 我初级接触 xc164,是个菜鸟。在看说明的时候,对 BOOTSTRAP LOADER,ADAPT MODE什么的搞不清楚,版主能解释一下吗?不胜感激。 另外,有没有 xc164cm-8ff 的烧录线路啊?我的程序将来要烧到 PCB 板上的话,如何设计

电路呢?使用 JTAG 口。

回答 XC164 内置 BOOTSTRAP LOADER 为一种自举装载电路,提供了多种 BOOTSTRAP 启动模

式,包括串口,CAN 接口以及内部存储器启动(0xC00000). 自举装载电路将代码和数据移进内部 RAM 中,也可以通过串口和 CAN 接口将数据传送到

外部 RAM 中.这样就不要求程序初始代码必须放在内部和外部程序存储地址单元中.装载器

的代码存储在特定的 Boot-ROM 中,不需要掩莫 ROM,OTP 或 FLASH RAM 进入自举模式和

相应的初始化. 自举装载电路可用来把完整的应用程序装载到没有 ROM 的系统中,可以对已完成系统装入

的临时软件进行测试和校准,也可用于对带有 FLASH 单片机的编程服务程序.自举装载机制

可用于标准系统的启动,也可只用于一些特殊场合,如系统维护(固件更新),逐行的程序调试和

测试 所有系统的启动都是通过配置引脚 T\R\S\T,如果 T\R\S\T 引脚拉低则 OCDS(JTAG)和所有

标准启动被禁止,一般情况下保持 T\R\S\T 为低电平.如果在复位结束后 T\R\S\T 引脚变为高

电平,则通过引脚 P1H.5, P1H.4, P9.5, P9.4 设置来选择启动模式. Adapt mode 是一种非标准启动的模式,当 T\R\S\T 为低电平, 引脚 P1H.5, P1H.4, P9.5, P9.4设置为 1100 时进入 Adapt mode,此时所有引脚处于三态状态,用于连接内电路仿真器进行内

部仿真. 详细内容请参阅 XC164CS(XC164CM)的 datasheet 文档

Page 60: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

57

44. XC164的 ASC口

问题 xc164cs 有几个 ASC 口,资料上说有 2 个,可在 DAVE 中显示的只有 1 个,在 keil c166 μVision2 中,调试时好显示的只有 1 个,而在μVision3 中调试时显示有 2 个, 那 XC164CS 到底有几个 ASC 口,若有 2 个,怎样使 DAVE 中显示为 2 个 ASC 口? 请指教!!!!!

回答 也许是因为 ASC1 和 JTAG 共用管脚有关系。 不过没有关系,我想,你可以用 XC167CI 的 DIP,对 ASC1 进行初始化配置,将生成的文

件添加到 Keil 中的工程中

Page 61: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

58

45. 陷阱与外部中断

问题 现在有个麻烦的问题.我利用 cc6u 产生 pwm 输出,但是在某个时刻会有个信号(上升沿)过来,这时候我要马上拉高输出,并且重新输出 pwm 波.我看了看资料 1:如果利用陷阱功能的话,只能用软件陷阱.因为硬件陷阱状态要取决于外部信号的时间长短.我看了 DAVE 设置,好像和书上不太一致.dave 上说: A trap can only be generated by SW by setting bit TRPF 意思是只要将 TRPF 置位就可以产生陷阱.而书上 P267 说一定要结合外部/CTRAP. 不管上面所说如何,我要求在一个上升沿信号来的时候,pwm 立刻转到主动或者被动状态(就是高电平,这可以通过设置主动/被动电平实现),并且定时器从 0 开始计数(我采用边缘对齐方

式).周期值和比较值可以改变也可以保持上次的(这点不重要).请问有什么好办法实现?中断,陷阱都可以,只要能实现目的就行. 我说的上升沿信号是外部信号 . 我打算在外部快速中断实现 . 我在 dave 中看到

CCU6_vResetTmr 函数.它能定时器清 0,但是定时器不停止.我想知道: 1:定时器清 0 后,但是定时器不停止,那么它应该重新开始计数(从 0 开始).这样的话,根据书上

对边缘对齐模式的描述是:比较定时器从 000H 开始加计数,当达到保存在寄存器 TXp 中的周

期值时候,定时器清 0并重新开始计数.这时候输出信号变换到被动状态.------------所以我想问

的是:如果我调用 CCU6_vResetTmr 函数,那么它的作用是不是如上所述?这点对我的系统实

现很重要.!因为我需要在这个外部信号一到来,输出马上变成高电平(这点可以把被动状态设

置成高电平),并且从 0 开始计数,而且不需要重新赋值(比如周期值,比较值等).

回答 XC164CS 提供了不可屏蔽的陷阱功能,我理解硬件陷阱一般用于程序运行中特定系统状态

或错误才产生,不如堆栈上下溢出或操作错误时,软件陷阱则类似于中断当可被更高级的中

断或硬件陷阱中止。 我觉得你可以通过外部中断来实现你的功能要求。在外部中断程序中可以调用

CCU6_vResetTmr 函数.这时定时器开始从新计数当达到比较值时产生电平变换,只要正确的

设置主被动状态与高低电平的对应关系就可以实现你提出的要求。

Page 62: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

59

46. FIFO功能及用法

问题 请达人解释一下 FIFO 的功能及用法,c164ci 不支持该功能,书上也没有相关介绍

回答 FIFO 用于存储通过 ASC 发送或接收的数据,在 DAVE 环境下可以设置 FIFO 的中断等级来

确定暂存数据的多少。 只要在 DAVE 环境下使能 FIFO,在通过 ASC 发送或接收数据时将自动实现 FIFO 功能。

Page 63: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

60

47. 同步串口仿真

问题 在用同步串口时,是不是发送中断标志位 TIR 和忙标志位 BSY 由硬件自动置位复位而不需

要软件操作? 小弟想仿真同步串口发送数据,但软件仿真时 BSY 会置位,为什么硬件仿真时却置不了位?

是仿真板上拨码开关设置的不对还是其他问题?如何设置才能仿真串口发送数据?

回答 如果其它程序可以正常执行就应该和拨码开关配置没有关系。拨码开关主要用于起动模式配

置,除非用于 SPI bootloader 否则和 SSC 没有直接的关系。 发送中断标志位 TIR 是在进入中断服务程序或 PEC 服务时由硬件自动清零,若相应中断没

打开或不用中断方式而用查询方式处理,则硬件不会将其清零,因此工作在查询方式时要由

软件负责每次清零。BSY 完全由硬件清零,软件可不处理。硬件仿真时速度很快,BSY 从

置位到复位的过程应该很快,基本上是一次 SPI 传输的时间,大概是人眼不能分辨的吧。

Page 64: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

61

48. 指定地址定义变量

问题 我想定义一个变量是全局变量,在 idata 上.我在主程序开始定义,在中断程序中修改.系统编译

提示没有定义. 我的初衷是定义一个变量用于计算,但是中断程序可以改变他的值. void main(void) { static unsigned int idata T3_register; static unsigned char idata T3_R_psw; .................................} void INT_viEx0(void) interrupt CC1_CC8INT { GPT1_vStopTmr(GPT1_TIMER_3); //stop T3 T3_register = GPT1_uwReadTmr(GPT1_TIMER_3); //read T3 T3_R_psw = 0x55; //already read T3 ............................................} 定义成 extern 也不行. 我如果类似头文件一样,把他们定义在 IRAM 的 00F600H,00F602H #define T3_register (*((uword volatile *) 0xF600)) #define T3_R_psw (*((uword volatile *) 0xF602)) 不知道可以不?试了,错误更多? 那么又有一个问题,怎么把变量定义在绝对地址上?比如,我想使用 T3_R_psw 这个变量如同

在汇编中使用 R0 一样?

回答

Page 65: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

62

你可以用指针变量来实现,将变量定义为指针类型,然后再将绝对地址赋给该指针变量。比

如: #define BASE_ADDR (unsigned char far *)0x80000 + 0x01; unsigned char far *x; void main(void) { x = BASE_ADDR; *x = 0x55;} 我试验过了该变量 x 定义在绝对地址 0x80001 上,并且值为 0x55。 第一个问题你可以在中断中定义这个变量然后在主程序中用 extern 声明。你可以参考我们

评估板例程中 AD 转换的例子,它在中断中定义了一个变量 unsigned int ad_end=0; 在中断中改变它的值为 1,然后在主程序中通过查询这个变量的值来查看 AD 转换是否正常

进行。在主程序中定义 extern unsigned int ad_end;

Page 66: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

63

49. OCDS的 TMS引脚替换功能

问题 在调试编码盘程序时将 P3.4 设置为 T3EUD 增量接口输入方式,这个替换功能与 OCDS 的

TMS 引脚冲突,原想通过跳线来设置选择,可在调试过程中将程序下载下去后一上电程序

就开始执行,P3.4 工作在增量接口输入方式下,这时无论怎样设置跳线选择也不能实现通

过 JTAG 下载程序了。好像没有办法让 P3.4 恢复到 OCDS 的 TMS 工作方式了,怎么办啊?

各位大侠帮帮忙吧,谢谢了。 对了忘记说了,我用的是 XC164CM,但 OCDS 部分和 XC164CS 是相同的,MEMTOOL 还

不支持 XC164CM,所以串口下载程序这条路也走不通了。

回答 MEMTOOL3.3.3 支持 XC164CM,可以用 MEMTOOL 下载程序调试.

Page 67: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

64

50. CAN模块 Message Object

问题 请问 CAN 中的 message object 共有 32 个 是都要用吗?它是用来做什么的?

回答 message object 像是 CAN 的接收和發送緩沖區,你可以指定某個 message object 為接收或是

發送,如果是接收,則當 object 0 裡的數據沒有被取走時,新的 CAN 數據會被存入 object 1,依次,直到所有的 Message Object 裝滿,這時候還有數據進來,就會置起 loss 標志了。 不過我設置了 Message object0-14 為接收,好像數據只進入 object0,後面的都沒有進去,有

些時候數據會丟掉,害得我只得在中斷裡接收 CAN 數據。 发送和接收过程也可不通过远程帧进行。通过软件将方向设为发送的 message object 的

MSGCTRLn 寄存器 TXRQ 位设为 1 发送数据帧(含 data 段,29 位或 11 位标识符等),若

将方向设为接收的 message object 的 MSGCTRLn 寄存器 TXRQ 位设为 1 发送远程帧(除 data段的其他信息)。 另外若设置Message object0-14為接收,接收时数据仅放在符合接收条件的最小标号Message object 中,CAN 模块不会考虑该 Message object 数据是否被覆盖,只会给出是否被覆盖的标

志位(在寄存器 MSGCTRLn 中)。所以将各接收 Message object 能接收的表示符设的不同,

數据就会進入对应的各接收 Message object 中,一般不会发生覆盖。

Page 68: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

65

51. CAN和 CPU对 Message Object处理

问题 请问:CAN 中 CAN 控制器对 message object 的处理和 CPU 对 message object 的处理有什么区别吗?

回答 简单的说对于方向设为发送的 message object,CPU(即用户程序)向 message object 中写入

要发送的数据及控制字信息,CAN 控制器从 message object 读出数据发送到网上,同时给出

某些标志。对于方向设为接收的 message object 则正相反。 只有CAN控制器的开发者能提供CAN控制器对message object的最具体和正确的细节,CPU对 message object 的处理是用户软件必须完成的工作。 其实,只要详细阅读芯片的 user manual,对 CAN 控制器的工作过程就会了解的较为清楚了。

Page 69: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

66

52. P1H口的驱动电流

问题 XC164CS 的 P1H 口的驱动电流最大是多大?可用来直接驱动直径为 5 毫米的普亮的发光二

级管吗?相关技术资料在哪里可找到?

回答 如果设置为 strong driver, 单个 IO 口最大 10mA;但 P1H/P1L 全部 16 个 IO 口加起来不能超

过 50mA。 相关文档见 XC164CS datasheet V2.1 p49 DC Parameters

Page 70: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

67

53. 软件复位问题

问题 1:用 c 怎么实现软件复位,就是相当于 srst 的作用?我也不会混合编程.如果我的软件复位要在

中断中实现,可以吗? 2:我要取消已经产生的中断,怎么办啊?就是 B 中断正在运行,但是 A 中断打断了 B 中断,我处

理完 A 中断后,并不想回到 B 中断中去,怎么办?还有我正在处理 B 中断,来了 A 中断,在程序

中我禁止中断了,但是我处理完 B 中断,并不想理会已经挂起的 A 中断,怎么办?问题就好像

C196 的中断屏蔽寄存器一样,我只要在中断屏蔽寄存器把他清掉,就不会再响应了.

回答 这个看上去比较简单:因为 A 中断为后发生,在 B 中断入口处检查是否有 A 中断标志位、

在出口处再检查,这样可以判别 A 中断是否在 B 中断运行过程中发生。如果在运行过程中

发生,则在 B 中断出口处对 A 中断标志位清零。 软件复位有两种常用的途径:srst 和看门狗。看门狗的实现还是很容易的,就是中断中调用

一个大延时,让看门狗定时器溢出。如果时间要求不苛刻,应该时可行的。调用汇编要简单

的多.

Page 71: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

68

54. 软件复位函数

问题 有大侠告诉我:((void(code *)(void))0x0000)(); 可以在 c51中实现软件复位.虽然我不用这个了,但是我还是想知道这个函数的构造 .它是不是类似定义绝对地址那样 ,把 pc 指针指向

oxoooo(51 单片机的起始地址)?

回答 在源程序中实现软件复位: 您可以使用下面的程序跳到 0000H 实现软复位,下面的程序实际上是一个函数指针,指针

指向了 0000H 地址。((void (code *) (void)) 0x0000) (); 下面的例子将实现软件自复位 void reset (void){((void (code *) (void)) 0x0000) ();}void main (void){reset ();} 你可能注意到以上的软复位程序并不能清除 8051 的中断系统和某些 8051 的外围设备,当您

在中断程序中调用上面的软件复位程序后,中断将再不能触发。因此,以上的软复位程序不

能在中断子程序中调用。 下面的小段汇编函数可以在中断程序或主程序中调用,该函数将 0x0000 压栈,然后通过

“RETI”出栈,这将清除中断环境并让程序从 0000H 重新开始运行。 ?PR?RESET SEGMENT CODERSEG ?PR?RESET; C prototype: void reset (void);PUBLIC resetreset: POP ACC ; pop return address POP ACC CLR A ; push 0 as new PUSH ACC ; return address to stack PUSH ACC RETI ; execute return of interrupt END 以上程序在选择 bank 0 寄存器组时工作良好,假如选择的不是 bank0 寄存器组,那么可能

无法获得预料的结果。你应该在以上的程序或启动代码中加上“MOV PSW, #0”来选择 bank 0 寄存器组。

Page 72: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

69

55. 实时时钟和通用定时单元区别

问题 实时时钟和通用定时单元都可以当做定时器使用,只是实时时钟利用晶振频率 ,而通用定

时单元用总线频率,请问除此之外二者有什么区别吗?

回答 实时时钟还可用于系统时钟,用于确定当前的时间和日期,另外定时时间较长; 通用定时器定时时间有限,但可以通过设置预分频来选择不同的频率,这样定时的范围比较

大。

Page 73: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

70

56. START_V2.A66启动文件

问题 能否详细介绍一下 START_V2.A66 启动文件内容及用法?

回答 启动文件 START_V2.A66 包含目标板启动代码,可在每个 project 中加入这个文件,只要复

位该文件立即执行;执行新建 project 时选择好 Device 后将自动提示加入到 project 中。该启

动文件其功能包括: l 定义系统及用户堆栈 l 定义启动代码 l CPU 配置 l 外围配置 l 定义复位配置寄存器 l PLL 锁相环配置 l FOCON 频率输出信号配置 l 外部总线配置 启动文件可以下图窗口的形式查看修改各个寄存器,也可以 Text 形式查看修改各寄存器。

以文本形式查看时还能看到每条语句详细的注释。 假如需要修改启动文件来满足目标硬件,应该把文件 START_V2.A66 复制一份到项目文件

夹中,以防万一。 一. 系统堆栈及用户堆栈定义 这里可配置最大系统堆栈大小,用户堆栈大小等四个参数。 SSTSZ 最大系统堆栈大小定义 USTSZ 用户堆栈大小定义,该堆栈空间用 R0 读取

Page 74: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

71

UST1SZ 局部寄存器 1 用户堆栈 此定义针对局部寄存器 1 的中断功能 UST2SZ 局部寄存器 2 用户堆栈,此定义针对局部寄存器 2 的中断功能 二. 启动代码定义 CLR_MEMORY=1 使能存储器 0 初始化 INIT_VARS=1 使能变量初始化 DPPUSE=1 增加启动代码空间 DPP3USE=1 变量初始化中使能 DPP3 数据页的使用 三. CPU 配置 包括对 CPUCON1 和 CPUCON2 寄存器的配置。 对 CPUCON1 配置使能零周期跳转指令功能;使能转移预报单元;使能段模式;两矢量间

字节数。 对 CPUCON2 配置 PEC 事件直接插入模式;块传送模式;FIFO 预存指等级等。 四. 外围配置 对单片机各个模式使能控制。 五. 复位寄存器 RSTCON 配置 控制复位功能的时钟周期及复位的软硬件控制。 六. PLL 锁相环配置 这是经常使用的一个模块。DAVE 软件也提供了配置 PLL 锁相环的功能,但在 KEIL 环境

下不能及时更新 DAVE 软件中对 PLL 的配置,所以需要自己手动来修改 PLL 寄存器来得到

最终的时钟频率。这里需要注意的是配置频率的定义与寄存器之间的关系式,如 Fpll = Fvco / (PLLODIV+1),一般的配置过程是先输入分频(由 fosc 得到 fin),再倍频(由 fin 得到 fvco),然后再输出分频(由 fvco 得到 fpll),最好可得到多种 fcpu。建议把文件 START_V2.A66复制一份到项目文件夹中进行修改,尽量不去修改库文件。 七. 看门狗定时器配置

Page 75: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

72

当使能看门狗时需要配置输入频率和重载值。 八. 输出频率信号 FOCON 控制 单片机提供了一个时钟输出的引脚 P3.15,通过配置 FOCON 来选择输出的频率及重载值。 九. 外部总线配置 当外部总线 EBC 使能后,需要配置一些如 CSx 段地址引脚,总线模式等内容。这里分别提

供了对 CS0-CS7 的配置,包括段起始地址,总线模式选择,同步或异步准备控制及各相时

钟周期的选择。这些寄存器 DAVE 软件也提供了相应的配置窗口 以上的一些配置完全可以通过 DAVE 软件来实现,在 keil 环境下编译时需要特别注意 PLL锁相环配置及总线模式的选择。 文件 START_V2.A66 后半部分还提供了用汇编语言来对以上九个项目进行配置的设置,这

里就不再详细说明。

Page 76: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

73

57. PEC数据传送问题 1

问题 我想用 pec 中断将捕捉到的定时器值传送到指定的地址,在 DAVE 中将数据源指针与目的指

针都设置好了。但是实际应用的时候发现并没有目的地址中是空的。请问这是为什么? 我的 pec 设置为传送 20 次,数据源指针设为 CC2_CC22,目的指针指向一个数组 temp[]。不知

道这样设置中断对不对。程序运行的时候数组 temp[].中的值为空。都是 0x0000. 怎样看 PECCx 的 COUNT 位的值?

回答 仿真时先看一下目的指针中的数值是否正确,鼠标移动到那个变量即可显示,如果这个值正

确就是传送到指定地址的问题。 若目的指针指向的地址是空的,会不会中断设置得不对,PEC 没有发生。PEC 源地址指针

与目的地址指针设好后,数据传送应该是 CPU 自动进行的。 除此之外,还有中断优先级、组优先级、PECCx 寄存器中的 PLEV 位,其组合要满足 User Manual 的 5-20、5-21 页的要求,才会产生 PEC 中断,源指针和目的指针的高位地址是否正

确写入 PECSEGx 寄存器?另外可以在程序运行过后停下来看一下 PECCx 寄存器中的

COUNT 位与初始设置值相比是否发生了变化,若无变化,说明未发生 PEC 中断,否则肯定

产生了 PEC 中断,根据其与初始设置值的差值可算出 PEC 的发生次数。 查看 COUNT 值可以在 keil 环境下,在进入 Debug 后,菜单“View”下选“Memory Window”

选项,内存窗口会出现在屏幕下边,输入想要观察的内存地址(即 PECCx 寄存器的地址),

其内容就会显示出来。

Page 77: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

74

58. PEC数据传送问题 2

问题 在使用 CC2 模块捕获脉冲宽度时想用 PEC 中断来处理,但数据老传送不出去,为什么?在

PEC 中传送数据用什么函数?

回答 XC164 周边事件控制器提供了 8 个 PEC 的服务通道用于在数据页间传送数据,这是可能实

现的最快的中断响应。各个通道是由专用的 PEC 通道计数/控制寄存器(PECCx)和数据传

送源指针(SRCPx)和目的指针(DSTPx)来控制的。数据传送的次数是由 COUNT 值来控

制的,每次 PEC 传送后,COUNT 值减 1,且请求标志清零,表示请求已得到了服务。 数据传送中一般都是通过函数_sof_来实现的可以参考对源指针的操作,如下: SRCP0 = _sof_(&CC2_CC22) 如果想要将捕获到的值保存到数组中,可用 DSTP0 = _sof_(&temp)来实现。

Page 78: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

75

59. CAN设置疑点

问题 CAN 设置疑点一:它的内部定义有 8 个接点(node),他这么的定义有什么好处呢?给我的

感觉一个节点就是一个 CAN 的终端,即也唯一对应一个 ID 号,难道它可以定义 8 个不同

的 ID 号,但是我有没有找到相应对应 ID 好的寄存器。 疑点二:每个消息对象(Message Object)中的数据占用的地址是固定的吗? 在 C167 中它特别的定义了一个结构体,并且定义所对应功能的地址不能改变:如 struct can_obj { unsigned int msg_ctl; /* Message Control */ unsigned long arbitr; /* Arbitration */ unsigned char msg_cfg; /* Message Configuration */ unsigned char msg[8]; /* Message Data 0 .. 7 */ unsigned char dummy; /* Reserved Byte */ }; 不知道 XC167 是否有这种限制。

回答 我的理解是这样的,XC167 提供了 2 个 node,分别为 A 和 B,这两个节点就是双 CAN 的

终端,相应于这两个节点共提供了 32 个 信息体,每个信息体(Message Object)定义不同的 ID 号。 XC167 中每个信息体中数据占用的地址也是固定的,同时也定义了一个结构体,但结构体

中定义的变量内容增多了,这与 C167 操作有相似之处。以下是 XC167 定义的信息体数据

的结构体及地址,您可以参考一下。 struct stCanObj

Page 79: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

76

{ ubyte ubData[8]; // Message Data 0..7 ulong ulCANAR; // Arbitration Register ulong ulCANAMR; // Acceptance Mask Register uword uwMSGCTR; // Message Control Register uword uwCounter; // Frame Counter uword uwMSGCFG; // Message Configuration Register uword uwINP; // Interrupt Node Pointer uword uwCANFCR; // FIFO / Gateway Control Register uword uwCANPTR; // FIFO Pointer ulong ulReserved; // Reserved }; #define CAN_HWOBJ ((struct stCanObj volatile far *) 0x200300)

Page 80: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

77

60. PWM死区时间

问题 在用 ccu6 产生 pwm.我如果使用软件陷阱,能使它重新开始,但是如果它正在被动状态(高电

平),我使它复位,它会切换到主动状态,再切换到被动状态.也就是说我输出 pwm,正在高电平,这时候我复位它,按照想法而言,它应该继续输出高电平(我设定好了),只不过定时器重新计数

罢了.但是实际上它会拉到低电平,然后再输出高.虽然这个低电平非常短.我想知道这和死区

时间是不是有关系?那么死区时间到底是指什么?

回答 我想你提到的复位后输出一个很小的低电平与死区时间是对应的。所谓死区时间就是在控制

功率开关器件(如 MOSFET)时,同桥臂的两开关管容易发生短路故障。为解决这一问题,

通常的办法是加入一个死区时间,即在一只开关管关断后隔一段时间再开通另一只开关管死

区时间是为了避免同一个通道的两个管子同时导通对电路造成的影响。

Page 81: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

78

61. CAN中断节点问题

问题 使用 XC167 中 CAN 模块,其中 MSGCFGHn 寄存器中的 RXINP 和 TXINP 对他们的描述是

这样的如下: 000B CAN interrupt node 0 is selected. ⋯ ⋯ 111B CAN interrupt node 7 is selected. 在这里我就有点想不通的是它为什么定义 0 到 7 个 node 呢?您看我这样理解是否正确:首

先它相当于一个缓冲区,当总线上的其他终端对此接点的某个信息对象(例如:message Objiect 0)的中断请求时,而此时 CPU 正忙还来不及进行接收或发送的数据处理此时就将

其请求的节点记录在上面的 node0~7 中。

回答

CAN 模块提供了 32×2 个信息体专用中断请求源与 8 个 node 的控制中断请求源。这 8 个中

断 node 中每一个都能单独触发相关中断,并设置自己的优先级。我理解是这样的,每一个

中断 node 可以控制多个中断源,而且每一个中断 node 有自己的中断矢量可以设置不同的优

先级,在使用时可根据不同要求选择不同的中断 node 来控制信息体的中断。

Page 82: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

79

62. SPI总线通信问题

问题 如何通过 SPI 总线与外部存储设备实现通信?向外扩的 EEPROM 中发送数据及读取数据?

回答 XC16x 提供了两个高速同步串行口 SSC,可实现 XC16x 与其他单片机,微处理器或外部设

备的通信。SSC 的时钟频率可与 CPU 同步,且具有全双工和半双工同步通信模式。串行时

钟信号可由 SSC 本身产生(主模式),也可由外部接收(从模式)。可以和 SPI 兼容的设

备通信。 通信过程中数据由引脚 MTSR/P3.9(主机发送/从机接收)和引脚 MRST/P3.8(主机接收/从机

发送)来发送和接收,时钟信号由引脚 SCLK/P3.13 输入和输出。 软件部分需要设置主/从模式,控制引脚选择,数据宽度及发送/接收段等,将片选信号至低

即可在 SCLK 端输出时钟信号,通过函数 SSC0_vSendData();能将数据连续发送出去,这里

需要注意的是要确定发送到的从机的地址范围。将存储在特定地址范围的数据可通过

SSC0_uwGetData();函数接收到。

Page 83: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

80

63. 变量扩展问题

问题 我在应用中需要把 16 位的变量扩展成 32 位的,可是不知道具体怎么操作,那位大侠指点一

下。 我设想是先设一个 32 位的空变量,再把一个 16 位的变量值赋给它。例如我需要将 i=ox34b6,扩展成 0x000034b6,设 j=0x00000000,j=i;之后 j 的值是否就是我想要的。

回答 可使用强制类型转换. 例如: unsigned int i=0x34b6; unsigned long int j=0; j=(unsigned long int)(i);

Page 84: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

81

64. PEC数据传送次数的计算

问题 那我现在有两个方案来实现对数据传送次数的计数,你看哪个在 xc164 上实现: 方案一:将 PEC 设置成数据连续传送,在中断函数中设置变量来计算数据传送的次数. 方案二:将 PEC 设置成数据有限次传送,通过查询 PEC 寄存器的COUNT位来确定已经

传送数据的次数。 因为你说可以在中断中设置一个变量来计算数据传送的次数,我不是很明白 PEC 中断也调

用中断函数吗?

回答 发生 PEC 中断时不会调用用户定义的中断服务例程的,是由 PEC 自动处理,直到 COUNT为 0 时才会进入用户中断例程。 方案一中连续传送方式不会进入用户中断例程,所以不能在中断例程中计算传输次数;方案

二查询 COUNT 值也不应在用户中断例程中,这样查的值总是 0。 既然有限次传送的次数是用户指定的,那为啥还要查呢?要是想确定当前已经传送了多少,

那直接在中断例程外读 COUNT 值就可以了

Page 85: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

82

65. 输出端口驱动继电器问题

问题 XC164CS 单片机输出端口接 2K 电阻,驱动继电器,继电器线圈两端接电解电容,结果发

现继电器有时好用,有时不好用,这是什么原因?

回答 什么样的继电器,这么小的电流也可以驱动? 接 2k 电阻后,驱动电流最多 2.5mA。 线圈两端也不能用电解电容,因为线圈两端的电压极性是变化的。将电解电容换成独石电容.

Page 86: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

83

66. 片选信号切换问题

问题 我刚用 xc167ci 不久 现在外接了 4 片片选存储设备 对一片外部 ram 的读写都正常 但是,我不太清楚如何实现对 cs0,1,2,3 的切换控制,需要设置那些寄存器?(任何时刻 只选择一片有效) 比如说 EnableCs0(){ ? } EnableCs1(){ ? } EnableCs2(){ ? } EnableCs3(){ ? } 请斑竹和各位朋友指点一下!谢谢阿

回答 用 DAVE GUI,对 EBC 相关寄存器进行设置,很方便. 不需要用程序切换片选信号的,使能片选不表示使它输出低,四个片选信号只会同时有一个

有效,存取哪个的对应地址范围那个就有效。不存取任意一个时将保持最后一次存取过的片

选有效,或者都无效.

Page 87: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

84

67. 振荡器监视器

问题 在实验测试用 CC2 单元捕获脉冲测量转速时,加上外部干扰信号源—低频继电器,开关频率

约 1s. 当闭合继电器开关后测量转速增至原转速的二倍,不知问题出在何处?

回答 当加上干扰源后测量结果为原来的二倍,并非测量为不定值,所以基本将原因锁定为软件部分

的原因或硬件电路设计有些系统配置引脚处理不当. 加上干扰源后测量单片机的 CLKOUT 引脚,发现输出时钟频率为 16M(晶振为 4M,经 PLL 锁

相环配置后 Vco 为 16M,分频输出设定为 8M), 怀疑 PLL 锁相环发生了变化. 在硬件电路设计中 P0H.5-7 悬空. 单片机的 P0H.5-7 即 CLKCFG 用于初始配置时钟的产生模式. 当 CLKCFG=011,工作在直接驱动模式; 当 CLKCFG=000,工作在预分频模式; 当 CLKCFG=111,缺省设置工作在 PLL 锁相环工作模式;默认情况下时钟系数为 3;在默认情

况下振荡器监视器是打开的. 经过分析测试的结果找出问题可能就出在振荡器监视器身上,当加上外部干扰源后可能会对

振荡晶体产生了影响,从而振荡器监视器就关闭了 PLL 锁相环相关电路,直接按 fvco 频率输

出了.

Page 88: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

85

68. PWM影像寄存器问题

问题 1:pwm影像寄存器是不是双口 ram?我查了查资料,好像没有说明它是双口 ram(dram)?意思是:当传输使能,周期寄存器减到 0(中心对齐模式),正要从影像寄存器取值的时候,这时候突然向

影像寄存器写数据,会出现什么结果? 2:如果这次的pwm影像寄存器没有被赋值到实际寄存器里,新的影像值又要写了.这时候会

将数据更新还是保持原来的不变(也就是写不进来)?

回答 我觉得 PWM 影像寄存器可以说是一个双口 ram,但是只是在没有发生 ShadowTransfer 时才

可以任意的读写.你提到的第一个问题,当周期寄存器减到0正要从影响寄存器取值时,如果没

有 Enable ShadowTransfer,则将刷新影响寄存器中的值. 第二个问题我也觉得它会将影像寄存器中的值刷新.

Page 89: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

86

69. CCU6捕获功能

问题 我想请教一下 CAPCOM6 的几个问题: 情况是这样的, CAPCOM6 具有捕捉脉宽的功能,我在用其来捕捉不断变化的 PWM 波形

的脉宽。 一路捕捉的时候结果都对,但是一到两路捕捉用串口发出来的结果都不对,或者偶尔对,但

是总是出错。我还没有实验三路同时的情况,不过我想只能是更坏。 我曾试过改变 interrupt node pointer,但是结果也不怎么样,在中断的设置中,优先级高的,

发出的结果是对的,偶尔也出错,不象一路的时候,结果非常的理想。 串口基本上是默认的设置,波特率是 19200;其中在中断中加入了一些相对简单的运算,几

个加渐发,一个 16 位乘法和一个 16 位除法,还有移位和串口的发送语句。 我想请问,我的设置等其他方面有问题吗?应当怎么样设置? 如何同时测量 2or 3 路 pwm 的脉宽,并且发送出来?如果要对脉宽再进行一些较复杂的运

算,那些程序应当放在哪里

回答 首先 CCU6 确实有比较/捕获功能,但这个单元更适合于专门针对电机控制,内部寄存器比较

多,设置比较繁琐.XC164 提供了 CC1 和 CC2 单元提供了共 32 个通道用于比较/捕获功能,这个模块应用起来比较方便,建议使用这两个模块用于捕获脉宽.

Page 90: 乾勤科技 - pudn.comread.pudn.com/downloads150/doc/651971/XC166Development.pdf乾勤科技 2 2. C164 单片机的译码方式 问题 C164 单片机是如何实现译码的? 回答

乾勤科技

87

70. 外部中断响应时间

问题 请问 20M 时外部中断响应时间一般多久? 我用逻辑分析仪测试了一下,有 3us 左右,要那么久? 是检测到一个外部下降沿后开始接用 SSC 接收数据,数据发送设备也是用 SSC 发出用逻辑

分析仪测试,发送数据块间隔是几百纳秒,用 IO 模拟产生下降沿,用逻辑分析仪测试,从

下降沿发生到中断响应置高电平这段时间差不多 3us,不知道能不能快点,要不然接收数据

就不完全,现在还没想到其他方法? 有没有什么法可以加快外部中断的响应

回答 用快速外部中断检测下降沿会快一点,不过你的 3us 的主要原因可能是在中断程序内部. 如果是简单的数据传输,可以用 PEC