001-13266_Counter8.pdf

8-Bit 计数器数据手册
Counter8 V 2.60
001-66731 Rev. **
8-Bit Counter
Copyright © 2002-2011 Cypress Semiconductor Corporation. All Rights Reserved.
PSoC® 模块
资源
数字
API 内存 (字节)
模拟 CT
模拟 SC
闪存
内存
引脚 (每个外
部 I/O)
CY8C29/27/24/22/21xxx、CY8C23x33、CYWUSB6953、CY7C64215、CY8CLED02/04/08/16、CY8CLED0xD、CY8CLED0xG、
CY8CTST110、CY8CTMG110、CY8CTST120、CY8CTMG120、CY8CTMA120、CY8C21x45、CY8C22x45、CY8CTMA30xx、
CY8C28x45、CY8CPLC20、CY8CLED16P01、 CY8C21x12
8-bit
1
0
0
71
0
1
1
0
0
107
0
1
CY8C26/25xxx
8-bit
如需一个或多个使用此用户模块的完全配置的功能性示例工程,请转到
www.cypress.com/psocexampleprojects.
功能和概述
„
„
„
„
„
„
8-bit 通用计数器使用一个 PSoC 模块
源时钟频率高达 48 MHz
计数结束后自动重新加载计数周期
可编程脉冲宽度
输入 ( 信号 ) 启用 / 禁用计数器连续操作
中断方式可选择比较输出或计数结束
8-Bit 计数器用户模块可提供一个递减计数器,并配有可编程周期和脉冲宽度。 可从任何系统基准时钟或
外部源选择时钟和使能信号。 一旦启动,计数器便持续运行,每次计数结束,会从周期寄存器重新加载其
内部值重新开始计数。 在每个时钟周期,计数器都会将当前计数与比较寄存器中存储的值进行比较。 在每
个时钟周期中,计数器都会将计数与比较寄存器中的值进行对比测试,测试两数为 “ 小于 ”(less than)
还是 “ 小于或等于 ”(less than or equal to) 关系。 比较器输出所提供的逻辑电平可路由至引脚或其
他用户模块。 大多数 PSoC 器件都允许把计数结束的输出信号像这样路由出去。 如果您的器件有此功能,
则会显示在器件编辑器中。 可设计为当计数器达到计数结束或比较器 (主要)输出激活时,则触发中断。
Cypress Semiconductor Corporation
Document Number: 001-66731 Rev. **
•
198 Champion Court
•
San Jose, CA 95134-1709
•
408-943-2600
Revised January 20, 2011
[+] Feedback
8-Bit Counter
Figure 1. 计数器框图 (对于大多数 PSoC 器件),数据路径宽度 n = 8 位
Figure 2. 计数器框图 (对于不含终端计数输出的器件),数据路径宽度 n = 8 位
功能说明
计数器用户模块利用一到四个数字 PSoC 模块,每个模块提供 8 位分辨率。 要构成超过 8 位的计数器,
请将连续几个模块彼此关联,以便使他们内部的进位位、计数结束值和比较信号可以同步成一个整体。 这
样可使模块间的 8-bit 计数、周期和比较寄存器 (分别对应数据寄存器 DR0、DR1 和 DR2)相互连结,以
提供所需的分辨率。 这样,宽度大于 8 位的计数器即可作为一个完整的单片同步计数器进行操作。
计数器 API 提供了可用 C 语言和汇编语言调用的多种函数,以便停止或启动计数器操作以及读写各种数
据寄存器。 数据寄存器的值也可以利用器件编辑器进行设置。 一旦启动,计数寄存器将沿着每个时钟周期
的上升沿进行递减,此时高电平有效的使能输入信号将被确认。 当计数寄存器达到零即结束计数之后出现
时钟上升沿时,计数寄存器将从周期寄存器中重新加载值。
随时可以用新的值来修改周期寄存器。 计数器停止运行后,在周期寄存器中写入值也会更改计数寄存器中
的值。 计数器仍在运行时,在周期寄存器中写入值,不会将新的周期值更新到计数寄存器中,而是在达到
结束当前计数后下一次重新加载时才会更新。 由于计数为 0 时即达到终端计数,因此操作周期和输出信
号周期比周期寄存器中存储的值大 1。 输入时钟周期的持续时间是通过以下公式得出的。
Equation 1
计数器在停止运行时将把输出置为低电平。 比较器在运行时,将控制输出信号的占空比。 在每个时钟周期
中,比较器都会将计数寄存器的值和比较寄存器的值进行对比测试。 比较器将根据利用器件编辑器选定的
选项,测试两数为 “ 小于 ”(less than) 还是 “ 小于或等于 ”(less than or equal to) 关系。 按照设
置好的周期,计数器在时钟的上升沿给出比较器的高电平有效的真实值。 比较值和周期的比率将设定输出
波形的占空比。 占空比可通过以下公式计算得出。
Document Number: 001-66731 Rev. **
Page 2 of 14
[+] Feedback
8-Bit Counter
Equation 2
下表根据周期寄存器、比较寄存器和比较操作的设置,总结了一些特殊的输出信号条件。
Table 1.
计数器的特殊输出信号条件
周期寄存器的值
比较类型
比较寄存器的值
脉冲宽度高电平定时器与周期的
比率
0
无需关注
> 0
1.0
0
≤
0
1.0
0
<
0
0.0
> 0
≤
0
1/ (周期 +1)
> 0
<
0
0.0
周期 = 比较
≤
周期 = 比较
1.0
周期 = 比较
<
周期 = 比较
周期 / (周期 +1)
比较值 > 周期
无需关注
比较值 > 周期
1.0
比较寄存器的值可利用器件编辑器进行设置,或在运行时利用 API 进行设置。 周期寄存器在达到计数结
束前会为计数寄存器提供缓冲,但比较寄存器则不会以这种方式进行缓冲。 因此,对比较寄存器所做的更
改在下一个时钟周期才会影响比较输出,而不是在达到结束计数后立即生效。 这可能会产生多个不同脉冲
的周期。
在 CY8C29/27/24/22/21xxx 器件系列中,计数器用户模块会将结束计数信号作为辅助输出提供。 在达到
结束计数后的时钟周期上升沿出现时,此高电平有效信号将被激活,此时计数寄存器将从周期寄存器加载
值。
可设计为当达到结束计数或比较值为真时则触发中断。 比较器输出会在输出信号的上升沿触发中断,而结
束计数会在输出信号下降沿之前的半个时钟周期触发中断。 此选项可利用器件编辑器进行设置。 在运行时
可利用计数器 API 来启用或禁用中断。 在触发计数器中断前必须启用全局中断。
在修改比较寄存器时应格外小心,因为其值将与当前计数值共同决定计数器的输出状态。 为避免过早将输
出信号置为低电平,以及避免发生潜在的短时脉冲,应在利用中断检测出结束计数条件后再修改比较寄存
器的值。
对于需要更快占空比更新间隔的应用,计数器的输出可路由至对其状态进行轮询的引脚。 一旦检测到输出
从高到低的跃变,则可更新比较。 请注意,如果比较寄存器引起比较条件为真,则输出将在下一个时钟周
期被置为高电平。
在获取计数寄存器的值时应格外小心。 在读取计数寄存器时,会将其内容锁存入比较寄存器。 这会使输出
占空比发生变化。
如需实时读取计数寄存器的值,可调用 ReadCounter() API 函数。 此函数将暂时禁用时钟,保存比较寄存
器的内容、读取计数寄存器的值、读取比较寄存器的值、恢复比较寄存器,然后恢复时钟运作。 请参见 “
应用程序编程接口 ” 部分对 ReadCounter() 函数的说明,以了解可能发生的副作用。
Document Number: 001-66731 Rev. **
Page 3 of 14
[+] Feedback
8-Bit Counter
时序
计数器用户模块的操作可以被置为打通和关断,或由 PSoC 器件全局总线特性路由至计数器的外部引脚来
计时。 下图说明了计数器用户模块的时序。
Figure 3. 计数器时序图
直流和交流电气特性
Table 2.
CY8C26/25xxx 器件系列的计数器交流电气特性
参数
典型值
极限值
单位
条件和注释
最大输入频率
--
481
MHz
8-bit 宽度,Vdd=5.0V2
最大输出频率
--
241
MHz
Vdd=5.0V 及 48 MHz 输入时钟
--
123
MHz
Vdd=3.3V 及 24 MHz 输入时钟
Table 3.
CY8C29/27/24/22/21xxx 器件系列的计数器交流电气特性
参数
典型值
极限值
单位
条件和注释
最大输入频率
--
481
MHz
Vdd=5.0V2
最大输出频率
--
241
MHz
Vdd=5.0V 及 48 MHz 输入时钟
--
123
MHz
Vdd=3.3V 及 24 MHz 输入时钟
电气特性注释
1.
2.
3.
如果输入或输出通过全局总线路由,则频率限制为不超过 12 MHz。
所提供的使能信号始终为高电平;否则,限制为 24 MHz。
PSoC 模块在 3.3V 电压下运行时,可用的最快时钟频率为 24 MHz。
Document Number: 001-66731 Rev. **
Page 4 of 14
[+] Feedback
8-Bit Counter
放置
计数器每 8 位分辨率使用一个数字 PSoC 模块。 如果分配了多个模块,则器件编辑器将把所有模块连续放
置,并按模块数递增从最低有效位 (LSB) 到最高有效位 (MSB) 进行排序。 每个模块都有一个给定的符号
名,器件编辑器会在放置模块的过程中以及放置之后显示该名称。 API 使用用户指定的实例名称和模块名
称来分配所有寄存器名称,以便通过 API include 文件直接访问计数器寄存器。 多个计数器用户模块所指
定的模块名称见下表所示。
Table 4.
映射 PSoC 模块的符号名
PSoC 模块数
1
8-Bit 计数器
CNTR8
参数和资源
使用器件编辑器选择和放置计数器用户模块后,就可以选择或更改下列参数的值。
时钟 (Clock)
从一个可用源中选择 “ 时钟 ”(Clock) 参数。 这些源包括 48 MHz 振荡器(仅适用于 5.0V 运行)、
从 24 MHz 系统时钟细分出来的较低频率 (24V1 与 24V2)、其他 PSoC 模块,以及通过全局输入和
输出路由的外部输入。 当模块使用外部数字时钟时,应将行输入同步关闭,以获得最佳精度以及进
行睡眠操作。
使能 (Enable)
从一个可用源中选择 “ 使能 ”(Enable) 参数。 在无需重设计数器的情况下,高电平输入将启用连
续计数,而低电平输入将禁用计数。
输出 (Output)
“ 输出 ”(Output) 参数可以设置为禁用,或将其路由至四个全局输出信号之一;此参数仅适用于
PSoC 器件中的 CY8C26/25xxx 系列。
比较输出 (CompareOut)
比较输出可以设置为禁用 (在不干扰中断操作的情况下),或将其连接到任意行输出总线。 无论设
置如何,此参数均可作为下一个更高的数字 PSoC 模块以及模拟列时钟选择复用器的输入使用。 此参
数仅在 PSoC 器件的 CY8C29/27/24/22/21xxx 系列成员中显示。
结束计数输出 (TerminalCountOut)
结束计数输出是一个辅助的计数器输出。 通过此参数可以禁用计数器输出,或将该输出连接到任意
行输出总线。 此参数仅在 PSoC 器件的 CY8C29/27/24/22/21xxx 系列成员中显示。
周期 (Period)
此参数可以设置计数器的周期。 数值范围介于 0 到 2n-1 之间,其中 n 是计数器的位宽。 周期已经
载入周期寄存器。 计数器的有效输出波形周期为周期计数 + 1。 可使用 API 修改此值。
比较值 (CompareValue)
此参数可设置比较寄存器的比较值。 数值范围介于 0 到周期值之间。 可使用 API 修改此值。
比较类型 (CompareType)
此参数可将比较函数类型设置为 “ 小于 ”(less than) 或 “ 小于或等于 ”(less than or equal),
如之前功能说明中所述。
Document Number: 001-66731 Rev. **
Page 5 of 14
[+] Feedback
8-Bit Counter
中断类型 (InterruptType)
当比较器为真或达到计数终止时,计数器均可生成中断。 单独的寄存器可以独立启用中断。
时钟同步 (ClockSync)
在 PSoC 器件中,数字模块可以在系统时钟以外还提供其他时钟源。 数字时钟源甚至可以用连锁方式
串联起来。 这样就引入了与系统时钟相关的时滞现象。 由于各种数据路径优化,在
CY8C29/27/24/22/21xxx PSoC 器件系列中,这些时滞更具危害性,特别是应用于系统总线的部分。
此参数可用于控制时钟时滞,确保读取和写入 PSoC 模块寄存器的值时进行正确操作。 此参数的正确
值应根据下表决定:
时钟同步
(ClockSync) 数值
与 SysClk 同步
(Sync to SysClk)
使用情况
此设置值适用于任何由 24 MHz (SysClk) 经过二分频或更多分频所洐生出来的时钟源。 示例
包括 VC1、VC2、VC3 (当 VC3 由 SysClk 驱动时)、32KHz 和采用 SysClk 时钟源的数字
PSoC 模块。 外部生成的时钟源也应使用此值来确保执行正确的同步操作。
与 SysClk*2 同步
除非生成的频率为 48 MHz (换句话说,在所有分频器的乘积为 1 时),此设置值可以适用于
(Sync to SysClk*2) 任何基于 48 MHz (SysClk*2) 的时钟。
直接使用 SysClk
(Use SysClk
Direct)
在需要 24 MHz (SysClk/1) 时钟时使用。 虽然此选项并不实际执行同步,但提供了对系统时
钟本身的低时滞访问方式。 如果选择此选项,上面的 “ 时钟 ”(Clock) 参数设置将被覆盖。
在所有分频器组合起来最终生成了 24 MHz 的输出时,一定要使用此项,而不要使用 VC1、
VC2、VC3 或数字模块。
不同步
(Unsynchronized)
在选定 48 MHz (SysClk*2) 输入时使用。
在需要不同步输入时使用。 一般来说,只有在中断生成是计数器的唯一应用时才推荐使用此
选项。 在睡眠期间依然保持活动状态的模块需要进行此设置。
反相使能 (InvertEnable)
此参数可确定使能输入信号的意义。 当选中 “ 正常 ”(Normal) 时,使能输入为高电平有效。 选择
“ 反相 ”(Invert) 则解释为低电平有效。 “ 反相使能 ”(InvertEnable) 仅适用于 PSoC 器件中的
CY8C29/27/24/22/21xxx 系列。
中断生成控制
当选中 PSoC Designer 中的 “ 启用中断生成控制 ” 复选框时,将有另外两个参数可供使用。 此选项可
通过以下路径找到: 项目 (Project) > 设置 (Settings) > 芯片编辑器 (Chip Editor). 当多个带中断的
进程被使用并且这些中断被多个用户模块跨进程共享时,中断的控制就非常重要:
中断 API (InterruptAPI)
“ 中断 API”(InterruptAPI) 参数允许按条件生成用户模块的中断处理程序和中断向量入口。 选择
“ 启用 ”(Enable) 可生成中断处理程序和中断向量入口。 选择 “ 禁用 ”(Disable) 可避免生成中
断处理程序和中断向量入口。 对于具有多个线程并且不同线程共享一个模块源的项目,强烈建议要
正确选择是否生成中断 API。 仅在必要时选择生成中断 API,可能就避免了生成中断调度码的需求,
从而降低开销。
中断调度模式 (IntDispatchMode)
“ 中断调度模式 ”(IntDispatchMode) 参数用于指定如何为位于同一模块但在不同线程中的多个用
户模块共享的中断来处理中断请求。 选择 “ 活动状态 ”(ActiveStatus) 会导致固件在为共享的中
断请求提供服务之前测试哪一个线程正处于活动状态。 每次请求共享中断时都会执行此检测。 这样
会增加延迟,还会产生一个处理共享中断请求的非决定性程序,但不需要任何 RAM。 选择 “ 计算前
Document Number: 001-66731 Rev. **
Page 6 of 14
[+] Feedback
8-Bit Counter
偏移 ”(OffsetPreCalc) 会导致固件仅当初始加载线程时计算共享中断请求的源。 这种计算可减少
中断延迟,并产生一个处理共享中断请求的决定性程序,但会占用 RAM 空间。
应用程序编程接口
应用程序编程接口 (API) 例程作为用户模块的一部分提供,从而使设计人员能够采用更高级的方式处理模
块。 本节指定每个函数的接口,以及 “include” 文件所提供的相关常量。
Note
在这里,如同所有用户模块 API 中的一样,A 和 X 寄存器的值可能通过调用 API 函数发生更
改。 如果在调用后需要 A 和 X 的值,则调用函数负责在调用前保留 A 和 X 的值。 选择这种 “
寄存器易失 ” 策略是为了提高效率,并且从 PsoC Designer 的 1.0 版本起已开始使用。 C 编译
器自动遵循此要求。 汇编语言编程人员也必须确保自己的代码遵守这一策略。 虽然有些用户模块
的 API 函数可能保留 A 和 X 不变,但并不保证在未来也将如此。
以下是为 Counter8: 提供的变量:
Counter8_PERIOD
说明:
表示器件编辑器中为 Counter8 的 “ 周期 ” 字段选择的值。 该值的范围介于 0 到 255 之间。
Counter8_COMPARE_VALUE
说明:
表示器件编辑器中为 Counter8 的 “ 脉冲宽度 ” 字段选择的值。 该值的范围介于 0 到 255 之间。
以下是为 Counter8: 提供的 API 编程例程:
Counter8_Start
说明:
启动 Counter8 用户模块。 若使能输入为高电平,则计数器会开始递减计数。
C 原型:
void Counter8_Start(void);
汇编:
lcall
Counter8_Start
参数:
无
返回值:
无
副作用:
A 和 X 寄存器均有可能在此函数的当前实现或后续实现中被修改。 对于大型存储器模型 (CY8C29xxx)
中的所有 RAM 页指针寄存器,也是如此。 在必要时,调用函数有责任在调用 fastcall16 函数之前
保存这些值。
Document Number: 001-66731 Rev. **
Page 7 of 14
[+] Feedback
8-Bit Counter
Counter8_Stop
说明:
停止计数器操作。
C 原型:
void Counter8_Stop(void);
汇编:
lcall
Counter8_Stop
参数:
无
返回值:
无
副作用:
输出将被置为低电平,且对周期寄存器的写入操作会使计数寄存器更新为新的周期值。 A 和 X 寄存
器均有可能在此函数的当前实现或后续实现中被修改。 对于大型存储器模型 (CY8C29xxx) 中的所有
RAM 页指针寄存器,也是如此。 在必要时,调用函数有责任在调用 fastcall16 函数之前保存这些
值。
Counter8_EnableInt
说明:
启用中断模式运行。
C 原型:
void Counter8_EnableInt(void);
汇编:
lcall Counter8_EnableInt
参数:
无
返回值:
无
副作用:
A 和 X 寄存器均有可能在此函数的当前实现或后续实现中被修改。 对于大型存储器模型 (CY8C29xxx)
中的所有 RAM 页指针寄存器,也是如此。 在必要时,调用函数有责任在调用 fastcall16 函数之前
保存这些值。
Counter8_DisableInt
说明:
禁用中断模式运行。
C 原型:
void Counter8_DisableInt(void);
Document Number: 001-66731 Rev. **
Page 8 of 14
[+] Feedback
8-Bit Counter
汇编:
lcall Counter8_DisableInt
参数:
无
返回值:
无
副作用:
A 和 X 寄存器均有可能在此函数的当前实现或后续实现中被修改。 对于大型存储器模型 (CY8C29xxx)
中的所有 RAM 页指针寄存器,也是如此。 在必要时,调用函数有责任在调用 fastcall16 函数之前
保存这些值。
Counter8_WritePeriod
说明:
将周期值写入周期寄存器。 如果 Counter8 停止或其计数达到 0,则周期值将立即从周期计数器寄存
器传输到计数器寄存器。
C 原型:
void Counter8_WritePeriod(BYTE bPeriod);
汇编:
mov
A, [bPeriod]
lcall Counter8_WritePeriod
参数:
计数器周期值的范围为 0 至 255。
返回值:
无
副作用:
A 和 X 寄存器均有可能在此函数的当前实现或后续实现中被修改。 对于大型存储器模型 (CY8C29xxx)
中的所有 RAM 页指针寄存器,也是如此。 在必要时,调用函数有责任在调用 fastcall16 函数之前
保存这些值。
Counter8_WriteCompareValue
说明:
将比较值写入比较寄存器。
C 原型:
void Counter8_WriteCompareValue(BYTE bCompareValue);
汇编:
mov
A, [bCompareValue]
lcall Counter8_WriteCompareValue
参数:
比较值范围从 0 到周期值。
Document Number: 001-66731 Rev. **
Page 9 of 14
[+] Feedback
8-Bit Counter
返回值:
无
副作用:
当计数器为活动状态时,写入比较值 (CompareValue) 寄存器将改变输出的占空比。 这可能会使输出
发生短时脉冲或意外改变。 A 和 X 寄存器均有可能在此函数的当前实现或后续实现中被修改。 对于
大型存储器模型 (CY8C29xxx) 中的所有 RAM 页指针寄存器,也是如此。 在必要时,调用函数有责任
在调用 fastcall16 函数之前保存这些值。
Counter8_bReadCompareValue
说明:
读取比较值 (CompareValue) 寄存器。
C 原型:
BYTE Counter8_bReadCompareValue(void);
汇编:
lcall Counter8_bReadCompareValue
mov
[bCompareValue], A
; store the value in RAM (if desired)
参数:
无
返回值:
比较值存储在比较值 (CompareValue) 寄存器内,并在累加器中返回。
副作用:
A 和 X 寄存器均有可能在此函数的当前实现或后续实现中被修改。 对于大型存储器模型 (CY8C29xxx)
中的所有 RAM 页指针寄存器,也是如此。 在必要时,调用函数有责任在调用 fastcall16 函数之前
保存这些值。
过期别名:
bCounter8_ReadCompareValue– 此名称可能在以后的 PSoC Designer 版本中被取消。
Counter8_bReadCounter
说明:
读取计数寄存器的值 (硬件 DR0 寄存器),并保留比较寄存器的值。 无论在计数器运行还是停止
时,均可调用此函数读取计数寄存器。 即使比较寄存器和计数寄存器的值暂时相等,也可以防止意
外中断。 但是,会有一些严重的副作用 (如下所示)。
C 原型:
BYTE Counter8_bReadCounter(void);
汇编:
lcall Counter8_bReadCounter
mov
[bCounter], A
参数:
无
Document Number: 001-66731 Rev. **
Page 10 of 14
[+] Feedback
8-Bit Counter
返回:
在累加器中返回的计数器寄存器值。
副作用:
如果已启用计数器用户模块,并在调用此函数时计数,由于必须暂时停止用户模块,有些时钟可能会
被忽略 (相应的计数寄存器减少量也会被忽略)。 A 和 X 寄存器均有可能在此函数的当前实现或后
续实现中被修改。 对于大型存储器模型 (CY8C29xxx) 中的所有 RAM 页指针寄存器,也是如此。 在必
要时,调用函数有责任在调用 fastcall16 函数之前保存这些值。
过期别名:
bCounter8_ReadCounter– 此名称可能在以后的 PSoC Designer 版本中被取消。
固件源代码示例
在以下示例中,C 语言和汇编语言代码之间的对应关系简单而直接。 显示的周期值和比较值都与基本值相
差一,因为寄存器是从零开始的,即零是递减计数循环的终端计数。 在 A 寄存器中而非堆栈中传递单一
字节参数,这是汇编程序和 C 语言编译器针对用户模块 API 使用的性能优化方式。 当 C 语言编译器在
Counter8.h 文件中发现 #pragma 快速调用声明时,它将对 “INT” 类型运用此机制,而不是将参数推入
堆栈。
以下源代码说明了 API 在汇编语言中是如何使用的:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Description:
;
This sample shows how to create a clock divider. This specific
;
example divides the clock by 8.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include "m8c.inc"
include "PSoCAPI.inc"
; include the device interface
; include the API interface file
export _main
_main:
mov
A, 07h
call Counter8_WritePeriod
mov
A, 03h
call Counter8_WriteCompareValue
call Counter8_EnableInt
M8C_EnableGInt
call Counter8_Start
; set the period to 8
; generate a 50% duty cycle
; enable the Counter Interrupt
; enable global interrupts
; start to count when the enable
;
input is asserted
.terminate:
jmp .terminate
Document Number: 001-66731 Rev. **
Page 11 of 14
[+] Feedback
8-Bit Counter
同一代码用 C 语言表示为:
/************************************************************************
* Description:
*
This sample shows how to create a clock divider. This specific
*
example divides the clock by 8.
************************************************************************/
#include <m8c.h>
// part specific constants and macros
#include "PSoCAPI.h"
// PSoC API definitions for all User Modules
void main(void)
{
Counter8_WritePeriod(0x07);
/* set period to eight clocks
Counter8_WriteCompareValue(0x03);
/* generate a 50% duty cycle
Counter8_EnableInt();
/* ensure interrupt is enabled
M8C_EnableGInt;
/* enable global interrupts
Counter8_Start();
/* start the counter!
}
*/
*/
*/
*/
*/
在上述两个示例中,唯一要求的 include 文件是提供了必要声明 (编译指令和原型)的 Counter8.h 文
件。 当应用需要直接访问寄存器时,汇编语言和 C 语言的 include 文件均可提供符号名。 在
CY8C29/27/24/22/21xxx 用户模块中,include 文件还可以提供宏定义,以支持某些较短的 API 函数源代
码的嵌入式扩展。 文件 PSoCAPI.inc 和 PSoCAPI.h 可分别代替 Counter8.inc 和 Counter8.h 使用。 这
些文件针对 PSoC Designer 项目中实例化和放置的每个用户模块,分别设置了 include 语句。
配置寄存器
8-bit 计数器使用名为 CNTR8 的单个数字 PSoC 模块。 通过 7 个寄存器对每个模块进行个性化和参数化
设置。 以下表格给出了作为常量和参数的 “ 特性 ” 值,命名为带有简要描述的位字段。 这些寄存器的符
号名在用户模块实例的 C 语言和汇编语言接口文件 (“.h” 和 “.inc” 文件)中均有定义。
Table 5.
函数寄存器,组 1,CY8C26/25xxx
模块 / 位
CNTR8
Table 6.
模块 / 位
CNTR8
7
0
6
0
5
1
4
比较类型
3
中断类型
2
0
1
0
0
1
函数寄存器,组 1,CY8C29/27/24/22/21xxx
7
数据反相
6
BCEN
5
1
4
比较类型
3
中断类型
2
0
1
0
0
1
BCEN 会将比较输出传送至行广播总线。 此位域在器件编辑器中通过直接配置广播线进行设置。 “ 数据反
相 ”(Data Invert) 标志用于控制使能输入信号的意义,此参数通过显示在器件编辑器中的用户模块参数
进行设置。 “ 比较类型 ”(CompareType) 标志表示将比较函数设置为 “ 小于或等于 ”(Less Than or
Equal) 还是 “ 小于 ”(Less Than)。 “ 中断类型 ”(InterruptType) 标志决定在比较事件中还是在终端
计数中触发中断。 “ 比较类型 ”(CompareType) 与 “ 中断类型 ”(InterruptType) 均在器件编辑器中直
接通过用户模块参数进行设置,这些参数在之前相关主题部分中有所介绍。
Table 7.
模块 / 位
CNTR8
输入寄存器,组 1
7
6
使能 (Enable)
5
4
3
2
1
0
时钟 (Clock)
“ 使能 ”(Enable) 从 16 个源之一选择数据输入。 “ 时钟 ”(Clock) 从 15 个源之一选择输入时钟。
这两个位域的值均取决于对器件编辑器中同名的用户模块参数的设置。
Document Number: 001-66731 Rev. **
Page 12 of 14
[+] Feedback
8-Bit Counter
Table 8.
输出寄存器,组 1,CY8C26/25xxx
模块 / 位
CNTR8
Table 9.
7
0
0
5
0
4
0
3
0
2
OutEnable
1
0
OutputSelect
输出寄存器,组 1,CY8C29/27/24/22/21xxx
模块 / 位
CNTR8
6
7
6
AuxClk
5
AuxEnable
4
3
AuxSelect
2
OutEnable
1
0
OutputSelect
器件编辑器中的用户模块 “ClockSync” 参数决定 AuxClk 位的值。 尽管命名相似,AuxEnable 和
AuxSelect 位却与 OutEnable 和 OutSelect 位域相关。 AuxEnable 和 AuxSelect 允许将结束计数输出信
号输出到其中一个行输出总线,这两个参数通过在 “ 器件编辑器互连视图 ” 中以图形方式操纵行总线来
控制。 当比较输出被输出到某个行或全局输出总线时,将设置 “ 使能 ”。 OutputSelect 控制哪条总线
将从比较输出中输出。
Table 10. 计数寄存器 (DR0),组 0
模块 / 位
CNTR8
7
6
5
4
3
2
1
0
计数
计数寄存器是 8-bit 递减计数值,在每个使能输入为活动状态的时钟周期中递减 1。 在结束计数 (零值)
之后的时钟周期中,将从周期寄存器的内容加载其值。 可使用 Counter8 API 读取此值。
Table 11. 周期寄存器 (DR1),组 0
位
CNTR8
7
6
5
4
3
2
1
0
周期 (Period)
周期寄存器为只写寄存器,可通过器件编辑器和 Counter8 API 进行设置。 在写入时,如果通过 API 禁用
了用户模块,则值将被传输到计数寄存器中。 在结束计数之后的时钟周期中,其值将自动复制到计数寄存
器中。
Table 12. 比较寄存器 (DR2),组 0
模块 / 位
CNTR8
7
6
5
4
3
2
1
0
比较值
比较寄存器将保留此值,计数寄存器将测试此值以生成比较输出。 可通过器件编辑器和 Counter8 API 对
其进行设置。
Table 13. 控制寄存器 (CR0),组 0
模块 / 位
CNTR8
7
0
6
0
5
0
4
0
3
0
2
0
1
0
0
启动 / 停止
“ 启动 / 停止 ”(Start/Stop) 设置时表示 Counter8 为启用状态,清除时为禁用状态。 此参数使用
Counter8 API 进行修改。
Document Number: 001-66731 Rev. **
Page 13 of 14
[+] Feedback
8-Bit Counter
版本历史记录
版本
创作者
说明
2.5
TDU
更新了时钟说明,内容包括: 当模块使用外部数字时钟时,应将行输入同步关闭,以获得
最佳精度以及进行睡眠操作。
2.60
DHA
添加了对 CY8C21x12 器件的支持。
Note
PSoC Designer 5.1 在所有的用户模块数据手册中提供了版本历史记录。 本数据手册详细介绍了
当前和先前用户模块版本之间的区别。
Document Number: 001-66731 Rev. **
Revised January 20, 2011
Page 14 of 14
Copyright © 2002-2011 Cypress Semiconductor Corporation. The information contained herein is subject to change without notice. Cypress Semiconductor Corporation assumes no responsibility
for the use of any circuitry other than circuitry embodied in a Cypress product. Nor does it convey or imply any license under patent or other rights. Cypress products are not warranted nor intended
to be used for medical, life support, life saving, critical control or safety applications, unless pursuant to an express written agreement with Cypress. Furthermore, Cypress does not authorize its
products for use as critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress products
in life-support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges.
PSoC Designer™ and Programmable System-on-Chip™ are trademarks and PSoC® is a registered trademark of Cypress Semiconductor Corp. All other trademarks or registered trademarks
referenced herein are property of the respective corporations.
Any Source Code (software and/or firmware) is owned by Cypress Semiconductor Corporation (Cypress) and is protected by and subject to worldwide patent protection (United States and foreign),
United States copyright laws and international treaty provisions. Cypress hereby grants to licensee a personal, non-exclusive, non-transferable license to copy, use, modify, create derivative works
of, and compile the Cypress Source Code and derivative works for the sole purpose of creating custom software and or firmware in support of licensee product to be used only in conjunction with
a Cypress integrated circuit as specified in the applicable agreement. Any reproduction, modification, translation, compilation, or representation of this Source Code except as specified above is
prohibited without the express written permission of Cypress.
Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the right to make changes without further notice to the materials described herein. Cypress does not
assume any liability arising out of the application or use of any product or circuit described herein. Cypress does not authorize its products for use as critical components in life-support systems
where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress' product in a life-support systems application implies that the manufacturer
assumes all risk of such use and in doing so indemnifies Cypress against all charges.
Use may be limited by and subject to the applicable Cypress software license agreement.
[+] Feedback