PSoC® 4 Architecture TRM (Chinese).pdf

PSoC 4100/4200 系列
PSoC® 4 架构技术参考手册
文档编号 No. 001-86886 版本*A
2016 年 05 月 12 日
Cypress Semiconductor赛普拉斯半导体
198 Champion Court
San Jose,CA 95134-1709
电话(美国):800.858.1810
电话(国际):408.943.2600
http://www.cypress.com
许可
© 赛 普 拉 斯 半 导 体 公 司 , 2013-2016, 保 留 所 有 的 权 利 。 此 软 件 , 以 及 相 关 的 文 件 或 材 料 属 于 赛 普 拉 斯 半 导 体 公 司
(Cypress),并可能受到保护,如全球专利保护(美国和外国的),美国版权法和国际条约的规定。除非另有在你和
Cypress 公司之间的单独的许可协议,规定达成一致,你同意将像任何其他受版权保护的材料看待这份材料。
你同意把资料保密,未经书面授权,不会透露或使用 Cypress 的材料。您同意遵守与你和 Cypress 公司之间的任何保密协议。
如果材料涉及到受第三方许可证的项目,您同意遵守该许可。
版权
版权所有©2013 赛普拉斯半导体公司。保留所有权利。
PSoC 和 CapSense 是注册商标,PSoC Designer 和 PSoC Creator 是赛普拉斯半导体公司的商标。所有其他商标或注册标本
文提及的是其各自所有者的财产。
从赛普拉斯公司或它联营公司之一购买 I2C 组件传达了一个经授权许可,即飞利浦提供的 I2C 的专利权利,以将这些组件使用
在一个 I2C 系统中,该系统符合由飞利浦定义的 I2C 的标准的产品规格。于 2006 年 10 月 1 起,飞利浦半导体有一个新的名字
-恩智浦半导体(NXP Semiconductors)。
本文档中的信息如有更改,恕不另行通知,不应该被解释为一个承诺书。尽管已采取合理的预防措施,赛普拉斯对本文档中任
何可能出现的错误不承担任何责任。未经赛普拉斯书面同意,不得将本文档的任何部分以任何形式或以任何方式复制或转载。
美国制造。
声明
此处所包含的信息可能会随时更改,恕不另行通知。赛普拉斯半导体公司不对任何其他电路的使用承担任何责任,也不根据专
利或其他权利以明示或暗示的方式授予任何许可。除非与赛普拉斯签订明确的书面协议,否则赛普拉斯产品不保证能够用于或
适用于医疗、生命支持、救生、关键控制或安全应用领域。此外,对于可能发生运转异常和故障并对用户造成严重伤害的生命
支持系统,赛普拉斯不授权将其产品用作此类系统的关键组件。若将赛普拉斯产品用于生命支持系统中,则表示制造商将承担
因此类使用而招致的所有风险,并确保赛普拉斯免于因此而受到任何指控。
闪存代码保护
赛普拉斯的产品符合规格包含在其特定的赛普拉斯数据表。赛普拉斯认为,不管他们是如何使用的,PSoC 产品是目前市场上
的同类最安全的产品之一。但是,还是有可能的方法,可以破坏代码保护功能。据我们所知,这些方法中的任何一种,将是不
诚实的,或者是非法的。无论是赛普拉斯,任何其他半导体厂商都不能可以保证其代码的安全性。代码保护并不意味着我们保
证产品是“牢不可破”。
赛普拉斯是愿意与客户一起,关心代码的完整性。代码保护功能是处于不断不断变化的。赛普拉斯致力于不断改进我们的产品
的代码保护功能。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
目录概述
A 部分:概述 ................................................................................................................................................................ 15
1
2
3
介绍 ........................................................................................................................................................................16
入门 ........................................................................................................................................................................21
文档结构 ................................................................................................................................................................22
B 部分:中央处理器(CPU)子系统 ........................................................................................................................... 25
4
5
CORTEX™-M0 处理器 ...............................................................................................................................................26
中断 ........................................................................................................................................................................31
C 部分:存储器系统 ..................................................................................................................................................... 41
6
存储器 ....................................................................................................................................................................42
D 部分:系统资源 ........................................................................................................................................................ 44
7
8
9
10
11
12
13
14
输入/输出系统 .......................................................................................................................................................45
时钟系统 ................................................................................................................................................................54
电源和电源监测 ....................................................................................................................................................60
运行模式 ................................................................................................................................................................66
电源模式 ................................................................................................................................................................67
看门狗定时器 ........................................................................................................................................................73
复位 ........................................................................................................................................................................76
器件安全 ................................................................................................................................................................79
E 部分:数字系统 ......................................................................................................................................................... 80
15
16
17
串行通信模块 (SCB) ...............................................................................................................................................81
通用数字模块 ..................................................................................................................................................... 117
(TIMER/COUNTER/PWM) 模块 ............................................................................................................................. 154
F 部分:模拟系统 ........................................................................................................................................................174
18
19
20
21
22
23
24
精确基准源 ......................................................................................................................................................... 175
SAR ADC 模块 ...................................................................................................................................................... 178
低功耗比较器 ..................................................................................................................................................... 208
CTBM .................................................................................................................................................................... 212
LCD 段直接驱动 .................................................................................................................................................. 217
CAPSENSE ............................................................................................................................................................... 226
温度传感器 ......................................................................................................................................................... 233
G 部分:编程和调试 ...................................................................................................................................................237
25
26
编程和调试接口 ................................................................................................................................................. 238
非易失性存储器编程 ......................................................................................................................................... 244
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
3
目录
A 部分:概述 ................................................................................................................................................................ 15
介绍 .................................................................................................................................................................... 16
1
1.1
总体架构 ................................................................................................................................................................17
1.2
特性 ........................................................................................................................................................................19
1.3
CPU 系统 ................................................................................................................................................................19
1.3.1
中央处理器 ...................................................................................................................................................19
1.3.2
中断控制器 ...................................................................................................................................................19
1.4
内存 ........................................................................................................................................................................19
1.4.1
Flash ..............................................................................................................................................................19
1.4.2
SRAM .............................................................................................................................................................19
1.5
系统资源 ................................................................................................................................................................19
1.5.1
时钟系统 .......................................................................................................................................................19
1.5.2
电源系统 .......................................................................................................................................................19
1.5.3
GPIO ..............................................................................................................................................................19
1.6
可编程数字资源 ....................................................................................................................................................20
1.7
固定功能数字资源 ................................................................................................................................................20
1.7.1
Timer/Counter/PWM 模块 ...........................................................................................................................20
1.7.2
串行通信模块(SCB) .................................................................................................................................20
1.8
模拟系统 ................................................................................................................................................................20
1.8.1
SAR ADC.........................................................................................................................................................20
1.8.2
CTBm 模块 ....................................................................................................................................................20
1.8.3
低功耗比较器 ...............................................................................................................................................20
1.9
特殊功能外设 ........................................................................................................................................................20
1.9.1
LCD 驱动........................................................................................................................................................20
1.9.2
CapSense .......................................................................................................................................................20
1.10 编程和调试 ............................................................................................................................................................20
入门 .................................................................................................................................................................... 21
2
2.1
2.2
2.3
3
支持 ........................................................................................................................................................................21
产品升级 ................................................................................................................................................................21
开发套件 ................................................................................................................................................................21
文档结构 ............................................................................................................................................................. 22
3.1
主要内容 ................................................................................................................................................................22
3.2
文档约定 ................................................................................................................................................................22
3.2.1
寄存器约定 ...................................................................................................................................................22
3.2.2
数字命名 .......................................................................................................................................................22
3.2.3
单位 ...............................................................................................................................................................23
3.2.4
缩略语 ...........................................................................................................................................................23
4
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
目录
B 部分:中央处理器(CPU)子系统 ........................................................................................................................... 25
4
CORTEX™-M0 处理器.............................................................................................................................................. 26
4.1
特性 ........................................................................................................................................................................26
4.2
处理器子系统框图 ................................................................................................................................................27
4.3
CORTEX-M0 处理器的使用 ......................................................................................................................................27
4.3.1
Cortex-M0 处理器内核寄存器 .....................................................................................................................27
4.3.2
操作模式 .......................................................................................................................................................29
4.3.3
指令集 ...........................................................................................................................................................29
4.3.3.1
4.3.3.2
4.3.4
4.3.5
地址对齐..................................................................................................................................................................... 30
存储器格式................................................................................................................................................................. 30
系统节拍定时器 ...........................................................................................................................................30
调试 ...............................................................................................................................................................30
中断 .................................................................................................................................................................... 31
5
5.1
特性 ........................................................................................................................................................................31
5.2
中断的实现 ............................................................................................................................................................31
5.3
中断和异常的工作原理 ........................................................................................................................................32
5.3.1
PSoC 4 中的中断/异常处理 .........................................................................................................................32
5.3.2
电平中断和脉冲中断 ...................................................................................................................................32
5.3.3
异常向量表 ...................................................................................................................................................32
5.4
异常源 ....................................................................................................................................................................33
5.4.1
复位异常 .......................................................................................................................................................33
5.4.2
不可屏蔽中断(NMI) ................................................................................................................................34
5.4.3
HardFault 异常 ..............................................................................................................................................34
5.4.4
管理程序调用(SVCall)异常 .....................................................................................................................34
5.4.5
PendSV 异常 .................................................................................................................................................34
5.4.6
SysTick 异常 ..................................................................................................................................................34
5.5
中断源 ....................................................................................................................................................................35
5.6
使能/禁止异常 .......................................................................................................................................................36
5.7
异常状态 ................................................................................................................................................................37
5.7.1
挂起异常 .......................................................................................................................................................37
5.7.2
异常优先级 ...................................................................................................................................................37
5.8
堆栈使用 ................................................................................................................................................................38
5.9
中断和低功耗模式 ................................................................................................................................................38
5.10 异常 - 初始化和配置 .............................................................................................................................................39
5.11 中断和异常寄存器 ................................................................................................................................................39
5.12 中断和异常相关文档 ............................................................................................................................................40
C 部分:存储器系统 ..................................................................................................................................................... 41
存储器................................................................................................................................................................. 42
6
6.1
6.2
特性 ........................................................................................................................................................................42
工作原理 ................................................................................................................................................................42
D 部分:系统资源 ........................................................................................................................................................ 44
输入/输出系统.................................................................................................................................................... 45
7
7.1
特性 ........................................................................................................................................................................45
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
5
目录
7.2
GPIO 模块框图 .......................................................................................................................................................46
7.3
I/O 驱动模式 ..........................................................................................................................................................47
7.3.1
高阻模拟模式 ...............................................................................................................................................48
7.3.2
高阻数字模式 ...............................................................................................................................................48
7.3.3
电阻上拉或电阻下拉模式 ...........................................................................................................................48
7.3.4
漏极开路驱动高和漏极开路驱动低 ...........................................................................................................48
7.3.5
增强驱动模式 ...............................................................................................................................................48
7.3.6
电阻上拉和下拉模式 ...................................................................................................................................48
7.4
摆率控制 ................................................................................................................................................................49
7.5
CMOS 和 LVTTL 电平控制 ......................................................................................................................................49
7.6
高速输入输出矩阵 ................................................................................................................................................49
7.7
模拟管脚 ................................................................................................................................................................50
7.8
段式 LCD 驱动 ........................................................................................................................................................50
7.9
CAPSENSE ..................................................................................................................................................................50
7.10 重新配置 GPIO .......................................................................................................................................................51
7.11 上电启动时 GPIO 状态 ..........................................................................................................................................51
7.12 睡眠模式下的 GPIO 状态 ......................................................................................................................................51
7.13 低功耗模式下的 GPIO 状态 ..................................................................................................................................51
7.14 端口中断控制器模块 ............................................................................................................................................51
7.14.1
特性 ...............................................................................................................................................................51
7.14.2
端口中断控制器框图 ...................................................................................................................................51
7.14.3
功能和配置 ...................................................................................................................................................52
7.15 数字输入和输出同步 ............................................................................................................................................52
7.16 活动和深度睡眠模式下专用管脚.........................................................................................................................52
7.17 端口 4 的使用限制 ................................................................................................................................................53
7.18 寄存器列表 ............................................................................................................................................................53
8
时钟系统 ............................................................................................................................................................. 54
8.1
模块框图 ................................................................................................................................................................54
8.2
时钟源 ....................................................................................................................................................................55
8.2.1
内部主振荡器(IMO) ................................................................................................................................55
8.2.2
内部低速振荡器(ILO)..............................................................................................................................55
8.2.3
外部时钟(EXTCLK) ...................................................................................................................................55
8.3
时钟分布 ................................................................................................................................................................55
8.3.1
HFCLK 输入时钟源的选择 ............................................................................................................................56
8.3.2
SYSCLK 分频器的配置 ..................................................................................................................................57
8.3.3
外设时钟分频器的设置 ...............................................................................................................................57
8.3.4
外设时钟分配 ...............................................................................................................................................58
8.4
低功耗电源模式下的操作 ....................................................................................................................................59
9
电源和电源监测 ................................................................................................................................................. 60
9.1
系统框图 ................................................................................................................................................................60
9.2
电源连接方式 ........................................................................................................................................................61
9.2.1
外部电压较高时(1.8V-5.5V) ...................................................................................................................61
9.2.2
外部电压较低时(1.71V-1.89V) ...............................................................................................................62
9.3
使用 ........................................................................................................................................................................64
9.3.1
内部调压器 ...................................................................................................................................................64
9.3.1.1
9.3.1.2
9.3.1.3
6
活动状态调压器 ......................................................................................................................................................... 64
低噪声调压器 ............................................................................................................................................................. 64
深度睡眠寄存器 ......................................................................................................................................................... 64
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
目录
9.3.1.4
9.3.2.1
9.3.2.2
9.3.2.3
9.4
10
10.1
10.2
10.3
10.4
11
11.1
11.2
11.3
11.4
11.5
11.6
11.7
12
休眠寄存器................................................................................................................................................................. 64
电压检测 .......................................................................................................................................................64
9.3.2
上电重启(POR) ...................................................................................................................................................... 64
欠压检测(BOD) ..................................................................................................................................................... 64
低压检测..................................................................................................................................................................... 64
寄存器列表 ............................................................................................................................................................65
运行模式 ............................................................................................................................................................. 66
引导模式 ................................................................................................................................................................66
用户模式 ................................................................................................................................................................66
特权模式 ................................................................................................................................................................66
调试模式 ................................................................................................................................................................66
电源模式 ............................................................................................................................................................. 67
活动模式 ................................................................................................................................................................69
睡眠模式 ................................................................................................................................................................69
深度睡眠模式 ........................................................................................................................................................69
休眠模式 ................................................................................................................................................................70
停止模式 ................................................................................................................................................................70
低功耗模式的使用 ................................................................................................................................................71
寄存器列表 ............................................................................................................................................................72
看门狗定时器 ..................................................................................................................................................... 73
12.1 特性 ........................................................................................................................................................................73
12.2 模块框图 ................................................................................................................................................................73
12.3 工作原理 ................................................................................................................................................................74
12.3.1
WDT 的使能和禁止 ......................................................................................................................................74
12.3.2
WDT 的操作模式 ..........................................................................................................................................74
12.3.3
WDT 的中断和低功耗模式 ..........................................................................................................................74
12.3.4
WDT 的复位 ..................................................................................................................................................74
12.4 寄存器列表 ............................................................................................................................................................75
13
复位 .................................................................................................................................................................... 76
13.1 复位源 ....................................................................................................................................................................76
13.1.1
上电复位 .......................................................................................................................................................76
13.1.2
掉电检测复位 ...............................................................................................................................................76
13.1.3
看门狗复位 ...................................................................................................................................................77
13.1.4
软件复位 .......................................................................................................................................................77
13.1.5
外部复位 .......................................................................................................................................................77
13.1.6
特权保护复位: ...........................................................................................................................................77
13.1.7
休眠模式唤醒复位 .......................................................................................................................................77
13.1.8
停止模式唤醒复位 .......................................................................................................................................77
13.2 复位源识别 ............................................................................................................................................................77
14
14.1
14.2
器件安全 ............................................................................................................................................................. 79
特性 ........................................................................................................................................................................79
工作原理 ................................................................................................................................................................79
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
7
目录
E 部分:数字系统 ......................................................................................................................................................... 80
15
串行通信模块 (SCB) ............................................................................................................................................ 81
15.1 特性 ........................................................................................................................................................................81
15.2 串行外设接口(SPI)协议....................................................................................................................................81
15.2.1
特性 ...............................................................................................................................................................81
15.2.2
概述 ...............................................................................................................................................................82
15.2.3
SPI 协议介绍 .................................................................................................................................................82
15.2.3.1
15.2.3.2
15.2.4
15.2.5
15.2.5.1
15.2.5.2
15.2.5.3
15.2.5.4
15.2.6
15.2.7
15.2.8
15.2.9
15.2.9.1
15.2.9.2
摩托罗拉 SPI 协议 ..................................................................................................................................................... 82
德州仪器 SPI 协议 ..................................................................................................................................................... 84
国家半导体 SPI 协议 ....................................................................................................................................86
EZSPI (Easy SPI) - SPI 的 EZ 模式 ................................................................................................................87
写地址 ........................................................................................................................................................................ 88
写数据 ........................................................................................................................................................................ 88
读数据 ........................................................................................................................................................................ 88
配置............................................................................................................................................................................ 90
SPI 相关寄存器 .............................................................................................................................................90
SPI 的中断 .....................................................................................................................................................90
SPI 的初始化 .................................................................................................................................................91
SPI 的时钟模式 .............................................................................................................................................91
非 EZSPI 的时钟模式 ................................................................................................................................................. 92
EZSPI 的时钟模式 ....................................................................................................................................................... 93
15.3 通用异步收发(UART)协议................................................................................................................................94
15.3.1
特性 ...............................................................................................................................................................94
15.3.2
概述 ...............................................................................................................................................................94
15.3.3
UART 协议介绍 .............................................................................................................................................95
15.3.3.1
15.3.3.2
15.3.3.3
标准 UART 协议 ......................................................................................................................................................... 95
SmartCard (ISO7816) 协议 .......................................................................................................................................... 98
IrDA 协议 .................................................................................................................................................................... 99
15.3.4
UART 相关寄存器 ...................................................................................................................................... 100
15.3.5
UART 的中断 .............................................................................................................................................. 100
15.3.6
UART 的初始化 .......................................................................................................................................... 100
15.4 I2C 协议 ............................................................................................................................................................... 102
15.4.1
特性 ............................................................................................................................................................ 102
15.4.2
概述 ............................................................................................................................................................ 102
15.4.2.1
15.4.2.2
15.4.3
15.4.3.1
15.4.3.2
15.4.4
15.4.5
15.4.6
15.4.7
15.4.8
15.4.8.1
15.4.8.2
15.4.9
15.4.10
15.4.10.1
15.4.10.2
8
时钟延展 .................................................................................................................................................................. 103
总线冲突检测与仲裁 .............................................................................................................................................. 103
I2C 协议介绍.............................................................................................................................................. 103
写数据 ...................................................................................................................................................................... 103
读数据 ...................................................................................................................................................................... 104
EZI2C (Easy I2C) - I2C 的 EZ 模式............................................................................................................. 104
I2C 相关寄存器.......................................................................................................................................... 105
I2C 的中断.................................................................................................................................................. 106
I2C 的初始化.............................................................................................................................................. 106
I2C 的时钟模式.......................................................................................................................................... 106
非 EZI2C 的时钟模式 ............................................................................................................................................... 106
EZI2C 的时钟模式 ..................................................................................................................................................... 107
唤醒操作 .................................................................................................................................................... 108
主设备模式数据传输示例 ........................................................................................................................ 109
主设备发送数据.................................................................................................................................................... 109
主设备接收数据.................................................................................................................................................... 110
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
目录
15.4.11
15.4.11.1
15.4.11.2
15.4.12
15.4.12.1
15.4.12.2
15.4.13
15.4.13.1
15.4.13.2
16
从设备模式数据传输示例 ........................................................................................................................ 111
从设备发送数据.................................................................................................................................................... 111
从设备接收数据.................................................................................................................................................... 112
EZ 模式的数据传输示例 ........................................................................................................................... 113
EZ 从设备发送数据 ................................................................................................................................................ 113
EZ 从设备接收数据 ................................................................................................................................................ 114
多主设备总线上的数据传输示例 ............................................................................................................ 115
仅作为主设备 ....................................................................................................................................................... 115
主从设备 ............................................................................................................................................................... 116
通用数字模块 ....................................................................................................................................................117
16.1 特征 ..................................................................................................................................................................... 117
16.2 工作原理 ............................................................................................................................................................. 118
16.2.1
PLD ............................................................................................................................................................. 118
16.2.1.1
16.2.1.2
16.2.1.3
16.2.2
16.2.2.1
16.2.2.2
16.2.2.3
16.2.2.4
16.2.2.5
16.2.2.6
16.2.2.7
16.2.2.8
16.2.2.9
16.2.2.10
16.2.3
16.2.3.1
16.2.3.2
16.2.3.3
16.2.3.4
16.2.3.5
16.2.3.6
16.2.3.7
16.2.3.8
16.2.4
16.2.4.1
16.2.4.2
16.2.4.3
16.2.5
16.2.6
16.2.6.1
16.2.6.2
PLD 的宏单元 ........................................................................................................................................................... 118
PLD 的进位级联 ....................................................................................................................................................... 119
PLD 的配置 ............................................................................................................................................................... 119
数据通道处理器(DP:DataPath)......................................................................................................... 119
概览.......................................................................................................................................................................... 120
数据通道处理器中的 FIFO ...................................................................................................................................... 122
FIFO 的状态信号 ...................................................................................................................................................... 127
DP 中的 ALU.............................................................................................................................................................. 127
DP 的输入多路器(MUX) ..................................................................................................................................... 129
CRC/PRS .................................................................................................................................................................... 130
DP 的输出多路器 ..................................................................................................................................................... 132
DP 的并行输入和并行输出 ..................................................................................................................................... 133
DP 的级联 ................................................................................................................................................................. 134
动态配置寄存器.................................................................................................................................................... 134
状态与控制模块 ........................................................................................................................................ 135
状态输入模式 .......................................................................................................................................................... 136
控制输出模式 .......................................................................................................................................................... 138
并行输入和并行输出模式 ...................................................................................................................................... 140
计数器模式 .............................................................................................................................................................. 140
同步模式 .................................................................................................................................................................. 141
状态与控制模块的时钟 .......................................................................................................................................... 141
辅助控制寄存器 ...................................................................................................................................................... 141
状态与控制寄存器的总结 ...................................................................................................................................... 142
复位与时钟模块 ........................................................................................................................................ 142
时钟的控制 .............................................................................................................................................................. 143
复位控制 .................................................................................................................................................................. 144
UDB 的上电复位初始化 ........................................................................................................................................... 148
UDB 中寄存器的寻址 ................................................................................................................................ 148
系统总线的访问 ........................................................................................................................................ 148
并发的系统总线访问 .............................................................................................................................................. 148
系统总线对累加器的访问 ...................................................................................................................................... 149
16.3 端口适配(PA:PORT ADAPTOR)模块 ................................................................................................................ 149
16.3.1
PA 模块的时钟多路器 .............................................................................................................................. 149
16.3.2
PA 的复位多路器....................................................................................................................................... 150
16.3.3
PA 的数据输入单元 .................................................................................................................................. 151
16.3.4
PA 的数据输出单元 .................................................................................................................................. 151
16.3.5
PA 的输出使能单元 .................................................................................................................................. 151
16.3.6
PA 的时钟输入多路器 .............................................................................................................................. 152
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
9
目录
(TIMER/COUNTER/PWM) 模块 ........................................................................................................................154
17
17.1 特性 ..................................................................................................................................................................... 154
17.2 模块概述 ............................................................................................................................................................. 155
17.2.1
TCPWM 模块中计数器的使能与禁止 ......................................................................................................... 155
17.2.2
时钟 ............................................................................................................................................................ 155
17.2.3
事件的触发 ................................................................................................................................................ 156
17.2.4
输出信号 .................................................................................................................................................... 157
17.2.4.1
17.2.4.2
17.2.4.3
内部事件信号 .......................................................................................................................................................... 157
中断.......................................................................................................................................................................... 157
输出信号 .................................................................................................................................................................. 157
17.2.5
电源模式 .................................................................................................................................................... 158
17.3 工作模式 ............................................................................................................................................................. 158
17.3.1
定时器模式 ................................................................................................................................................ 159
17.3.1.1
17.3.1.2
17.3.1.3
17.3.2
17.3.2.1
17.3.2.2
17.3.2.3
17.3.3
17.3.3.1
17.3.3.2
17.3.3.3
17.3.4
17.3.4.1
17.3.4.2
17.3.4.3
17.3.4.4
17.3.4.5
17.3.5
17.3.5.1
17.3.5.2
17.3.5.3
17.3.6
17.3.6.1
17.3.6.2
17.3.6.3
17.4
模块框图 .................................................................................................................................................................. 159
工作原理 .................................................................................................................................................................. 159
定时器模式的配置流程 .......................................................................................................................................... 161
捕获模式 .................................................................................................................................................... 161
模块框图 .................................................................................................................................................................. 161
工作原理 .................................................................................................................................................................. 161
捕获模式的配置流程 .............................................................................................................................................. 162
正交编码模式 ............................................................................................................................................ 163
模块框图 .................................................................................................................................................................. 163
工作原理 .................................................................................................................................................................. 163
正交模式配置步骤 .................................................................................................................................................. 165
脉冲宽度调制(PWM)模式 ................................................................................................................... 166
模块框图 .................................................................................................................................................................. 166
工作原理 .................................................................................................................................................................. 166
其他配置 .................................................................................................................................................................. 168
终止(Kill) .................................................................................................................................................................. 168
PWM 模式的计数器配置 ......................................................................................................................................... 169
带死区模式的 PWM .................................................................................................................................. 169
模块框图 .................................................................................................................................................................. 169
工作原理 .................................................................................................................................................................. 170
配置带死区模式的 PWM ........................................................................................................................................ 170
PWM-伪随机模式...................................................................................................................................... 171
模块框图 .................................................................................................................................................................. 171
工作原理 .................................................................................................................................................................. 171
配置伪随机 PWM 模式 ........................................................................................................................................... 172
TCPWM 寄存器 ................................................................................................................................................... 173
F 部分:模拟系统 ........................................................................................................................................................174
18
精确基准源 ........................................................................................................................................................175
18.1 模块框图 ............................................................................................................................................................. 175
18.2 工作原理 ............................................................................................................................................................. 176
18.2.1
精确带隙电路 (Bandgap) ..................................................................................................................... 176
18.2.2
矫正缓冲器 ................................................................................................................................................ 176
18.2.3
低功耗缓冲 ................................................................................................................................................ 176
18.2.4
电流单元 .................................................................................................................................................... 177
18.2.5
V-CTAT 模块 ............................................................................................................................................... 177
18.2.6
IMO 参考源电路 ........................................................................................................................................ 177
18.3 配置 ..................................................................................................................................................................... 177
10
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
目录
19
SAR ADC 模块 .....................................................................................................................................................178
19.1 特性 ..................................................................................................................................................................... 178
19.2 SAR ADC 模块框图 .............................................................................................................................................. 179
19.3 SAR ADC 模块的使用 .......................................................................................................................................... 180
19.3.1
SARADC 核 ................................................................................................................................................. 180
19.3.1.1
19.3.1.2
19.3.1.3
19.3.1.4
19.3.1.5
19.3.1.6
19.3.1.7
19.3.1.8
19.3.2
19.3.2.1
19.3.2.2
19.3.2.3
19.3.2.4
19.3.2.5
19.3.2.6
19.3.3
19.3.3.1
19.3.3.2
19.3.3.3
19.3.4
19.3.4.1
19.3.4.2
19.3.4.3
19.3.4.4
19.3.5
19.3.5.1
19.3.5.2
19.3.5.3
19.3.5.4
19.3.5.5
19.3.5.6
19.3.5.7
19.3.6
19.3.6.1
19.3.7
19.3.8
19.3.9
19.3.10
19.3.10.1
19.3.10.2
19.3.10.3
19.3.10.4
19.3.10.5
19.3.10.6
19.3.10.7
19.3.10.8
单端模式和差分模式 .............................................................................................................................................. 180
输入范围 .................................................................................................................................................................. 180
转换结果数据格式 .................................................................................................................................................. 180
负端输入选择 .......................................................................................................................................................... 181
分辨率 ...................................................................................................................................................................... 182
采样时间 .................................................................................................................................................................. 182
SAR ADC 时钟 ............................................................................................................................................................ 182
SAR ADC 工作时序 .................................................................................................................................................... 182
SARMUX ..................................................................................................................................................... 183
模拟路由 .................................................................................................................................................................. 183
模拟内部互连 .......................................................................................................................................................... 184
外部管脚输入 .......................................................................................................................................................... 184
来自 AMUXBU_A/AMUXBU_B 的输入 .................................................................................................................... 185
来自 CTBm 输出的输入........................................................................................................................................... 186
温度传感器输入 ...................................................................................................................................................... 187
SARREF ....................................................................................................................................................... 188
参考电压选项 .......................................................................................................................................................... 189
旁路电容 .................................................................................................................................................................. 189
输入电压范围和参考电压 ...................................................................................................................................... 189
SARSEQ ....................................................................................................................................................... 189
求平均 ...................................................................................................................................................................... 190
阈值检测 .................................................................................................................................................................. 191
双缓冲保存 .............................................................................................................................................................. 191
插入通道 .................................................................................................................................................................. 191
中断 ............................................................................................................................................................ 193
扫描结束中断(EOS_INTR) .................................................................................................................................. 193
溢出中断 .................................................................................................................................................................. 193
冲突中断 .................................................................................................................................................................. 193
插入通道转换结束中断(INJ_EOC_INTR) ........................................................................................................... 194
阈值检测中断 .......................................................................................................................................................... 194
饱和检测中断 .......................................................................................................................................................... 194
中断源识别 .............................................................................................................................................................. 194
触发 ............................................................................................................................................................ 194
DSI 触发配置 ............................................................................................................................................................ 195
SAR ADC 状态 ............................................................................................................................................. 195
低功耗模式 ................................................................................................................................................ 196
系统操作 .................................................................................................................................................... 196
寄存器模式 ................................................................................................................................................ 197
SARMUX 模拟路由配置 ......................................................................................................................................... 197
SARSEQ 全局配置 ................................................................................................................................................... 198
通道配置 ............................................................................................................................................................... 199
通道使能 ............................................................................................................................................................... 199
中断屏蔽 ............................................................................................................................................................... 199
触发 ....................................................................................................................................................................... 200
数据读取 ............................................................................................................................................................... 200
插入通道转换(可选) ........................................................................................................................................ 200
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
11
目录
19.3.11
19.3.11.1
19.3.11.2
19.3.11.3
19.3.11.4
19.3.11.5
19.3.11.6
19.3.11.7
DSI 模式...................................................................................................................................................... 200
SARMUX 模拟路由配置 ......................................................................................................................................... 202
SARSEQ 全局配置 ................................................................................................................................................... 202
通道配置 ............................................................................................................................................................... 202
中断 ....................................................................................................................................................................... 203
触发 ....................................................................................................................................................................... 203
数据读取 ............................................................................................................................................................... 203
DSI 输出使能 .......................................................................................................................................................... 203
19.3.12
模拟路由配置示例 .................................................................................................................................... 204
19.3.13
温度传感器配置 ........................................................................................................................................ 206
19.4 寄存器列表 ......................................................................................................................................................... 207
低功耗比较器 ....................................................................................................................................................208
20
20.1 特性 ..................................................................................................................................................................... 208
20.2 低功耗比较器框图 ............................................................................................................................................. 209
20.3 低功耗比较器的使用 ......................................................................................................................................... 209
20.3.1
输入配置 .................................................................................................................................................... 209
20.3.2
电源模式和速度配置 ................................................................................................................................ 209
20.3.3
输出和中断配置 ........................................................................................................................................ 210
20.3.4
迟滞 ............................................................................................................................................................ 210
20.3.5
休眠唤醒 .................................................................................................................................................... 210
20.3.6
比较器时钟 ................................................................................................................................................ 210
20.3.7
失调电压校正 ............................................................................................................................................ 210
20.4 寄存器列表 ......................................................................................................................................................... 211
21
CTBM ..................................................................................................................................................................212
21.1 特性 ..................................................................................................................................................................... 212
21.2 模块框图 ............................................................................................................................................................. 213
21.3 工作原理 ............................................................................................................................................................. 213
21.3.1
电源模式配置 ............................................................................................................................................ 213
21.3.2
驱动能力配置 ............................................................................................................................................ 214
21.3.3
开关配置 .................................................................................................................................................... 214
21.3.3.1
21.3.3.2
21.3.4
21.3.4.1
21.3.4.2
21.4
22
输入开关控制 .......................................................................................................................................................... 214
输出开关控制 .......................................................................................................................................................... 215
比较器工作模式 ........................................................................................................................................ 216
比较器的配置 .......................................................................................................................................................... 216
比较器的中断 .......................................................................................................................................................... 216
寄存器列表 ......................................................................................................................................................... 216
LCD 段直接驱动 .................................................................................................................................................217
22.1 特性 ..................................................................................................................................................................... 217
22.2 LCD 段驱动概述 .................................................................................................................................................. 217
22.2.1
驱动模式 .................................................................................................................................................... 218
22.2.1.1
22.2.1.2
PWM 驱动................................................................................................................................................................. 218
数字相关 .................................................................................................................................................................. 221
22.2.2
推荐的驱动模式 ........................................................................................................................................ 223
22.2.3
数字对比度控制 ........................................................................................................................................ 223
22.3 LCD 模块介绍 ...................................................................................................................................................... 224
22.3.1
工作原理 .................................................................................................................................................... 224
22.3.2
高速和低速驱动信号发生器 .................................................................................................................... 224
12
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
目录
22.3.3
多路复用器和 LCD 引脚逻辑 .................................................................................................................... 225
22.3.4
显示数据寄存器 ........................................................................................................................................ 225
22.4 寄存器表 ............................................................................................................................................................. 225
23
CAPSENSE ...........................................................................................................................................................226
23.1 特性 ..................................................................................................................................................................... 226
23.2 模块框图 ............................................................................................................................................................. 226
23.3 工作原理 ............................................................................................................................................................. 227
23.3.1
CSD 感应原理 ............................................................................................................................................ 227
23.3.1.1
23.3.1.2
23.3.1.3
23.3.1.4
23.3.2
23.3.3
24
24.1
24.2
24.3
24.4
GPIO 单元的电容-电流转换器................................................................................................................................. 228
开关时钟发生器 ...................................................................................................................................................... 230
电流-数字转换器 ..................................................................................................................................................... 230
模拟多路器 .............................................................................................................................................................. 231
屏蔽电极 .................................................................................................................................................... 231
CMOD 的预充电 ........................................................................................................................................... 231
温度传感器 ........................................................................................................................................................233
特性 ..................................................................................................................................................................... 233
工作原理 ............................................................................................................................................................. 233
温度传感器配置 ................................................................................................................................................. 234
算法 ..................................................................................................................................................................... 235
G 部分:编程和调试 ...................................................................................................................................................237
25
编程和调试接口 ................................................................................................................................................238
25.1 特性 ..................................................................................................................................................................... 238
25.2 功能介绍 ............................................................................................................................................................. 238
25.3 串行线调试(SWD)接口.................................................................................................................................. 239
25.4 CORTEX M0 调试和访问端口(DAP) ................................................................................................................. 241
25.4.1
调试端口寄存器 ........................................................................................................................................ 241
25.4.2
访问接口寄存器 ........................................................................................................................................ 241
25.5 PSOC4 的编程 ...................................................................................................................................................... 241
25.5.3
端口获取 .................................................................................................................................................... 241
25.5.3.1
25.5.3.2
主/次 SWD 端口 ...................................................................................................................................................... 241
端口获取过程 .......................................................................................................................................................... 242
25.5.4
进入 SWD 编程模式 .................................................................................................................................. 242
25.5.5
执行 SWD 编程模式 .................................................................................................................................. 242
25.6 PSOC4 SWD 调试接口.......................................................................................................................................... 242
25.6.1
调试控制和配置寄存器 ............................................................................................................................ 242
25.6.2
断点单元 .................................................................................................................................................... 243
25.6.3
数据观察点和跟踪(DWT) .................................................................................................................... 243
25.6.4
调试 PSoC4................................................................................................................................................. 243
26
非易失性存储器编程 .........................................................................................................................................244
26.1 特性 ..................................................................................................................................................................... 244
26.2 功能介绍 ............................................................................................................................................................. 244
26.3 SYSTEM CALL 的实现 .............................................................................................................................................. 244
26.4 阻塞和非阻塞 SYSTEM CALL .................................................................................................................................. 245
26.4.1
调用 System Call 的步骤 ........................................................................................................................... 245
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
13
目录
26.5 SYSTEM CALL 函数 .................................................................................................................................................. 246
26.5.1
芯片信息 .................................................................................................................................................... 246
26.5.2
加载闪存字节 ............................................................................................................................................ 247
26.5.3
写行 ............................................................................................................................................................ 248
26.5.4
编程行 ........................................................................................................................................................ 248
26.5.5
擦除所有 .................................................................................................................................................... 249
26.5.6
校验 ............................................................................................................................................................ 250
26.5.7
写保护 ........................................................................................................................................................ 250
26.5.8
非阻塞写行 ................................................................................................................................................ 251
26.5.9
非阻塞编程行 ............................................................................................................................................ 251
26.5.10
重新执行非阻塞 ........................................................................................................................................ 252
26.6 SYSTEM CALL 返回状态值 ...................................................................................................................................... 253
26.7 非阻塞 SYSTEM CALL 伪代码.................................................................................................................................. 253
14
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
A 部分:概述
这部分包括以下章节:
■
介绍 第 16 页
■
入门 第 21 页
■
文档结构 第 22 页
文档修改历史
修订版本
提交日期
变更人
变更说明
**
2013 年 4 月 19 日
JCHE
初次发布,翻译自 001-85634*A 版本
*A
2016 年 5 月 12 日
NIDH
Updated to new template.
Completing Sunset Review.
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
15
1 介绍
PSoC® 4 是基于 ARM Cortex-M0 CPU(处理器)的可编程嵌入式系统控制器家族,为嵌入式应用提供了强大的可编程平台。
它集合了可编程模拟资源、可编程内部互联、用户可编程数字逻辑、通用的固定功能外设计以及高性能的 ARM Cortex-M0
CPU 子系统。
PSoC 4100/4200 系列是 PSoC® 4 家族第一个入门级的成员,并将与 PSoC® 4 家族的其他成员完全兼容。
PSoC® 4 系列包括以下特性:

高性能 Cortex-M0 CPU 内核

固定功能以及可配置的数字模块

高度可编程的数字逻辑

高性能模拟系统

灵活可编程的内部互连
本文档详细描述了 PSoC 4100/4200 设备的每个功能模块来帮助设计人员创建系统级设计。
16
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
介绍
1.1
总体架构
图 1-1 显示了 PSoC 4100 的系统框图,图 1-2 显示了 PSoC 4200 的系统框图。
图 1-1 PSoC 4100 系统框图
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
17
介绍
图 1-2 PSoC 4200 系统框图
18
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
介绍
1.2
特性
PSoC® 4100/4200 包含以下主要特性:












高达 48Mhz,43 DMIPS 的 32 位 Cortex-M0 CPU,
支持单周期乘法
多达 32 KB Flash 及 4KB SRAM 内存
四个独立的可支持中央对齐的 PWM,支持互补的可
编程死区及同步 ADC 操作
一个支持零开销通道切换功能的 12 位 1 Msps ADC
两个支持比较器模式及 SAR ADC 输入缓冲功能的运
算放大器
两个低功耗比较器
两个可工作为 SPI/UART/I2C 串行通信接口的串行通
信模块(SCB)
四个可编程数字逻辑模块(UDB)
CapSense® 及 LCD 驱动
低功耗运行模式: Sleep、Deep Sleep、Hibernate 和
Stop
SWD 编程及调试单元
全面支持 PSoC Creator IDE 工具
1.3
CPU 系统
1.3.1 中央处理器
PSoC 4100/4200 设备的核心是一个可运行至 48 MHz 的
32 位 Cortex-M0 CPU 内核,并为低功耗操作及广泛的时
钟选通进行了优化。它通常使用 16 位指令并可以执行
Thumb-2 指令集的部分子集,因此完全兼容代码移植到类
似于 Cortex M3 或 M4 的更高性能处理器。
PSoC 4100/4200 的 CPU 同时包含一个输出 32 位结果的
单周期硬件乘法器。
1.3.2 中断控制器
PSoC 4100/4200 的 CPU 子系统包含一个支持 32 个中断
输入的嵌套中断向量控制器 (NVIC) 和一个可在 Deep
Sleep 模式中唤醒处理器的中断唤醒控制器(WIC)。PSoC
4100/4200 的 Cortex-M0 CPU 还支持一个可供用户使用
的非屏蔽的中断输入。
1.4
内存
PSoC 4100/4200 内存子系统包括了 Flash 和 SRAM 以及
包含引导及配置程序的管理型 ROM。
1.4.1 Flash
PSoC 4100/4200 的 Flash 模块包含一个与 CPU 紧密连接
的 Flash 加速器来降低平均访问时间。PSoC 4100/4200
的 Flash 可以实现在 48 MHz 时访问时间为一个等待时序
(WS)而在 24 MHz 时为零等待时序。平均下来,Flash
加速器可以实现 85%的单周期 SRAM 访问性能。部分
Flash 可以被用来模拟 EEPROM 操作。
1.4.2 SRAM
PSoC 4100/4200 中的 SRAM 内存可以在 Hibernate 模式中
得到保持。
1.5
系统资源
1.5.1 时钟系统
PSoC 4100/4200 的时钟系统包含内部主振荡器(IMO)、
内部低速振荡器(ILO)以及一个外部时钟接口。
精度为±2% 的 IMO 是 PSoC 4100/4200 内部时钟的主要
时钟源,IMO 的默认频率为 24 MHz 并可以在 3 到 48
MHz 的范围内以 1 MHz 的级别调整。IMO 产生多个衍生
时钟以供不同应用使用。
ILO 是一个非常低功耗、但是精度较低的振荡器,主要用
于产生 Deep Sleep 模式下外设工作的时钟。它的时钟频
率为 32 KHz,精度为 ±60% 。
也可以通过引入一个范围从 0 到 48 MHz 的外部时钟源来
代替 IMO 产生用于 PSoC 4100/4200 功能模块的衍生时钟。
1.5.2 电源系统
PSoC 4100/4200 使用范围为 1.71 到 5.5 V 的单独外部供电。
除了默认的 Active 模式,PSoC 4100/4200 支持几种低功
耗模式:Sleep、Deep Sleep、Hibernate 和 Stop 模式。
Active 模式下, CPU 处于运行状态,所有功能模块供电。
Sleep 模式下,CPU 主时钟停止,CPU 停止运行。在
Deep Sleep 模式下,CPU、SRAM 以及高速逻辑处于保持
状态,主系统时钟关闭,低速时钟开启,低速外设运行。
Hibernate 模式下,低速时钟也被关闭,低速外设停止运行。
PSoC 4100/4200 系统中有多个内部电压调节器用于支持
不同功耗模式下的供电机制。
1.5.3 GPIO
PSoC 4100/4200 中的每个 GPIO 含有以下特征:
 八个不同的驱动模式
 输入输出关断的独立控制
 可以来锁存先前状态的保存模式
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
19
介绍



可选择的摆率
中断产生:边沿触发
Capsense 及 LCD 驱动支持
GPIO 管脚被组织为 8 位宽度的多个端口。使用一个高速
的 I/O 矩阵可以在可能连接到同一个 I/O 管脚的多个信号
间多路复用。固定功能外设的管脚位置也是固定的。
1.6
可编程数字资源
PSoC 4200 包含四个 UDB (通用数字模块)模块, 每个
UDB 包含结构化的数据路径逻辑、未约束的 PLD 逻辑以
及灵活的内部互连。四个 UDB 通过称为数字系统互连
(DSI)的可切换连线结构组成 UDB 阵列。通过 DSI 可以
把信号从外设及端口连接到 UDB 模块中。
PSoC 4200 中的 UDB 阵列可以实现定制的逻辑、额外的
Timer/PWM 和通信接口,例如 I2C、SPI、I2S 及 UART 等。
注意,PSoC 4100 没有 UDB。
1.7
固定功能数字资源
1.7.1 Timer/Counter/PWM 模块
Timer/Counter/PWM 模块包括四个16位的周期长度用户可
编程的计数器,这些计数器之间可以进行功能同步。每个
模块包含一个捕获寄存器、一个周期寄存器以及一些比较
寄存器。每个模块都支持互补的可编程的死区,还支持一
个关断输入信号来强迫输出信号进入预先设定的状态。
Timer/Counter/PWM 模块还支持中央对齐PWM、时钟预
分频、伪随机PWM 以及正交解码等功能。
1.7.2 串行通信模块(SCB)
PSoC 4100/4200 包含两个串行通信模块 SCB,每一个可
配置的 SCB 可以实现一个串行通信接口,如 I2C、UART
或 SPI。
每个 SCB 支持以下功能:
 标准 I2C (多)主和从接口
 标准 SPI 主和从接口,支持 Motorola、TI 和 National
(MicroWire) 模式
 标准 UART 收发器,支持 SmartCard 读卡器
(ISO7816)、IrDA 及 LIN 协议
 带有 32 字节缓存的 EZ 模式 SPI 和 I2C
1.8
模拟系统
1.8.1 SAR ADC
PSoC 4200 包含一个可配置的支持 1 MSps 采样率的 12
位 SAR ADC,PSoC 4100 有一个支持 806Ksps 采样率的
12 位 SAR ADC,可适用于非常广泛的模拟应用。 此
ADC 的主要性能指标包括:增益误差±0.1%,积分非线性
(INL)小于 1 LSB,差分非线性(DNL)小于 1 LSB, 信
噪比(SNR)大于 68 dB。
20
此 ADC 提供了 3 种内部电压参考的选择(VDD, VDD/2
和 VREF)以及一个通过 GPIO 管脚输入的外部电压参考。
ADC 通过一个 8 通道的序列器(Sequencer)连接到一些
固定的管脚,每个通道的转换结果可以通过此序列器进行
缓存从而减少了对 CPU 中断服务的请求。
1.8.2 CTBm 模块
CTBm模块包括两个高度可编程的高性能运算放大器以及
一个开关阵列。这两个运算放大器也可以工作在比较器模
式。不使用外部元器件,此CTBm模块可以实现开环运算
放大器、缓冲器及比较器功能。使用一些外部元器件,还
可 以 实 现 PGA 、 电 压 缓 冲 器 、 滤 波 器 以 及 阻 抗 变 换 器
(Trans-Impedance Amplifier)等功能。
1.8.3 低功耗比较器
PSoC 4100/4200 带 有 两 个 可 工 作 于 Deep Sleep 和
Hibernate 模式下的低功耗比较器,这使得低功耗模式下
即模拟系统时钟被关断的同时可以保持监控外部电压水平
的能力。
两个输入可以来自于固定管脚,或通过 AMUXBUS 来自于
内部信号。
1.9
特殊功能外设
1.9.1 LCD 驱动
PSoC 4100/4200 包含一个可以驱动多达 4 个 Common 和
32 个 Segment 的 LCD 控制器。此控制器可使用完全数字
化的方式(数字相 关或 PWM) 来 直接驱 动 LCD 的段
(Segment)而不需要产生内部 LCD 电压。
1.9.2 CapSense
PSoC 4100/4200 设备包含一个称为 CapSense® 的功能模
块从而使得用户可以利用手指的电容特性来优雅的操作高
级 的 按 键 、 滑 条 和 滚 轮 。 PSoC 4100/4200 通 过 CSD
(CapSense Sigma-Delta) 模块在所有的 GPIO 上都实现了
对 CapSense 功能的支持,并提供了超强的防水能力。当
CapSense 功 能 没 有 使 用 的 时 候 , CSD 模 块 中 的 两 个
IDAC 也可以作为一般用途使用。
1.10
编程和调试
PSoC 4100/4200 设备通过片上的 SWD(串行线调试器)
接口支持编程和调试功能。PSoC Creator IDE 软件提供了
对 PSoC 4100/4200 设备的完整的编程和调试支持。此
SWD 接口与业界标准的第三方工具完全兼容。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
2 入门
2.1
支持
可在线访问http://www.cypress.com 来获得PSoC® 4产品的免费支持,包括培训研讨会、技术论坛、应用手册、PSoC
咨询、TightLink 技术支持邮件/知识库和应用支持专家。
可访问http://www.cypress.com/support/ 或拨打电话 1-800-541-4736获得应用方面的支持。
2.2
产品升级
Cypress 会免费提供PSoC Creator的定期升级及版本更新。可通过分销商提供的光盘或在 http://www.cypress.com 的
软件目录下直接下载来获得升级版本,文档目录下同时提供系统文档的重要更新。
2.3
开发套件
可以通过 Digi-Key、 Avnet、Arrow 及 Future 获得开发套件。Cypress 在线商店包含所有成功开发 PSoC 项目所需的
开发套件、 C 编译器和附件。请访问 Cypress 在线商店网址 http://www.cypress.com/shop/。在产品类别下点击 PSoC
(Programmable System-on-Chip) 可以浏览现有的项目列表。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
21
3 文档结构
本文档主要包括以下几部分内容:
■
篇章 A:概述
■
篇章 B:中央处理器系统
■
篇章 C:存储器系统
■
篇章 D:系统资源
第 44 页
■
篇章 E:数字系统
第 80 页
■
篇章 F:模拟系统
第 174 页
■
篇章 G:编程和调试系统
3.1
第 15 页
第 25 页
第 41 页
第 237 页
主要内容
为了阅读方便,本文档的内容主要以篇章和章节的形式组成。
 篇章 - 介绍的顶层架构,如何开始使用和约定概念,并概述相应的领域,告知读者产品的架构。
 章节 - 介绍具体到每个主题的章节。这些集成电路的某些方面的详细的实现和使用的信息。
3.2
文档约定
除了标题,本文用到了四种与正文不同的文字格式:

第一种是斜体字 italics,用来表示参考的文档标题或文件名字。

第二种是粗斜体字,bold italics,用来表示术语表中提到的术语。

第三种是 Times New Roman,用来表示等式。

第四种是 Courier New,用来表示示例代码。
3.2.1 寄存器约定
寄存器约定详见:PSoC® 4 Registers Technical Reference Manual
3.2.2 数字命名
表示十六进制数字的所有字母大写,附加小写字母“h”(例如,'14h'或‘3Ah’)和十六进制数,也可以用一个'0 x'前缀表
示,C 编码约定。二进制数字附小写“b”(例如,01010100b’或'01000011b')。不是一个'h'或'b'表示的数字是十进制的。
22
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
Interrupt Controller
文档结构
缩略语
3.2.3 单位
以下表格表示了文档里用到的单位。
表 3-1 单位
符号
单位
注释
BC
广播时钟
BIFC
比特位实现的功能连接
BINC
比特位实现的无链接
BOM
物料表
°C
摄氏度
BR
比特率
dB
分贝
BRA
总线请求确认
fF
飞法
BRQ
总线请求确认
Hz
赫兹
CAN
控制器局域网络
k
千,1000
CBUS
比较器总线
K
千,2^10
CI
近位输入
KB
1024 字节,大约为一千字节
CMP
比较器
Kbit
1024 比特
CMRR
共模抑制比
kHz
千赫兹
CO
近位输出
kΩ
千欧姆
CPU
中央处理器
MHz
兆赫兹
CRC
循环冗余校验
MΩ
兆欧姆
CT
连续时间
μA
微安
DAC
数模转换
μF
微法
DC
直流
μS
微秒
DFB
数字滤波模块
μV
微伏
DI
数字或数据输入
μVrms
微伏均方根
DMA
直接内存访问
mA
毫安
DMAC
直接内存访问寄存器
ms
毫秒
DNL
差分非线性
mV
毫伏
DO
数字或数据输出
nA
纳安
DSI
数字信号互联
ns
纳秒
ECO
外部晶振
nV
纳伏
EEPROM
电可擦除可编程只读存储器
Ω
欧姆
EMIF
外部内存接口
pF
皮法
FB
反馈
pp
峰峰值
FIFO
先进先出
ppm
百万分之一
FSR
满幅值
SPS
每秒一次采样
GIE
全局接口使能
σ
一个标准偏差
GPIO
通用输入输出口
V
伏特
2
3.2.4 缩略语
缩略语
注释
I C
内部集成电路通讯协议
ICE
在线电路仿真
IDE
集成开发环境
ILO
内部低速振荡器
ABUS
模拟输出总线
IMO
内部主振荡器
AC
交流电
INL
积分非线性
ADC
模数转换器
I/O
输入/输出
AHB
高性能总线,一种 ARM 的数据传输总线
IOR
I/O 读
API
应用编程接口
IOW
I/O 写
APOR
模拟上电复位
IRES
初始上电复位
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
23
Interrupt Controller
文档结构
缩略语
注释
缩略语
注释
IRA
中断请求确认
SE0
单端 0
IRQ
中断服务程序
SNR
信噪比
ISSP
在线串行编程
SOF
帧头
IVR
中断向量读
SOI
指令开始
LFSR
线性反馈移位寄存器
SP
堆栈指针
LRb
最后收到的比特位
SPD
连续的相位检测器
LRB
最后收到的字节
SPI
串行外围设备互连
LSb
最低比特位
SPIM
串行外围设备互连主机
LSB
最低位字节
SPIS
串行外围设备互连从机
LUT
查找表
SRAM
静态随机存储器
MISO
主入从出
SROM
特权只读存储器
MMIO
存储器映射的输入/输出
SSADC
单斜率模数转换器
MOSI
主出从入
SSC
监控系统调用
MSb
最高比特位
SWD
串行线调试
MSB
最高位字节
SWV
单线浏览器
PC
程序计数器
TC
终止计数
PCH
程序计数器高
TD
事件描述符
PCL
程序计数器低
TIA
跨阻放大器
PCLK
可编程时钟
UART
通用异步接收/发送装置
PD
断电
UDB
通用数字模块
PGA
可编程增益放大器
USB
通用串行总线
PHUB
外设集线器
USBIO
USB I/O
PICU
端口中断控制单元
VCO
电压控制振荡器
PM
电源管理
WDT
看门狗计时器
PMA
PSoC 存储器仲裁
WDR
看门狗复位
POR
上电复位
XRES_N
外部复位,低有效
PPOR
精确上电复位
PRS
伪随机代码序列
®
PSoC
可编程片上系统
PSRAM
伪静态存随机存取储器
PSRR
电源抑制比
PSSDC
电源睡眠占空比
PVT
过程电压温度
PWM
脉冲宽度调制
RAM
随机存取存储器
RAS
行地址选通信
RETI
中断返回
RO
弛张振荡器
ROM
只读存储器
RW
读写
SAR
逐次逼近型寄存器
SC
开关电容
SIE
串行接口引擎
SIO
特殊 I/O 口
24
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
B 部分:中央处理器(CPU)子系统
这部分包括以下章节:
■
Cortex-M0 中央处理器
■
中断 第 31 页
第 26 页
系统架构:
CPU 子系统结构框图
SWD/TC
Cortex
M0
48 MHz
FAST MUL
NVIC, IRQMX
System Interconnect (Single Layer AHB)
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
25
4 Cortex™-M0 处理器
PSoC 4 包含一个 ARM Cortex-M0 处理器。Cortex-M0 处理器基于一个低功耗的 32 位处理器内核,支持 3 级流水线、固定的
存储器映射(高达 4GB 的可寻址存储空间)及 ARMv6-M Thumb 指令集;它还提供了一条单周期乘法指令和一个嵌套向量中
断控制器(NVIC)。NVIC 可以实现较低的中断延迟。
Cortex-M0 处理器中除 CPU 内核外,还包括嵌套向量中断控制器(NVIC)、系统节拍定时器(SYSTICK Timer) 和 调试模
块等。
本章节仅对 Cortex-M0 处理器做一个概述,如需对其详细了解,请参考《Cortex™-M0 Devices Generic User Guide》或
《Cortex™-M0 Technical Reference Manual》,其可从网址 http://www.arm.com 上获得。
4.1
特性
PSoC 4 Cortex-M0处理器具有如下特性:
 使用、编程、调试方便,便于8位/16位 MCU代码的移植
 工作性能高达0.9 DMIPS/MHz。这有助于提高程序执行速度、降低功耗。
 支持Thumb指令集。这可提高代码密度和对存储器的利用率。
 集成嵌套向量中断控制器(NVIC)。NVIC可极大地缩短中断延时。
 强大的调试能力:
❒
❒
❒
26
串行调试(SWD)
断点(Break points)
观察点(Watch points)
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
Interrupt Controller
Cortex™-M0 处理器
4.2
处理器子系统框图
DSI 中断
固定功能中断
图 4-1 PSoC 4 处理器子系统框图
处理器子系统
中断选择
ARM Cortex-M0 处理器
测试控制器
调试访问端口
系统互连
Flash
编程接口
Flash 加速器
SRAM 控制器
SROM 控制器
Flash
SRAM
SROM
处理器和存储器子系统
系统互连
(单层AHB总线)
4.3
Cortex-M0 处理器的使用
Cortex-M0 是一个 32 位的处理器,采用 32 位的数据通路、32 位的寄存器和 32 位的存储器接口,并支持大部分 16 位 Thumb
指令集和部分 32 位 Thumb-2 指令集。
Cortex-M0 支持两种操作模式:线程模式(Thread mode)和处理模式(Handler mode),并有一条单周期的 32 位乘法指令。
4.3.1 Cortex-M0 处理器内核寄存器
Cortex-M0 处理器内核有16个32位寄存器(详情见表4-1):
 R0 to R12 – 通用寄存器。
 R13 – 堆栈指针(SP)。
 R14 – 链接寄存器(LR)。
 R15 – 程序计数器(PC)。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
27
Interrupt Controller
Cortex™-M0
处理器
表 4-1. Cortex-M0 处理器内核寄存器
名称
类型 a
复位值
描述
R0-R12
可读写
未知
R0-R12 是供数据操作的 32 位通用寄存器。
R0~R7 可被所有指令访问;但 R8~R12 仅可被部分指令访问。
堆栈指针(SP)是寄存器 R13。
Cortex-M0 处理器支持两种堆栈指针:主堆栈指针(MSP)和进程堆栈指针(PSP)。
在同一时刻,CPU 仅使用其中一种堆栈指针。
在线程模式中,寄存器 CONTROL 的 bit[1]指示了当前的有效堆栈指针:
0 = 主堆栈指针 (MSP)。这是复位默认值。
1 = 进程堆栈指针 (PSP)。
在处理模式中,仅使用主堆栈指针。
复位时,处理器将地址 0X00000000 的值加载到 MSP 中。
MSP
可读写
[0x00000000]
PSP
可读写
[0x00000000]
LR
可读写
未知
链接寄存器(LR)是寄存器 R14。它保存子程序、函数调用和异常的返回信息。复位
时,LR 的值是未知的。
PC
可读写
[0x00000004]
程序计数器(PC)是寄存器 R15。它包含当前的程序地址。复位时,处理器将复位向
量(地址:0x00000004)的值加载到 PC。此值的 Bit[0]在复位时被加载到 EPSR 的 T
位,且必须为‘1’。
b
程序状态寄存器(PSR)由下列 3 种寄存器组合而成:
应用程序状态寄存器(APSR)
执行程序状态寄存器(EPSR).
中断程序状态寄存器(IPSR)
PSR
可读写
未知
APSR
可读写
未知
应用程序状态寄存器(APSR)包含执行完前面的指令后条件标志的当前状态。
EPSR
只读
未知 b
执行程序状态寄存器(EPSR)包含 Thumb 状态位。
IPSR
只读
0X00000000
中断程序状态寄存器(IPSR)包含当前中断服务程序(ISR)的异常编号。
PRIMASK
可读写
0X00000000
优先级屏蔽寄存器(PRIMASK)可阻止所有优先级可配置的异常被激活。
CONTROL
可读写
0X00000000
CONTROL 寄存器控制处理在线程模式下所使用的堆栈。
a. 描述在线程模式和处理模式下程序执行过程中的访问类型。调试访问时可与此不同。
b. Bit[24]是 Thumb 状态位,其值是从复位向量的 bit[0]加载进来的。
在 32 位的 PSR 中,3 个寄存器的位域分配是互斥的,见表 4-2。
表 4-2. Cortex-M0 PSR 位域分配
位
PSR 寄存器
名称
功能
31
APSR
N
负值标志
30
APSR
Z
零值标志
29
APSR
C
进位或借位标志
28
APSE
V
溢出标志
27 – 25
24
保留
EPSR
T
Thumb 状态位。此值必须总是为 1。当 T 位为 0(非 Thumb 状态)时,执行指令会导
致 HardFault 异常或锁定故障。
23 – 6
保留
5–0
指示当前异常编号:
0 = 线程模式
1 = 保留
2 = NMI
3 = HardFault
4 – 10 = 保留
11 = SVCall
12, 13 = 保留
14 = PendSV
15 = SysTick
16 = IRQ0
…
47 = IRQ31
28
IPSR
异常编号
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
Interrupt Controller
Cortex™-M0 处理器
应用程序可通过 MSR 或 CPS 指令改变 PRIMASK 的
bit[0]值来禁止或重新使能异常。当 Bit[0] = 0 时,使能
异常;当 Bit[0] = 1 时,禁止所有优先级可配置的异常。
关于中断的详细介绍,请参考中断章节。
助记符
简述
DMB
数据内存屏障
DSB
数据同步屏障
EORS
异或
4.3.2 操作模式
ISB
指令同步屏障
Cortex-M0 处理器支持两种操作模式:
 线程模式(Thread Mode) –用于执行应用程序。
在线程模式下,寄存器 CONTROL 的 bit[1]控制着
CPU 使用主堆栈指针还是进程指针:
□ 0 = MSP 是 CPU 当前使用的堆栈指针
□ 1 = PSP 是 CPU 当前使用的堆栈指针
 处理模式(Handler Mode) – 用于处理异常。在
处理模式下,CPU 仅使用主堆栈指针(MSP)。
LDM
加载多个寄存器,访问之后递增地址
LDR
从基于 PC 相对偏移地址上加载寄存器
用字加载寄存器
LDRB
用字节加载寄存器
LDRH
用半字加载寄存器
LDRSB
用有符号的字节加载寄存器
LDRSH
用有符号的半字加载寄存器
LSLS
逻辑左移
LSRS
逻辑右移
MOV{S}
传送
MRS
从特殊寄存器传送到通用寄存器
MSR
从通用寄存器传送到特殊寄存器
默认情况下,线程模式使用 MSP。在线程模式下,如
需将堆栈指针切换到 PSP,只需要使用 MSR 指令将寄
存器 CONTROL 的 bit[1]设置为 1 即可。但需要注意的
是,当更改堆栈指针时,必须在 MSR 指令后立即使用
一个 ISB 指令。这样可确保 ISB 之后的指令执行时使
用新的堆栈指针。
MULS
乘法,32 位结果值
处理模式始终使用 MSP。因此,在处理模式下,CPU
忽略软件对寄存器 CONTROL 的写操作。异常进入和
返回机制会自动更新寄存器 CONTROL。
MVNS
位非
NOP
无操作
ORRS
逻辑或
4.3.3 指令集
POP
出栈,将堆栈中的内容放入寄存器
PUSH
圧栈,将寄存器中的内容压入堆栈
REV
反转字里面的字节顺序
REV16
反转每半字里面的字节顺序
REVSH
反转有符号半字里面的字节顺序
RORS
循环减法
RSBS
反向减法
SBCS
进位减法
SEV
发送事件
STM
存储多个寄存器,访问后递增地址
STR
将寄存器作为字来存储
STRB
将寄存器作为字节来存储
STRH
将寄存器作为半字来存储
SUB{S}
减法
SVC
特权用户调用
SXTB
符号扩展字节
SXTH
符号扩展半字
TST
基于测试的逻辑与
UXTB
0 扩展字节
UXTH
0 扩展半字
WFE
等待事件
WFI
等待中断
Cortex-M0 执行 Thumb 指令集。如需详细了解此版本
的 Thumb 指 令 集 , 请 参 考 《 Cortex™-M0 Devices
Generic User Guide》。
指令操作数可以是一个 ARM 寄存器、立即数或特殊指
令参数。指令对操作数进行操作后,通常 将结果保存
在目标寄存器中。一些指令不能用 PC 或 SP 作为操作
数或目标寄存器。
表 4-3 Cortex-M0 指令集
助记符
简述
ADCS
进位加法
ADD{S}
加法
ADR
将基于 PC 相对偏移的地址读到寄存器
ANDS
位与操作
ASRS
算术右移
B{cc}
跳转{有条件地}
BICS
位清除
BKPT
断点
BL
带链接的跳转
BLX
带链接的间接跳转
BX
间接跳转
CMN
比较负值
CMP
比较
CPSID
更改处理器状态,禁止中断
CPSIE
更改处理器状态,使能中断
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
29
Interrupt Controller
Cortex™-M0
处理器
4.3.3.1
地址对齐
在对齐的存储访问中,字对齐的地址(地址的低两位
为 00)用于对一个字或多个字的访问;半字对齐的地
址(地址的最低位为 0)用于对半字的访问;对字节
访问可是任何地址。
Cortex-M0 处理器不支持非对齐的存储访问。任何非对
齐的存储访问,将产生一个 HardFault 异常。
4.3.3.2
存储器格式
PSoC 4 Cortex-M0 处理器采用小端(little-endian)格
式,即在字单元中最低有效字节存放在最低地址,最高
有效字节存放在最高地址处。
30
4.3.4 系统节拍定时器
系统节拍定时器(Systick Timer)集成于 NVIC 中,可
产生 SYSTICK 异常。这个异常可被用作操作系统的系
统节拍。此定时器包含一个可重载的 24 位寄存器(递
减计数)。系统节拍定时器使用 Cortex-M0 的内部时
钟作为其时钟源。
4.3.5 调试
PSoC 4 支持一个 SWD 调试接口,4 个硬件断点和 2
个观察点设置,以方便用户调试。详情请见编程和调
试接口章节
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
5 中断
中断是嵌入式产品应用中的重要组成部分。在 PSoC 4 等片上系统(SoC)架构中,片上外设与 CPU 间的通讯一般使
用中断来完成。PSoC 4 为中断处理和异常处理提供一个统一的向量表。
5.1
特性
PSoC 4 中断具有如下特性:
 多达 32 个中断
 嵌套向量中断控制器(NVIC)集成于 ARM Cortex-M0 处理器中,可实现较低的中断延迟
 可选择保存在 Flash 或 SRAM 中的向量表
 每个中断可配置为四种优先级(0~3)
 支持两种中断源:固定功能中断源或 DSI 中断源
 支持电平触发和边沿触发
5.2
中断的实现
图 5-1. 中断控制框图
Cortex-M0 Processor
IRQ0
IRQ1
Interrupt
signals from
PSoC 4 on-chip
peripherals
Nested
Vectored
Interrupt
Controller
(NVIC)
Cortex-M0
Processor Core
IRQ31
如图 5-1 所示,PSoC 4 支持 32 个中断(由 Cortex-M0 处理器产生的异常,没有显示在图中)。嵌套向量中断控制器
(NVIC)集成于 ARM Cortex-M0 处理器中,可以实现较低的中断延迟。NVIC 具有如下功能:
 使能/禁止每个中断
 连接 Cortex-M0 处理器内核
 不同中断间的优先级处理
 中断的嵌套
 软件设置每个中断的挂起、清除
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
31
中断
在 PSoC4 中,NVIC 可支持电平中断和脉冲中断。图 52 和图 5-3 分别是电平中断和脉冲中断的工作原理图。假
设中断信号初始值为非活动状态,以下事件序列描述了
电平中断和脉冲中断的处理过程:
中断和异常的工作原理
5.3
5.3.1
PSoC 4 中的中断/异常处理
本章节将介绍中断或异常的处理过程。
当一个中断产生时,其首先被发送至 NVIC,并进入挂起
状态,等待 CPU 处理。NVIC 再向 CPU 发送中断请求信
号和异常编号。一旦 CPU 接收到来自 NVIC 的中断请求
信号和异常编号,就将当前上下文(通用寄存器、程序
计数器 PC 和其他寄存器)压入堆栈,并从向量表(见
表 5-1)中取出与向量编号相对应的异常处理程序地址。
程序计数器将跳转到异常处理程序地址处执行异常处理
程序。一旦完成异常处理程序的操作,CPU 将对储存在
堆栈内的中断上下文进行出栈操作,接着从中断处继续
执行程序。
如果一个中断正在被 CPU 响应时 NVIC 又接收到一个中
断请求,或者 NVIC 同时接收到多个中断请求时,其首
先会评估不同中断间的优先级,然后将最高优先级中断
的向量编号发送给 CPU。
CPU 对异常的处理与中断处理相同。每个异常事件均对
应唯一的异常编号,CPU 通过异常编号读取异常程序地
址并执行。
以上是 PSoC 4 中断和异常的简单介绍,如需深入了解
NVIC,请参考《Cortex™-M0 Devices Generic User
Guide》中的有关 NVIC、异常处理相关章节。
5.3.2
 当中断事件发生时,NVIC 将记录此中断请求。因该
中断还未被 CPU 处理,故其处于挂起状态。
 NVIC 将中断向量编号及中断请求信号一起发送给
CPU。当 CPU 开始执行此中断的中断服务程序时,
中断的挂起状态切换为活动状态。
 在电平中断中,当 CPU 执行完中断服务程序,如中
断信号仍然保持,则挂起中断,并再次执行中断服务
程序(见图 5-2)。否则中断状态切换为非活动状态。
 在脉冲中断中,当 CPU 执行中断服务程序的过程中,
如果有脉冲中断再次发生,该中断被挂起(即使有多
个中断发生也仅被记录为一个挂起请求),此时中断
状态为挂起并活动状态,当前中断处理程序结束后则
继续处理挂起的中断(见图 5-3)。如果没有新的中
断发生则中断进入非活动状态。
5.3.3
异常向量表
PSoC 4 的异常向量表(见表 5-1)保存了所有异常的入
口地址。当有异常发生时,CPU 会从异常向量表中取相
应异常的入口地址,并执行相应的服务程序。
在表 5-1 中,从基地址开始的 4 个字节在器件复位时用
来初始化主堆栈指针(MSP),而非异常向量。在
PSoC 4 中,用户可在程序的启动阶段,通过配置
电平中断和脉冲中断
图 5-2. 电平中断
VECS_IN_RAM 位(CPUSS_CONFIG[0]),来选择使用
保存在 Flash 还是 SRAM 中的向量表。
int[x]
CPU
Execution
main
State
ISR
int[x] is still high
ISR
main

ISR
main

图 5-3. 脉冲中断
int[x]
CPU
Execution
main
State
ISR
ISR
main
VECS_IN_RAM = 0: 选择保存在 Flash 中的向量表,
起始地址为 0x00000000。如需修改异常向量入口
地址,需要修改 Flash 代码。
VECS_IN_RAM = 1: 选择保存在 SRAM 中的向量
表 ,起 始地址为 0x20000000 。 程序 可通过 修改
SRAM 的向量表,动态地修改向量入口地址。
如需异常源(异常编号:1 ~ 15)的详细信息,请参考异
常源章节。
ISR
main
如需中断源(异常编号:16 ~ 47)的详细信息,请参考
中断源章节。
表 5-1. PSoC 4 异常向量表
异常
编号
异常类型
初始化堆栈指
针值
优先级
-
向量地址
功能
基地址:
0x00000000 – 向量
表保存在 Flash 中
初始化堆栈指针值(非异常,放在这里为了向量表的完整性)
0x20000000 – 向量
32
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
中断
表保存在 SRAM 中
1
复位(Reset)
-3,最高
基地址 + 0x04
异常模块将 Reset 看作一种特殊形式的异常来处理。当 Reset
发生时,处理器将停止操作,且停止位置不确定。当 Reset
解除时,应用程序重新从向量表中 Reset 入口地址处启动。
2
不可屏蔽中断
(NMI)
-2
基地址 + 0x08
不可屏蔽中断(NMI)可以由硬件信号、软件或 System Call
函数调用触发。其是除 Reset 之外的最高优先级异常。NMI
永远使能,固定优先级为-2。NMI 不可被屏蔽,它的执行不能
被其他任何异常中止, 也不能被除 Reset 之外的任何异常
抢占。
在 PSoC 4 中,用户可将一个硬件数字信号配置为 NMI 功能
(见表 5-2)。
3
HardFault
-1
基地址 + 0x0C
4-10
保留
-
基地址 +0x10 ~ 基地
址 + 0x28
11
管理程序调用
(SVCall)
可配置
基地址 + 0x2C
12-13
保留
-
基地址 + 0x30 ~ 基
地址 + 0x34
14
PendSV
可配置
基地址 + 0x38
(0~3)
(0~3)
15
SysTick
可配置
…
外部中断
(IRQ0)
可配置
…
可配置
5.4
外部中断
(IRQ31)
SVCall 是一个由 SVC 指令触发的异常。在 OS 环境下,应用
程序可以使用 SVC 指令来访问 OS 内核函数和设备驱动。
-PendSV 是一个中断驱动的系统级服务请求。在 OS 环境下,
当没有其他异常有效时,使用 PendSV 来进行任务切换。
SysTick 是系统定时器到达零时产生的异常。系统也可以通过
软件产生一个 SysTick 异常。在 OS 环境下,处理器可以将这
个异常用作系统节拍。
基地址 + 0x40
(0~3)
…
(0~3)
47
--
基地址 + 0x3C
(0~3)
16
HardFault 是由于在正常操作过程中或异常处理过程中出错而
产生的一个异常。HardFault 的优先级为-1。它的优先级高于
任何可配置优先级的异常。
可配置
中断是由外设产生或软件请求触发的异常。在系统中,外设使
用中断与处理器进行通讯。中断源列表请见表 5-2。
基地址 + 0xBC
(0~3)
异常源
接下来将介绍表 5-1 中的不同异常源(异常编号:1 ~ 15)。
5.4.1 复位异常
器件的复位会引起复位异常,其拥有最高优先级(-3),永远使能。在 PSoC 4 中,上电复位(POR)、来自管脚 XRES
的外部信号或看门狗复位等均可以引起器件复位。器件复位后,保存在 SROM 中的启动程序首先被执行,来配置器件
参数。SROM 中保存了复位异常的向量地址,其保存了执行 SROM 中启动程序的起始地址。CPU 执行完 SROM 中的
启动程序后,会跳转到 Flash,从地址 0x00000004(见表 5-1)读取保存在 Flash 中的启动代码的入口地址,并跳转
执行。
注意:在器件出厂时,SROM 中的启动程序和数据已经被固化,用户不可读取或修改。保存在 SRAM 向量表中的复位
异常地址不可用,因为器件复位后,总是选择保存在 Flash 向量表中的复位异常地址;并且选择 SRAM 中向量表的寄
存器配置是在启动代码(保存在 Flash 中)阶段完成的。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
33
中断
5.4.2
不可屏蔽中断(NMI)
不可屏蔽中断(NMI)的优先级是-2,具有除复位外的最高优先级,并且永远使能。在 PSoC 4 中,用户可以通过如下
3 种方式来触发 NMI:



硬件信号:PSoC 4 支持通过数字信号来触发 NMI 的方式,对应的中断源是 irq_out[0](见表 5-2);CPU 执行
Flash 或 SRAM 向量表中指向的 NMI 处理程序。PSoC 4 具有灵活的数字信号互连功能,因此可将片上外设的数
字输出、外部管脚信号连接到 irq_out[0]中断线上,来触发 NMI 异常。
设置 NMIPENDSET 位:向中断控制状态寄存器 CM0_ICSR 的 NMIPENDSET 位写 1,可触发 NMI 异常;CPU
执行 Flash 或 SRAM 向量表中指向的 NMI 处理程序。
系统调用(System Call):此功能主要应用于非易失性存储器编程,比如对 Flash 进行写、校验等操作(见非易
失性存储器编程章节)。当用户向寄存器 CPUSS_SYSREG 的 SYSCALL_REQ 位写 1 时,将触发 NMI 异常;
CPU 执行保存在 SROM 中的 NMI 异常处理程序,但用户不可读取或修改 SROM 中的程序。
5.4.3
HardFault 异常
HardFault 是由于正常操作过程中或异常处理过程中出错而产生的一个异常,永远使能。HardFault 具有固定优先级-1,
其优先级比任何可配置优先级的异常均高。HardFault 用于处理不同类型的故障;例如,执行未定义的指令或访问无效
的内存地址均会引起 HardFault 异常 。Cortex-M0 处理器不向 HardFault 异常处理程序提供故障状态信息,但是允许执
行完异常处理程序后返回并继续执行程序,这样程序就具有从故障情况下恢复过来的能力。
5.4.4
管理程序调用(SVCall)异常
SVCall 是一个由 SVC 指令触发的异常,永远使能。SVC 指令可以使系统进入特权模式。在 OS 环境下,应用程序可
以使用 SVC 指令来访问 OS 内核函数和设备驱动。
注意:在 PSoC 4 中,系统进入特权模式是通过 System Call 触发 NMI 异常实现的,而不是使用 SVCall 异常;也就是
说,在 PSoC 4 中,使用 SVC 指令,系统不进入特权模式。用户可以按照需求,定义 SVCall 异常的处理程序。
用户可通过 SHPR2[31:30]来配置 SVCall 异常的优先级(0~3)。当 SVC 指令被执行时,SVCall 异常会进入挂起状态
并等待 CPU 处理。系统处理控制和状态寄存器 SHCSR 的 SVCALLPENDED 位可用来检查或修改 SVCall 异常的挂起
状态。
5.4.5
PendSV 异常
PendSV 是又一个管理程序调用异常,与 SVCall 类似。PendSV 永远使能,且优先级可配置。当向中断控制状态寄存
器 CM0_ICSR 的 PENDSVSET 位写 1 时,可触发 PendSV 异常。向寄存器 CM0_ICSR 的 PENDSVCLR 位写 1,可
清除 PendSV 异常。其优先级(0~3)是通过配置 SHPR3[23:22]实现的。
5.4.6
SysTick 异常
Cortex-M0 处理器支持系统时钟 SysTick。SysTick 是一个 24 位、递减计数的定时器,可用作 RTOS 的系统节拍、高
速报警定时器或者简单的计数器。用户可配置 SysTick 控制和状态寄存器 CM0_SYST_CSR 的 TICKINT 位来使能异常,
当计数值到 0 时,使其产生中断,即 SysTick 异常。SysTick 异常的优先级(0~3)是通过配置 SHPR3[31:30]来实现
的。当用户向中断控制状态寄存器 CM0_ICSR 的 PENDSTSET 位写 1 时,可产生一个 SysTick 异常;向中断控制寄存
器 CM0_ICSR 的 PENDSTCLR 位写 1 时,清除 SysTick 异常。
34
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
中断
中断源
5.5
PSoC 4 支持 32 个外设中断(IRQ0 ~ IRQ31 或异常编号 16~17),见表 5-1。表 5-2 列出了每个中断的中断源。
PSoC 4 支持灵活的中断源选择。如图 5-4 所示,每个中断有两个中断源:固定功能中断源和数字系统互连(DSI)中
断源。应用程序可通过配置寄存器 CPUSS_INTR_SELECT 为每个中断选择使用固定功能中断源还是 DSI 中断源(见
表 5-2)。
图 5-4. 中断源多路选择
Fixed Function Interrupt Source
DSI Interrupt
Source
(irq_out[n])
Level
0
IRQn
(n = 0 to 31)
0
1
Rising
Edge
Detect
To NVIC
1
UDB_INT_CFG
register
CPUSS_INTR_SELECT
register
注意:DSI 中断信号(irq_out[n])是通过 PSoC Creator 软件对数字信号进行路由实现的。用户不需要手动配置。
固定功能中断源是来自片上外设的中断信号,比如 PWM、串行通信模块(SCB)、SAR ADC 等产生的中断信号。固
定功能中断由不同外设状态的逻辑或产生,在执行中断服务程序时,CPU 可以通过读取外设状态寄存器来判断产生中
断的中断源。固定功能中断通常是电平中断。在中断服务程序中,CPU 通过读取外设状态寄存器来清中断;如不读取,
则中断将一直存在,并且 CPU 持续执行中断服务程序。
另一种中断源是 DSI 中断信号。任何数字信号均可通过路由作为 DSI 中断源,比如来自通用数字模块(UDB)的数字
输出信号或引脚上的数字输入信号。通过对路由来的 DSI 信号进行上升沿检测后的信号也可作为中断源(见图 5-4)。
图 5-4 中的边沿检测电路可以将 DSI 线上的上升沿信号转换为两个系统时钟周期宽度的脉冲信号,这样可确保 DSI 线
上每个上升沿信号可触发一次中断。边沿检查电路也可为不能向 NVIC 产生合适电平中断信号的中断源提供一种使用方
法。图 5-4 中的 UDB_INT_CFG 寄存器用于选择 DSI 信号是直接至 NVIC 还是经边沿检测电路至 NVIC。
表 5-2. PSoC 4 中断源列表
中断编号#
Cortex-M0 异常编号#
固定功能中断源
DSI 中断源
NMI (见异常源)
2
IRQ0
16
GPIO P0 (端口中断)
irq_out[1]
IRQ1
17
GPIO P1 (端口中断)
irq_out[1]
IRQ2
18
GPIO P2 端口中断)
irq_out[2]
IRQ3
19
GPIO P3 (端口中断)
irq_out[3]
IRQ4
20
GPIO P4 (端口中断)
irq_out[4]
IRQ5
21
<DSI-only>
irq_out[5]
IRQ6
22
<DSI-only>
irq_out[6]
IRQ7
23
<DSI-only>
irq_out[7]
IRQ8
24
LPCOMP(低功耗比较器)
irq_out[8]
IRQ9
25
WDT(看门狗定时器)
irq_out[9]
IRQ10
26
SCB1(串行通信模块 1)
irq_out[10]
IRQ11
27
SCB2(串行通信模块 2)
irq_out[11]
IRQ12
28
SPC(系统性能控制器)
irq_out[12]
IRQ13
29
PWR(电源管理)
irq_out[13]
IRQ14
30
SAR ADC (逐次逼近型 ADC)
irq_out[14]
IRQ15
31
CSD(电容感应模块计数器溢出中断)
irq_out[15]
IRQ16
32
TCPWM0(定时器/计数器/PWM0)
irq_out[16]
IRQ17
33
TCPWM1(定时器/计数器/PWM1)
irq_out[17]
irq_out[0]
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
35
中断
中断编号#
Cortex-M0 异常编号#
固定功能中断源
DSI 中断源
IRQ18
34
TCPWM2(定时器/计数器/PWM2)
irq_out[18]
IRQ19
35
TCPWM3(定时器/计数器/PWM3)
irq_out[19]
IRQ20
36
<DSI-only>
irq_out[20]
IRQ21
37
<DSI-only>
irq_out[21]
IRQ22
38
<DSI-only>
irq_out[22]
IRQ23
39
<DSI-only>
irq_out[23]
IRQ24
40
<DSI-only>
irq_out[24]
IRQ25
41
<DSI-only>
irq_out[25]
IRQ26
42
<DSI-only>
irq_out[26]
IRQ27
43
<DSI-only>
irq_out[27]
IRQ28
44
<DSI-only>
irq_out[28]
IRQ29
45
<DSI-only>
irq_out[29]
IRQ30
46
<DSI-only>
irq_out[30]
IRQ31
47
<DSI-only>
irq_out[31]
5.6
使能/禁止异常
PSoC 4 支持对 32 个中断分别使能或禁止的功能。如果中断被禁止,则 NVIC 不处理相应的中断请求。用户可以通过
NVIC 提供的中断设置-使能寄存器(CM0_ISER)和中断清除-使能寄存器(CM0_ICER)来分别使能/禁止每个中断。
这些寄存器均是 32 位宽度,每个位对应相同编号的中断。在软件中可以通过读取这些寄存器来获得中断的使能状态。
表 5-3 描述了这两个寄存器的读写权限。
注意:向寄存器 CM0_ISER 和 CM0_ICER 的相应位写 0,不起作用。
表 5-3. 中断使能/禁止寄存器
寄存器
操作
写
中断设置-使能寄存器(CM0_ISER)
读
写
中断清除-使能寄存器(CM0_ICER)
读
位值
备注
1
使能中断
0
无影响
1
中断使能
0
中断禁止
1
禁止中断
0
无影响
1
中断使能
0
中断禁止
寄存器 CM0_ISER 和 CM0_ICER 仅对 32 个中断(IRQ0 ~ IRQ31)有效。15 个异常的使能/禁止可通过相应的寄存器
来实现,见异常源章节。
Cortex-M0 处理器中的寄存器 PRIMASK 可以屏蔽所有可配置优先级的异常,不论是否被使能。除 Reset、NMI 和
HardFault 外,其他异常均可配置优先级,见表 5-1。当设置 PRIMASK[0]位为 1 时,CPU 不执行可配置优先级异常的
服务程序;但是可配置优先级的异常可以保持在挂起状态,PRIMASK[0]位被清 0 后,CPU 会执行相应的服务程序。
注意:0:指最高优先级;3:指最低优先级。
36
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
中断
异常状态
5.7
每个异常均处于下面其中一种状态:
表 5-4. 异常状态
异常状态
描述
非活动
异常处于非活动、非挂起 状态。异常被禁止或者没有被触发。
挂起
异常等待处理器处理。当一个来自外设或软件的异常请求发生时,NVIC 将相应的异常置为挂起状态,等待
CPU 处理。
活动
一个异常正被处理器处理,但处理尚未结束。一个高优先级的异常可以打断一个低优先级异常的处理。在这
种情况下,两个异常均处于活动状态。
活动和挂起
一个异常正被处理器处理,而且有一个来自同一个异常源的异常正在等待处理。
中断控制状态寄存器(CM0_ICSR)包含了异常的各种状态信息。



VECTACTIVE 位 (CM0_ICSR [8:0]) : 保存了当前正在执行的异常编号,其值与 IPSR[8:0]相同。0 表示 CPU
没有执行异常,运行在线程模式。
VECTPENDING 位 (CM0_ICSR[20:12]):保存处于挂起状态的最高优先级的异常编号。0 表示没有被挂起的
异常。
ISRPENDING 位 (CM0_ICSR[22]):指示是否有中断(IRQ0 – IRQ-31)处于挂起状态。
5.7.1 挂起异常
当一个外设向 NVIC 产生一个中断请求信号或者一个异常事件发生时,相应的异常会进入挂起状态。一旦 CPU 开始执
行相应的异常处理程序,异常将由挂起状态转为活动状态。异常处理程序结束后,中断可能进入非活动状态或者重新挂
起状态。
NVIC 允许程序通过中断设置-挂起寄存器(CM0_ISPR)和中断清除-挂起寄存器(CM0_ICPR)来修改中断的挂起状
态。这两个寄存器均为 32 位宽度,并且每个位对应相同编号的中断。表 5-5 描述了这两个寄存器的读写权限。
表 5-5 中断设置-挂起/清除-挂起寄存器
寄存器
操作
写
中断设置-挂起寄存器(CM0_ISPR)
读
写
中断清除-挂起寄存器(CM0_ICPR)
读
位值
注释
1
设置中断挂起
0
无影响
1
中断挂起中
0
中断非挂起中
1
清除中断挂起
0
无影响
1
中断挂起中
0
中断非挂起中
如果某个中断已经是挂起状态,则对其 CM0_ISPR 相应位写‘1’是不起作用的。不论中断是否被使能,均可更新中断的
挂起位。如果中断被禁止,则中断线一直保持挂起状态直到中断被使能。
注意:寄存器 CM0_ISPR 和 CM0_ICPR 仅 32 个外设中断(异常编号:16~47)有效。关于编号 1~15 的异常的挂起,
请参考异常源章节。
5.7.2
异常优先级
不同的优先级配置,可以使 CPU 对某时刻的多个异常进行仲裁。PSoC 4 支持灵活的异常优先级选择,见表 5-1。
Reset、NMI 和 HardFault 的优先级分别是-3、-2 和-1;除此之外的其他异常均可配置为 0~3 的优先级。
注意:优先级的数值越小,对应异常的优先级越高。即复位异常(优先级:-3)具有最高优先级。
PSoC 4 支持异常嵌套,即高优先级异常可以抢占/中断低优先级异常处理程序的执行。PSoC 4 支持最多 4 级异常的嵌
套。但当 CPU 接收到两个或多个相同优先级的异常时,低异常编号的异常会被优先处理。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
37
中断
配置异常(异常编号:1~15)优先级的寄存器配置见异常源章节。
PSoC 4 提供了 8 个中断优先级寄存器(CM0_IPR),用户可通过其为每个中断(IRQ0~IRQ31)配置四种优先级
(0~3),其中 0 是最高优先级,3 是最低优先级。寄存器 CM0_IPR 的位定义见表 5-6。
表 5-6 中断优先级寄存器的位定义
位
名称
描述
7:6
PRI_N0
中断编号 N 的优先级.
15:14
PRI_N1
中断编号 N+1 的优先级.
23:22
PRI_N2
中断编号 N+2 的优先级.
31:30
PRI_N3
中断编号 N+3 的优先级.
5.8
堆栈使用
Cortex-M0 有两种堆栈指针:主堆栈指针(MSP)和进程堆栈指针(PSP)。在同一时刻,CPU 仅使用其中一种堆栈
指针。当 CPU 正在线程模式(Thread mode)下执行主代码时,一个中断请求发生,CPU 会将当前的通用寄存器状态
压入堆栈中,然后进入处理模式(Handler mode)执行中断服务程序。在线程模式中,Control 寄存器的 Active Stack
Pointer 位指示了当前的有效堆栈指针。在处理模式中,仅使用主堆栈指针。
Cortex-M0 使用递减堆栈。堆栈指针始终指向最后一个入栈项。当处理器将一个新的项压入堆栈时,堆栈指针递减,然
后将该项写入新的存储器单元中。
在线程模式中,当一个异常请求发生时,CPU 使用 Control 寄存器 Active Stack Pointer 位指示的堆栈指针来存储当前
的通用寄存器值。入栈操作完成后,CPU 进入处理模式并执行异常处理程序。如果执行异常处理程序过程中有更高优
先级异常发生,则 CPU 使用主堆栈指针进行入栈/出栈操作,因为此时 CPU 已经运行于处理模式。
Cortex-M0 使用了 Tail-chaining 和 Late-arriving 两种机制来减少中断延迟。下面是关于这两种机制的简单介绍。如需
详细信息,请参考《Cortex™-M0 Devices Generic User Guide》的异常模式章节。

Tail-Chaining
Tail-Chaining(末尾连锁)机制可加速对异常的处理。当一个异常处理程序结束时,如果一个挂起的异常满足异常进入的
要求,处理器就跳过堆栈弹出,并执行新的异常处理程序。

Late-arriving
Late-arriving(迟来) 机制可加速对抢占的处理。如果一个更高优先级的异常在前一个异常正在保存状态的过程中出现,
处理器就转去处理这个更高优先级的异常,并开始提取这个异常的向量。状态保存不受迟来异常的影响,因为两个异常
保存的状态相同。从迟来异常的异常处理程序返回时,处理器将遵守正常的末尾连锁规则。
5.9
中断和低功耗模式
PSoC 4 支持通过外设中断来唤醒处于睡眠、深度睡眠或休眠模式的器件。当唤醒源产生中断时,中断控制器(WIC)
产生一个唤醒信号,使设备进入活动模式或复位状态。从睡眠或深度睡眠下唤醒,系统进入活动模式并处理中断服务程
序;从休眠模式下唤醒,系统会进入复位状态。
在 Cortex-M0 中,中断等待指令(WFI)可将程序挂起并进入睡眠、深度睡眠或休眠等电源模式。关于进入/退出低功
耗模式的方法,请参考电源模式章节。根据电源管理模式,固定功能中断源可分为 3 类:
 在活动、睡眠、深度睡眠和休眠模式下都可工作的固定功能中断源(端口中断和低功耗比较器输出中断)。
 仅在活动、睡眠和深度睡眠模式下可工作的固定功能中断源(来自 WDT 和 SCB1/SCB2 的中断信号)。
 仅在活动模式下可工作的固定功能中断源(来自其他所有固定中断源的中断信号)。
在深度睡眠或休眠模式下,DSI 中断源(irq_out[n],见图 5-4)不能唤醒器件;如果通过寄存器
CPUSS_INTR_SELECT 选择了 DSI 中断源,则相应的固定中断源即使被触发,仍然无法唤醒器件。
38
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
中断
异常 - 初始化和配置
5.10
本章节主要介绍初始化和配置异常的步骤。
1. 选择异常向量表:使用异常向量表的第一步是选择存放在 Flash 中还是 SRAM 中的异常向量表。用户可在代码启动
阶段通过配置 VECS_IN_RAM 位(CPUSS_CONFIG[0])来实现。


0:选择存放在 Flash 中的向量表。
1:选择存放在 SRAM 中的向量表。
建议用户选择存放在SRAM中的向量表,这样可以动态地修改异常入口地址。如果选择存放在Flash中的向量表,如需
修改向量表内容,则需要修改Flash中的程序,这样会破坏原来的程序。但是保存在SRAM向量表中的复位异常地址不
可用,因为器件复位后,总是选择保存在Flash向量表中的复位异常地址。
2.配置要使用的异常:用户可按照如下步骤来分别配置需要使用的异常。
a.异常源或中断源配置:设置中断产生条件,配置中断源(见图 5-4)。
b.编写异常处理函数,并将函数地址写入异常向量表(见表 5-1)。
c.设置异常异常优先级,见异常优先级章节。
d.使能异常,见使能/禁止异常章节。
中断和异常寄存器
5.11
寄存器简称
寄存器名称
CM0_ISER
中断设置-使能寄存器
CM0_ICER
中断清除-使能寄存器
CM0_ISPR
中断设置-挂起寄存器
CM0_ICPR
中断清除-挂起寄存器
CM0_IPR
中断优先级寄存器
CM0_ICSR
中断控制状态寄存器
CM0_AIRCR
应用中断和复位控制寄存器
CM0_SCR
系统控制寄存器
CM0_CCR
配置和控制寄存器
CM0_SHPR2
系统处理优先级寄存器 2
CM0_SHPR3
系统处理优先级寄存器 3
CM0_SHCSR
系统处理控制盒状态寄存器
CM0_SYST_CSR
SysTick 控制和状态寄存器
CPUSS_CONFIG
CPU 子系统配置寄存器
CPUSS_SYSREQ
系统请求寄存器
CPUSS_INTR_SELECT
中断多路选择寄存器
UDB_INT_CFG
UDB 子系统中断配置寄存器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
39
中断
5.12


40
中断和异常相关文档
ARMv6-M Architecture Reference Manual – 介绍 ARM Cortex-M0 的架构,其包括指令集、NVIC 架构和 CPU 寄
存器描述。
Cortex™-M0 Devices Generic User Guide – Cortex-M0 的用户使用手册
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
C 部分:存储器系统
这部分包括以下章节:
■
存储器 第 42 页
系统架构:
存储器系统结构框图
SPCIF
FLASH
32 kB
SRAM
4 kB
ROM
4 kB
Read Accelerator
SRAM Controller
ROM Controller
System Interconnect (Single Layer AHB)
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
41
6 存储器
所有 PSoC4 的存储器,包括闪存(Flash)、静态存储器(SRAM) 、只读管理存储器(SROM)以及所有的寄存器都可以被
CPU 和调试系统寻址(大多数情况下)。本章将详述所有存储器和寄存器的地址分布。
6.1
特性
PSoC4 的存储系统具备以下特性:
■
32KB闪存, 4KB 静态存储器(SRAM)
■
4KB 只读管理存储器 (SROM)包含启动和配置信息
■
ARM Cortex-M0 线性寻址空间,包括代码区、静态存储器区、外设区以及中央处理器(CPU)内部寄存器区
■
闪存映射到Cortex-M0 寻址空间的代码区
■
静态存储器映射到Cortex-M0 寻址空间的SRAM 区
■
外设寄存器映射到Cortex-M0的寻址空间的外设区
■
Cortex-M0 私有外设总线区(PPB)包括了在CPU中实现的寄存器,包括嵌套向量中断寄存器、SysTick寄存器以及系统控
制寄存器。更多内容请见第四章:Cortex-M0 CPU。
6.2
工作原理
PSoC4 的内存映射如下表。如需更详细的信息,请参见: PSoC4 寄存器技术参考手册。
32-bit (4GB)的地址空间被分为几个区域,如下表 6-1。注意可以从内存映射的代码区或者静态存储区(SRAM)执行指令。
表 6-1. Cortex-M0 地址分布
地址范围
名称
使用
0x00000000 – 0x1FFFFFFF
代码 (Code)
执行代码区;也可以存放数据;包括从地址 0 开始的异常向量表
0x20000000 – 0x3FFFFFFF
静态寄存区(SRAM)
数据区,也可以存放代码。
0x40000000 – 0x5FFFFFFF
外设 (Peripheral)
所有外设寄存器区;代码不能再此区域执行
0x60000000 – 0xDFFFFFFF
0xE0000000 – 0xE00FFFFF
0xE0100000 – 0xFFFFFFFF
42
不用
私有外设总线区 (PPB)
芯片(Device)
CPU 内核内的外设寄存器
PSoC4 专属空间
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
存储器
PSoC4 的地址映射如下表 6-2。
表 6-2. PSoC4 地址映射
地址范围
使用
0x00000000 – 0x00007FFF
32KB 闪存
0x10000000 – 0x10000FFF
4KB 特权闪存 4KB
0x20000000 – 0x20000FFF
4KB 静态存储器(SRAM)
0x40000000 – 0x4000FFFF
CPU 子系统寄存器
0x40010000 – 0x40010FFF
IO 端口控制(高速 IO 矩阵)寄存器
0x40020000 – 0x4002FFFF
可编程时钟寄存器
0x40040000- -0x4004FFFF
端口寄存器
0x40050000- -0x40050FFF
计时器/计数器/脉宽调制器(TCPWM)寄存器
0x40060000- -0x4006FFFF
串行通讯模块(SCB)寄存器
0x40080000- -0x4008FFFF
电容感应寄存器
0x40090000- -0x4009FFFF
LCD 寄存器
0x400A0000- -0x400AFFFF
低功耗比较器寄存器
0x400B0000- -0x400BFFFF
电源、时钟、重启控制寄存器
0x400F0000- -0x400FFFFF
通用数字模块控制寄存器
0xE0000000 – 0xE00FFFFF
Cortex-M0 私有外设总线寄存器
0xF0000000 – 0xF0000FFF
Coresight 只读寄存器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
43
D 部分:系统资源
这部分包括以下章节:
■
输入/输出系统
第 45 页
■
时钟系统 第 54 页
■
电源和电源监测 第 60 页
■
运行模式 第 66 页
■
看门狗定时器 第 73 页
■
复位 第 76 页
■
器件安全 第 79 页
系统架构:
系统资源结构框图
Clock
Clock Control
WDT
IMO
ILO
Reset
Reset Control
XRES
Peripheral Interconnect (MMIO)
Power
Sleep Control
WIC
POR
LVD
REF
BOD
PWRSYS
NVLatches
PCLK
System Resources
Test
DFT Logic
DFT Analog
44
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
7 输入/输出系统
输入/输出(I/O)系统为 CPU 内核与外部设备通讯提供了接口。PSoC®4 器件具有很高的灵活性,其输入/输出系统可
以将一些信号路由至任何管脚,从而简化了电路设计和 PCB 布线。一些关键模块具有专用管脚和有限的路由能力,但
建议用户使用专用管脚以提高性能。在 PSoC 器件中,I/O 管脚分为两类:通用输入输出(GPIO)和特殊输入输出
(SIO);但在 PSoC 4 中,没有 SIO,所以 I/O 仅指 GPIO。
在 PSoC4 中,GPIO 被分配到不同的端口,每个端口最多包含 8 个管脚。一些具有特殊功能的 GPIO 是复用管脚,用
户可通过寄存器来配置管脚的功能。所有 I/O 管脚不但可作为 CPU 和数字外设的数字输入和输出端口,还可以产生中
断。并且每个 GPIO 管脚均可被用于模拟输入、CapSense 和段式 LCD 直接驱动。
7.1
特性
PSoC 4 的 I/O 系统具有如下特性:








支持模拟/数字输入输出
支持段式 LCD 直接驱动
支持 CapSense
灌电流可达 8 mA,拉电流可达 4 mA
独立的端口读寄存器(PRTx_PS)和写寄存器(PRTx_DR)
支持边沿触发中断,包括上升沿、下降沿和双边沿等触发方式。
摆率可控
可选择输入阈值:CMOS 输入或 LVTTL 输入
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
45
输入/输出系统
7.2
GPIO 模块框图
图 7-1 描述了驱动 GPIO 的各种模块和信号。
图 7-1. GPIO 模块框图
Digital Input Path
Naming Convention
PRT[x]PC2
‘x’ = Port Number
PRT[x]PS
Digital System Input
PICU[x]INTCFG
PICU[x]INTSTAT
Pin Interrupt Signal
Interrupt
Logic
Input Buffer Disable
Digital Output Path
PRT[x]SLW
HSIOM
SEL[3:0]
GPIO
DSI_DSI
GPIO_DSI
DSI_GPIO
ACT_0
ACT_1
ACT_2
ACT_3
LCD_COM
LCD_SEG
DPSLP_0
DPSLP_1
Vddio
Vddio
Vddio
In
Digital
Loigic
Slew
Cntl
PIN
PRT[x]DM2
PRT[x]DM1
PRT[x]DM0
OUTPUT ENABLE
OE
Analog
Dedicated Analog Resources (CTBm, LPCOMP, SAR ADC)
SEL[3:0]
Switches
AMUXBUSA (CapSense)
AMUXBUSB (Cap Shield)
46
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
输入/输出系统
7.3
I/O 驱动模式
PSoC 4 的每个 GPIO 可被配置成表 7-1 中 8 种驱动模
式的任何一种。图 7-2 是对每种模式管脚视图的简单
描述。
用户可以通过寄存器 PRTx_PC 和寄存器 PRTx_PC2
来配置 PSoC 4 的管脚。每个端口均有对应的寄存器
PRTx_PC(见表 7-2)和 PRTx_PC2(见表 7-3)。
图 7-2. GPIO 驱动模式图
0.
0. 高阻抗(模拟)
高阻(模拟)
1. 高阻(数字)
高阻抗(数字)
2. 电阻上拉
3. 电阻下拉
4.
4. 漏极开路,
漏极开路,
驱动低
驱动低
5. 漏极开路,
驱动高
驱动高
6.
6. 增强驱动
增强型驱动
7. 电阻上拉和下拉
表 7-1 GPIO 的 8 种驱动模式(x 表示端口编号)
编号
驱动模式
DM[3y+2 : 3y]
(PRTx_PC[3y+2 : 3y])
y: 管脚编号 (0 ≤ y ≤ 7)
Data = 1
(向寄存器 PRTx_DR 中相
应位写 1)
Data = 0
(向寄存器 PRTx_DR 中相
应位写 0)
0
高阻(模拟)
0
高阻(High Z)
高阻(High Z)
1
高阻(数字)
1
高阻(High Z)
高阻(High Z)
2
电阻上拉
2
1(5k 欧姆上拉电阻)
0(增强驱动型)
3
电阻下拉
3
1(增强驱动型)
0(5k 欧姆下拉电阻)
4
漏极开路,驱动低
4
高阻(High Z)
0(增强驱动型)
5
漏极开路,驱动高
5
1(增强驱动型)
高阻(High Z)
6
增强驱动
6
1(增强驱动型)
0(增强驱动型)
7
电阻上拉和下拉
7
1(5k 欧姆上拉电阻)
0(5k 欧姆下拉电阻)
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
47
输入/输出系统
表 7-2 寄存器 PRTx_PC
PRTx_PC 的位
描述
DM (PRTx_PC[23:0])
配置每个 GPIO 管脚的驱动模式。每 3 个位对应一个管脚:DM[2..0]对应管脚 0;DM[5..3]对应
管脚 1,…,DM[23..21]对用管脚 7
VTRIP_SEL
(PRTx_PC[24])
设置管脚的输入缓冲器电压是 CMOS 电平还是 LVTTL 电平(详情请见 7.5 CMOS 和 LVTTL 电
平控制)。
SLOW (PRTx_PC[25])
控制每个端口的输出摆率(详情请见 7.4 摆率控制)
:
0: 快速。
1: 慢速。
表 7-3 寄存器 PRTx_PC2
PRTx_PC2 的位
描述
INP_DIS (PRTx_PC2[7:0])
每个位对应端口的一个管脚,可用来禁用管脚的输入缓冲器,其与 DM(PRTx_PC[23:0])相对
独立。
当在某管脚上传输模拟信号,并且管脚被配置为非高阻模拟模式做为数字输出时,此位必须设置
为 1,禁用输入缓冲器。
7.3.1 高阻模拟模式
高阻模拟模式(High-impedance Analog mode)是
GPIO 管脚的默认复位状态;在此模式下,数字输出驱
动器和数字输入缓冲器均被关闭。从而可防止管脚上的
浮动电压的电流流入到 I/O 数字输入缓冲器中。此驱动
模式适用于有浮动电压或支持模拟电压的 GPIO 管脚,
但不能用于数字输入管脚。如果读取高阻模拟管脚的状
态值,则返回值总是 0x00。
如需使器件的电流最低,配置为驱动模式为 0、2~7
(见表 7-1)的 GPIO 不能由外部驱动,而配置为驱动
模式 1(见表 7-1)的 GPIO 应该由外部的 Vddd 或 Vssd
驱动。
7.3.2 高阻数字模式
高阻数字模式(High-impedance Digital mode)是常
用的的高阻(High Z)状态,常被用于数字输入管脚。
在这种模式下,被使能的输入缓冲器用于数字信号输入。
(Open Drain,Drives Low mode)的管脚与之相反
(见图 7-2)。配置为此种模式的管脚可用于数字输入
和输出,比如用于驱动 I2C 总线信号线。
7.3.5 增强驱动模式
增强驱动模式(Strong Drive mode)是管脚通用的数
字输出模式。配置为此模式的管脚在输出高电平和低电
平时均提供了一个增强性 CMOS 的输出驱动。配置为
增强驱动模式的管脚常被用于驱动数字输出信号或外部
的场效应晶体管,但不可被用于常用电路的数字输入。
7.3.6 电阻上拉和下拉模式
电阻上拉和下拉模式(Resistive Pull-Up and PullDown mode)是一个特殊模式,其与电阻上拉模式和
电阻下拉模式类似,但是配置为此模式的管脚无论输出
高还是低总是串联一个电阻。当管脚输出高电平时,使
用上拉电阻;当输出低电平时,使用下拉电阻。当挂载
的总线在其他设备驱动下可能导致短路时,可将管脚配
置为此模式。
7.3.3 电阻上拉或电阻下拉模式
配置为电阻上拉模式(Resistive Pull-Up mode)的管
脚在输出高电平时串联一个上拉电阻,在输出低电平时
是增强驱动型;配置为电阻下拉模式(Resistive PullDown mode)的管脚与之相反(见图 7-2)。配置为
此种模式的管脚可用于数字输入和输出,比如对机械开
关控制的应用。如需对配置为电阻上拉模式的管脚进行
上拉,则必须向数据寄存器(PRTx_DR)的相应位写
1。如需对配置为电阻下拉模式的管脚进行下拉,则必
须向数据寄存器(PRTx_DR)的相应位写 0。
7.3.4 漏极开路驱动高和漏极开路驱动低
配置为漏极开路驱动高模式(Open Drain,Drives
High mode)的管脚在输出为高电平时是增强驱动型,
在输出低电平时是高阻态;配置为漏极开路驱动低模式
48
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
输入/输出系统
7.4
摆率控制
管脚的摆率控制是针对增强驱动模式,而不是电阻驱动
模式,其分为快速和慢速摆率。其中快速摆率应用于 1
MHz 到 33 MHz 间的信号,慢速摆率应用于小于 1
MHz 的信号。为了降低电磁干扰(EMI),对于翻转
速度要求不高的信号(摆率小于 1 MHz),可以选择
使用慢速摆率。
端口的默认摆率为快速摆率,用户可通过 SLOW 位
(PRTx_PC[25])重新配置每个端口的摆率。
7.5
CMOS 和 LVTTL 电平控制
每个 GPIO 管脚的输入缓冲器电压可工作于两种状态:
CMOS 电平和 LVTTL 电平。其可通过 VTRIP_SEL 位
(PRTx_PC[24])来配置。
用户也可通过寄存器 PRTx_PC2 来禁用输入缓冲器,
其独立于管脚驱动模式(见表 7-3)。
7.6
的多路复用器。HSIOM 不但可以连接各种模拟信号
(如来自 AMUXBUS 和 CapSense 的信号),还可
以连接数字信号(如 TCPWM、SCB 或 LCD 控制
器);此外,它还支持活动/深度睡眠模式下的管脚
(见表 7-6)。
注意:端口 4 对 DSI 路由有限制,所以 DSI 路由配置
对端口 4 无效,详情请见 7.17 端口 4 的使用限制。
32 位寄存器 HSIOM_PORT_SELx 中的每 4 个位对应
一个管脚,可为每个管脚提供 16 种不同的连接功能选
择(见表 7-4)。其连接的模块包括:








GPIO
固定功能外设
LCD 控制器
串行调试(SWD)
数字系统互连接口(DSI)
CapSense 控制器
外部时钟输入
WAKEUP 管脚
部分模块,如 SCB、SWD 等,有专用管脚,见表 7-5。
在应用设计过程中,用户可使用专用管脚以提高性能。
具体管脚定义请见器件数据手册。
高速输入输出矩阵
高速输入输出矩阵(High Speed IO Matrix,HSIOM)
是一个高速矩阵,其中有一个可用于不同的功耗模式
表 7-4 HSIOM 端口配置
HSIOM_PORT_SELx(x:端口编号; y:管脚编号)
位
名称
数值
SEL'y'
描述
选择管脚 y。
GPIO
0
管脚由软件控制或连接到专用硬件模块
GPIO_DSI
1
管脚输出由软件控制,但输出使能(OE)是来自 DSI 的信号控制
DSI_DSI
2
管脚输出和输出使能(OE)均是来自 DSI 的信号控制
DSI_GPIO
3
管脚输出是由来自 DSI 的信号控制,但是输出使能(OE)由软件控制
CSD_SENSE
4
管脚作为 CapSense 的 sense 管脚(高阻模拟模式)
CSD_SHIELD
5
管脚作为 CapSense 的 shield 管脚(高阻模拟模式)
AMUXA
6
管脚被连接到 AMUXBUS_A
AMUXB
7
管脚被连接到 AMUXBUS_B。这种模式也可用于为 CapSense 管脚充电。当用户
通过寄存器 CSD_CONTROL 使能了对 CapSense 管脚的充电功能时,数字 IO
驱动器被连接到信号 csd_charge(同时该管脚仍然被连接到 AMUXBUS_B)
ACT_0
8
活动模式源的专用管脚 #0(见表 7-6)
ACT_1
9
活动模式源的专用管脚 #1(见表 7-6)
ACT_2
10
活动模式源的专用管脚 #2(保留)
ACT_3
11
活动模式源的专用管脚 #3(保留)
LCD_COM
12
该管脚是段式 LCD 的公共端(COM)管脚。当 LCD 模块被使能并正确地配置
后,此管脚在深度睡眠模式下仍可用。
LCD_SEG
13
该管脚是段式 LCD 的段(SEG)管脚。当 LCD 模块被使能并正确地配置后,此
管脚在深度睡眠模式下仍可用。
DPSLP_0
14
睡眠模式源的专用管脚 #0
DPSLP_1
15
睡眠模式源的专用管脚 #1
4y+3 : 4y
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
49
输入/输出系统
表 7-5. 专用管脚
功能模块
信号名称
信号类型
管脚编号
备注
外部参考电压
ext_vref
模拟
P1[7]
为 SAR ADC 提供外部参考电压
运算放大器 0
ctb.oa0.out
模拟
P1[2]
CTBm 模块运算放大器 0 的输出
运算放大器 1
ctb.oa1.out
模拟
P1[3]
CTBm 模块运算放大器 1 的输出
外部时钟
exe_clk
数字
P0[6]
提供可选择的外部时钟,用来代替 IMO。
SCL_0
数字
P4[0]
SDA_0
数字
P4[1]
SCL_1
数字
P0[4]/P3[0]
任选其一
SDA_1
数字
P0[5]/P3[1]
任选其一
MOSI_0
数字
P4[0]
MISO_0
数字
P4[1]
CLK_0
数字
P4[2]
SSEL0_0
数字
P4[3]
SSEL1_0
数字
P0[0]
SSEL2_0
数字
P0[1]
SSEL3_0
数字
P0[2]
MOSI_1
数字
P0[4] / P3[0]
任选其一
MISO_1
数字
P0[5] / P3[1]
任选其一
CLK_1
数字
P0[6] / P3[2]
任选其一
SSEL0_0
数字
P0[7] / P3[3]
任选其一
SSEL1_1
数字
P3[4]
SSEL2_2
数字
P3[5]
SSEL3_3
数字
P3[6]
IO
数字
P3[2]
CLK
数字
P3[3]
WAKEUP
数字
P0[7]
I2C
SPI
SWD
WAKEUP
7.7
模拟管脚
外部模拟信号仅可通过 GPIO 管脚与 PSoC 内核进行
通讯。在通常的应用中,用户应该将模拟 I/O 管脚配置
为高阻模拟驱动模式,在此模式下,输入缓冲器被禁用。
此外,用户也可通过配置寄存器 PRTx_PC2 来禁用管
脚的输入缓冲器。如果某 GPIO 管脚被同时用作数字输
出和模拟输入/输出时,输入缓冲器应该被禁用。管脚
的功能选择和驱动模式配置见表 7-4 和表 7-1。
模拟 GPIO 管脚可通过 AMUXBUS_A/AMUXBUS_B
连接至相应模拟模块。但部分模拟模块(SAR ADC、
CTBm 和低功耗比较器)具有专用管脚(见表 7-5),
其经过内部电阻,直接连接至专用管脚(见图 7-1)。
7.8
段式 LCD 驱动
每个 GPIO 管脚均具有段式 LCD 驱动能力。用户可通
过寄存器 HSIOM_PORT_SELx 来配置该管脚为 LCD
的公共端管脚还是段驱动管脚(见表 7-4),从而驱动
LCD 显示。如需 LCD 的详细信息,请参考 LCD 章节
7.9
CapSense
CapSense 为模拟模块,用户可以使用任意一个 GPIO
管脚作为 CapSense 的管脚,来创建按钮或滑条(见
表 7-4)。如需 CapSense 的详细信息,请参考
CapSense 章节。
建议用户在设计时优先使用专用管脚来提高性能。
50
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
输入/输出系统
7.10
7.13
重新配置 GPIO
用户可通过寄存器 HSIOM_PORT_SELx 和 PRTx_PC
来重新配置 GPIO 功能(x:端口编号)。但必须注意
的是,当器件管脚被直接连接到外部数字外设时,在管
脚的重新配置期间, 管脚必须保持当前配置状态。如
果管脚由寄存器控制、驱动,则在配置过程中,管脚状
态会自动被保持。但是,如果 GPIO 管脚由 DSI 控制、
驱动;则在重新配置前,管脚的当前配置值必须被读、
并写入寄存器 PRTx_DR 中。用户可通过如下步骤来保
持管脚的当前配置状态:
1. 软件读 GPIO 管脚状态寄存器 PRTx_PS。
3. 配置寄存器 HSIOM_PORT_SELx 的相应位,使该
管脚由寄存器控制、驱动。
4. 修改相应寄存器,重新配置管脚状态。
通过如上步骤,用户可安全地重新配置器件管脚状态。
当重现配置完成时,通过修改寄存器 HSIOM_PORT_
SELx,使该管脚再由 DSI 控制、驱动。
上电启动时 GPIO 状态
所有 I/O 在上电启动时被设置为高阻模拟驱动模式,输
入缓冲器被禁用。当上电启动结束后,GPIO 的驱动模
式可以通过相应寄存器来配置。
7.12
在深度睡眠模式下(见表 7-4),仅有被连接到仍然处
于活动状态模块的专用管脚可以正常工作。
在进入休眠和停止模式前,建议用户通过寄存器将
GPIO 输出设置为冻结(Frozen)状态;则在休眠或停
止模式下,GPIO 的配置、模式及状态处于锁存状态。
在器件进入活动模式前,无法改变 GPIO 的状态
如需电源模式的详细信息,请参考电源模式章节。
7.14
端口中断控制器模块
本节将介绍 PSoC 4 端口中断控制器模块(PICU)。
用户可以通过寄存器 PRTx_INTCFG 和 PRTx_INTSTAT
来分别配置中断和读取中断状态。
2. 将此值写入寄存器 PRTx_DR。
7.11
低功耗模式下的 GPIO 状态
7.14.1 特性
端口中断控制器模块具有如下特性:
 每个端口的 8 个管脚分别具有独立的端口中断控制
器,并与同一个中断向量关联。
 支持上升沿/下降沿/双边沿中断
 每个管脚中断可被独立的使能或禁止
 可向中断控制器发送中断请求(PIRQ)信号。
7.14.2 端口中断控制器框图
每个端口都有独立的中断请求和相应的中断向量。此外,
每个管脚均还可被选择作为通过 50ns 干扰过滤器的第
9 个中断,见图 7-3。
睡眠模式下的 GPIO 状态
在 CPU 进入睡眠模式后,GPIO 仍保持当前的状态;
并且所有 GPIO 均处于活动模式,可以被活动的外设
驱动。
图 7-3. 管脚中断框图
50ns Glitch filter
Edge Detector
Pin 0
Edge Detector
Pin 1
Edge Detector
Pin 2
Edge Detector
Pin 3
Edge Detector
Pin 4
Edge Detector
Pin 5
Edge Detector
Pin 6
Edge Detector
Pin 7
Edge Detector
Port_irq
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
51
输入/输出系统
到读取完成后才有效。但是其他没有挂起中断的管脚,
其上的中断不会被阻塞。
7.14.3 功能和配置
通过寄存器 PRTx_INTCFG,用户可以将端口的每个管
脚配置为以下 3 种不同的边沿中断触发方式:




禁用
上升沿
下降沿
双边沿 (上升沿或下降)
此外,当读寄存器 PRTx_INSTAT 和此端口的中断同时
发生时,可能导致无法检测到中断。所以,在使用端口
中断时,建议用户仅在相应的中断服务程序中读取端口
中断状态寄存器,以防止丢失端口中断。
7.15
注意:端口管脚不支持电平中断。
同时也可以选择其中一个管脚作为第 9 个中断(信号会
经过 50ns 干扰滤波器,见图 7-3)。
当一个端口中断被某个使能管脚上的信号改变触发时,
软件可通过读取寄存器 PRTx_INSTAT 来判断具体由那
个管脚触发的中断。建议用户使用如下步骤来编写中断
服务程序:
1. 当所配置的管脚边沿触发模式发生时,端口中断状态
寄存器的相应位会被置 1,一个中断请求会被发送至
中断控制器。
2. 包含 1 的状态位在读取后会被清除。状态寄存器的其
它位仍然可以响应进来的中断源。
3. 如果一个中断处于挂起状态,当软件读取中断状态寄
存器时,即将进入同一个管脚上的中断将被阻塞,直
数字输入和输出同步
对于数字输入和输出信号,GPIO 支持使用内部时钟或数
字信号对其进行时钟同步。默认情况下,使用 HFCLK 来
同步数字输入和输出信号。
此功能是通过 UDB 端口调试器和 GPIO 的相互结合来完
成的,详情请 参考 16.3 端口适配模块。
7.16
管脚
活动和深度睡眠模式下专用
正如在 7.6 高速输入输出矩阵所介绍的,每个 IO 可配置
为 16 种不同功能,包括 4 个活动模式源(活动模式源的
专用管脚 #2/#3 在 PSoC 4 中被保留)和 2 个深度睡眠
模式源专用管脚,见表 7-6。关于活动模式和深度睡眠模
式的详细介绍,请参考电源模式章节。
表 7-6 活动模式和深度睡眠模式下的专用管脚
管脚
活动模式源的专用管脚 #0*
活动模式源的专用管脚 #1
睡眠模式源的专用管脚 #0
睡眠模式源的专用管脚 #1
P0[0]
scb0_spi_ssel_1
P0[1]
scb0_spi_ssel_2
P0[2]
scb0_spi_ssel_3
P0[4]
P0[5]
P0[6]
scb1_uart_rx
scb1_i2c_scl
scb1_spi_mosi
scb1_uart_tx
scb1_i2c_sda
scb1_spi_miso
ext_clk
scb1_spi_clk
P0[7]
wakeup
scb1_spi_ssel_0
scb1_uart_rx
scb1_i2c_scl
scb1_spi_mosi
scb1_uart_tx
scb1_i2c_sda
scb1_spi_miso
P1[0]
tcpwm2_p
P1[1]
tcpwm2_n
P1[2]
tcpwm3_p
P1[3]
tcpwm3_n
P2[4]
tcpwm0_p
P2[5]
tcpwm0_n
P2[6]
tcpwm1_p
P2[7]
tcpwm1_n
P3[0]
tcpwm0_p
P3[1]
tcpwm0_n
P3[2]
tcpwm1_p
swd_io
scb1_spi_clk
P3[3]
tcpwm1_n
swd_clk
scb1_spi_ssel_0
P3[4]
tcpwm2_p
scb1_spi_ssel_1
P3[5]
tcpwm2_n
scb1_spi_ssel_2
P3[6]
tcpwm3_p
scb1_spi_ssel_3
52
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
输入/输出系统
管脚
活动模式源的专用管脚 #0*
活动模式源的专用管脚 #1
睡眠模式源的专用管脚 #0
睡眠模式源的专用管脚 #1
P3[7]
P4[0]
tcpwm3_n
scb0_uart_rx
scb0_i2c_scl
scb0_spi_mosi
P4[1]
scb0_uart_tx
scb0_i2c_sda
scb0_spi_miso
P4[2]
scb0_spi_clk
P4[3]
scb0_spi_ssel_0
*通过 DSI,TCPWM 可以路由至除端口 4 外的任何管脚,但是仍建议用户使用上表中的管脚,以提高性能。
端口 4 的使用限制
7.17
因端口 4 没有专用的端口适配器(见 16.3 端口适配模块),所以其不能通过 DSI 被路由。但是通过 HSIOM,端口 4
仍然可以用作软件可控的 GPIO、LCD_COM、LCD_SEG 或连接到 SCB 模块。
寄存器列表
7.18
名称
数量
描述
PRTx_DR
4
端口输出数据寄存器
PRTx_PS
4
端口管脚状态寄存器,用来读取 GPIO 的当前状态
PRTx_PC
4
端口配置寄存器,用来配置驱动模式、输入阈值和摆率
PRTx_PC2
4
配置 GPIO 输入缓冲器的端口配置寄存器
PRTx_INTCFG
4
端口中断配置寄存器
PRTx_INTSTAT
4
端口中断状态寄存器
HSIOM_PORT_SELx
4
HSIOM 端口选择寄存器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
53
8 时钟系统
PSoC 4 的时钟系统主要特性如下:
■
两个内部时钟源:
内部主振荡器(IMO):3-48MHz 可配置,配置步长为 1MHz,经过校准调整,精度为+/-2%;
❒
❒
■
■
■
■
■
■
内部低速振荡器(ILO):32KHz,进过校准调整,精度为+/-60%。
可选择外供时钟源(EXTCLK),通过一个 GPIO 的管脚输入,具体管脚信息请查询相关器件手册。外供时钟的频
率范围是 1-24MHz。
高频时钟(HFCLK)由 IMO 或者外供时钟源分频得到;
低频时钟(LFCLK)由 ILO 获得;
系统时钟 SYSCLK 由专用的预分频器对 HFCLK 分频后获得;
四组时钟分频器,每组分频器含三个可级联的 16-bit 分频器,所有的外设时钟由这些分频器提供;
16 个数字或者模拟的外设时钟;
8.1
模块框图
图 8-1 给出了 PSoC 4 的时钟系统框图。
图 8-1 时钟系统框图
IMO
HFCLK
Prescaler
SYCLK
EXTCLK
Peripheral
Divider 0
ILO
LFCLK
...
Peripheral
Divider 1
Peripheral
Clock 0
x16
Peripheral
Divider 2
Peripheral
Divider 3
框图中的左半部分给出了三个时钟源,包括两个内部的时钟源 IMO 和 ILO,以及一个通过 GPIO 管脚接入的外供时钟
源 EXTCLK,一个多路器被用于选择 IMO 或者 EXTCLK 作为内部的高频时钟 HFCLK。右半部分给出了时钟输出的情
况,SYSCLK 和各个外设时钟通过分频器输出。
54
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
时钟系统
8.2
时钟源
■
8.2.1 内部主振荡器(IMO)
IMO 可以输出一个稳定的时钟,不需要外接任何外部器
件 。 用 户 可 以 配 置 和 调 整 该 时 钟 的 频 率 , 范 围 是 348MHz,步长为 1MHz。在制造过程中,每个器件都会
进行 IMO 调整,以达到器件手册的要求,相应的调整参
数被存放在 SFLASH 中。
8.2.1.1 启动过程中的 IMO 调整
启动开始阶段,IMO 初始频率为 24MHz。在启动过程中
的后续阶段,引导程序从 SFLASH 中获取调整参数,将
IMO 校准到器件手册中的精度。
用户对 IMO 的调整
如果用户需要对 IMO 进行调整,需要进行以下的操作:
■
选择 IMO 的频率:配置 FREQ
(CLK_IMO_TRIM2[5:0]);
■
对 IMO 进行绝对频率调整:根据选择的 IMO 频率,
将 SFLASH 中相应的绝对频率调整参数
IMO_TRIM[x](x = 3,4,5,…,48)读入寄存器
OFFSET(CLK_IMO_TRIM1[7:0]);
调整 IMO 的基准源(工作原理请参见“精确基准源”章
节):根据选择的 IMO 频率,相应的将 SFLASH 中
电流基准源调整参数 IMO_ABSx(x = 0,1,2,3)读入
寄存器 ABS_TRIM_IMO(PWR_BG_TRIM4[5:0]);
温度补偿系数 IMO_TMPCOx(x = 0,1,2,3)读入寄
存器 TMPCO_TRIM_IMO
(PWR_BG_TRIM4[5:0]);
注意:如果 IMO 的频率在调整过程中超过工作频率的上
限 48MHz , 器 件 存 在 系 统 崩 溃 的 风 险 。 当 IMO 从
48MHz 调整到较低的频率时, FREQ 配置应放在第一个
步骤;当 IMO 从较低的频率调整到 48MHz 时,FREQ
配置应放在最后一个步骤。这样可以规避上述的风险。
8.2.1.2 IMO 的频谱扩展
通过频谱扩展,能够降低 IMO 的输出在中心频点的能量,
从而降低器件的 EMI 水平。在频谱扩展时,IMO 的频率
在一定范围内按照一定的模式变化。变化模式由寄存器
SS_MODE(CLK_IMO_SPREAD[31:30])决定,具体
见表 8-1;频谱扩展范围由寄存器 SS_RANGE
(CLK_IMO_SPREAD[29:28])决定,具体见表 8-2。
表 8-1 IMO 频谱扩展的模式配置
寄存器名
SS_MODE(CLK_IMO_SPREAD[31:30])
描述
IMO扩频模式:
0:禁止IMO扩频;
1:IMO的频率在扩频范围内以三角曲线变化;
2:IMO的频率在扩频范围内以伪随机的方式变化;
3:IMO的频率在扩频范围内的变化由DSI信号控制;
表 8-2 IMO 频谱扩展的范围配置
寄存器名
SS_RANGE (CLK_IMO_SPREAD[29:28])
描述
IMO扩频范围:
0:扩频范围为0…-1%
1:扩频范围为0…-2%
2:扩频范围为0…-4%
3:预留,未使用
8.2.2 内部低速振荡器(ILO)
PSoC 4 内部提供的低速振荡器可以输出固定的 32KHz
的时钟,不需要外接任何的器件。相对于 IMO,ILO 具
有较低的功耗,可以在除休眠和停止以外的电源模式中
工作,但是精度也较低。ILO 输出的时钟在 PSoC 4 内
部 被 称 为 LFCLK 。 通 过 配 置 寄 存 器 ENABLE
(CLK_ILO_CONFIG[31]),可以使能或者禁止 ILO。
8.2.3 外部时钟(EXTCLK)
通过 PSoC 4 的一个 GPIO 管脚,可以输入一个外部时
EXTCLK 能够替代 IMO 作为内部高频时钟(HFCLK)
的时钟源。PSoC 4 在启动过程中,总是使用内部时钟
源 IMO,用户可以在启动之后将时钟源切换为 EXTCLK。
8.3
时钟分布
PSoC 4 内部的时钟分布情况可以从图 8-2 中描述的模块
框图中得到。用户可以配置的时钟分布选项如下:



HFCLK 时钟输入源的选择;
SYSCLK 分频器的配置;
外设时钟分频器的配置;
钟(EXTCLK),它的频率范围是 0MHz 到 48MHz。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
55
时钟系统
图 8-2 Clock Distribution System
IMO
HFCLK
Prescaler
SYSCLK
EXTCLK
ILO
Divider Bank 0
(Integral)
LFCLK
Divider
0-A
Divider
0-B
Divider
0-C
Divider Bank 1
(Integral)
Divider
1-A
Divider
1-B
Divider
1-C
16
Divider Bank 2
(Integral)
Peripheral Clock 0
Peripheral Clock 1
.
.
.
Peripheral Clock 15
Divider
2-A
Divider
2-B
Divider
2-C
Divider Bank 3
(Fractional)
Divider
3-A
Divider
3-B
Divider
3-C
8.3.1 HFCLK 输入时钟源的选择
在 PSoC 4 中,内部高频时钟由两个源可供选择,一个是 IMO,另一个是 EXTCLK。通过配置寄存器 DIRECT_SEL
(CLK_SELECT[2:0])可以进行选择,具体如表 8-3 所示。
表 8-3 HFCLK 输入时钟源的选择
寄存器名
描述
HFCLK输入时钟源的选择
0:IMO作为HFCLK的时钟源
DIRECT_SEL CLK_SELECT[2:0]
1:EXTCLK作为HFCLK的时钟源
2-7:预留,未被使用。
56
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
时钟系统
8.3.2 SYSCLK 分频器的配置
时钟源输入的 HFCLK 经过分频器可以得到系统时钟 SYSCLK。SYSCLK 的时钟频率需要大于或者等于各个外设的时
钟频率。通过配置寄存器 SYSCLK_DIV(CLK_SELECT[21:19]),选择该分频器的分频比,具体如表 8-4。
表 8-4 SYSCLK Prescaler Divide Value Bits SYSCLK_DIV
寄存器名
描述
0:SYSCLK = HFCLK
1:SYSCLK = HFCLK / 2
2:SYSCLK = HFCLK / 4
3:SYSCLK = HFCLK / 8
4:SYSCLK = HFCLK / 16
5:SYSCLK = HFCLK / 32
6:SYSCLK = HFCLK / 64
7:SYSCLK = HFCLK / 128
SYSCLK_DIV(CLK_SELECT[21:19])
8.3.3 外设时钟分频器的设置
PSoC 4 共有四组分频器,每组包含 3 个 16-bit 的分频器(A,B 和 C),可级联使用,它的模块框图如图 8-3 所示。
四组分频器中,三组是整数分频器,另一组是分数分频器。PSoC 4 所有的外设时钟,包括模拟时钟与数字时钟,均由
这四组分频器输出。
图 8-3 外设时钟分频器的模块框图
HFCLK
Divider N-A
÷(1..65,536)
Divider N-B
÷(1..65,536)
Divider N-C
÷(1..65,536)
...
x4
对于整数分频器组,通过设置寄存器 DIVIDER_A,DIVIDER_B 和 DIVIDER_C ,可以选择分频比。对于分数分频器组,
还需要配置额外的寄存器 FRAC_A,FRAC_B 和 FRAC_C。通过配置寄存器 CASCADE_x-1_x,可以控制相邻的分频
器是否进行级联。配置寄存器 ENABLE_x 可以使能或者禁止相应的寄存器。(x = A,B 或 C)。具体寄存器如表 8-5
和表 8-6。
表 8-5 整数分频器组中分频器的配置
比特位
寄存器名
15:0
DIVIDER_x
30
CASCADE_x-1_x
31
ENABLE_x
描述
分频器组中分频器x的整数分频系数
输出频率=输入频率/ (DIVIDER_x +1)
级联控制
0:分频器x的输入为HFCLK
1:分频器x的输入为分频器x-1的输出
注意:对于分频器A,该寄存器位无效。分频器A的输入时钟为HFCLK
0:禁止分频器x;
1:使能分频器x。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
57
时钟系统
表 8-6 分数分频器组中分频器的配置
比特位
寄存器名
15:0
DIVIDER_x
20:16
FRAC_x
30
CASCADE_x-1_x
31
ENABLE_x
描述
分频器组中分频器x的整数分频系数
输出频率=输入频率/ (DIVIDER_x +1 + FRAC_x/32)
分频器组中分频器x的分数分频系数
输出频率=输入频率/ (DIVIDER_x +1 + FRAC_x/32)
级联控制
0:分频器x的输入为HFCLK
1:分频器x的输入为分频器x-1的输出
注意:对于分频器A,该寄存器位无效。分频器A的输入时钟为HFCLK
0:禁止分频器x;
1:使能分频器x。
8.3.4 外设时钟分配
如图 8-1 右半部分所示,分频器组通过多路器分配,为 PSoC 4 提供 16 个外设时钟,包括 UDB、SAR ADC、CSD、
TCPWM、LCD 等模块的时钟,如表 8-7 所列。
表 8-7 外设时钟列表
外设时钟号
外设名
0
IMO (SS)
1
SARPUMP
2
SCB0
3
SCB1
4
LCD
5
CSD (1)
6
CSD (2)
7
SAR
8
TCPWM0
9
TCPWM1
10
TCPWM2
11
TCPWM3
12
UDB0
13
UDB1
14
UDB2
15
UDB3
分频器可以提供两种形式的时钟:门控时钟(clk_gated)
和分频时钟(clk_divided)。门控时钟的功耗较低,但
是占空比无法保证,在一个门控周期中,高脉冲仅持续
一个源时钟(clk_hf)周期;分频时钟相对前者功耗较高,
但占空比能被保持在最接近 50%的一个值(偶数分频时,
58
占空比等于 50%;奇数分频时,一个周期中的高脉冲持
续时间比低脉冲持续时间少一个源时钟周期),如图 8-4
所示。在某些应用中,需要同时用到时钟的上升沿与下
降沿,这时推荐使用分频时钟,因为门控时钟的上升沿
和下降沿的间隔太短,容易引起时序问题。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
时钟系统
图 8-4 门控时钟与分频时钟
PSoC 4 提供 16 组寄存器,如表 8-8。通过配置它,控制 16 个外设时钟分别由哪个分频器组的哪个分频器输出。
表 8-8 外设时钟选择(N = 0,1,2 或 3)
比特位
寄存器名
3:0
DIVIDER_N
5:4
DIVIDER_ABC
描述
选择分频器组
0:分频器组0;
1:分频器组1;
2:分频器组2;
3:分频器组3;
选择分频器组中的分频器
0:禁止该外设时钟;
1:分频器A
2:分频器B
3:分频器C
SAR ADC 的时钟与其他外设的时钟一样来自于外设分
频器, 但不同的是,它 会在时钟沿 上做一些处理。
SAR ADC 是一个数模混合模块,它会产生两个时钟分
别供给模拟采样电路和数字逻辑电路。模拟时钟和数字
时钟的上升沿存在一定的偏移,这能够保证模拟电路的
抗干扰能力,提高器件的性能。
8.4
低功耗电源模式下的操作
PSoC 4 中,IMO、EXTCLK,HFCLK、SYSCLK 和所
有的外设时钟仅在活动和睡眠电源模式下工作;ILO 和
LFCLK 除活动和睡眠外,还能够在深度睡眠的电源模
式下工作。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
59
9 电源和电源监测
PSoC 4 可以在 1.71-5.5V 的外部电源供电时工作。支持一下两种工作电压范围:
■
■
1.80V-5.50V 到内部电压调节器
1.71V-1.89V 直接输入
芯片内部有四个电压调节器(降压),可以在不同的电源模式下载给内部的电路供电,包括:活动状态电压调节器、低
噪声电压调节器、深度睡眠状态电压调节器和休眠状态电压调节器。
9.1
系统框图
图 9-1 电源系统框图
60
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
电源和电源监测
由图 9-1 可见,电源系统有独立的数字电源( Vddd )和模
拟电源( Vdda ) 输入引脚,同样也有独立的 Vssd 和
Vssa 引脚。在一些较小的封装型号中,数字电源和模拟
电源在内部短路到一起,共用一个引脚(Vdd)。但是注
意,在 PSoC4 的系统中,VDDD 和 VDDA 必须相等
(推荐用同一电源供电)。虽然 VDDA 和 VDDD 由同一
电源供电,但是在一些对精度要求较高的模拟电路中,
推荐将两路分开走线已隔离模拟电路和数字电路的电流。
同样的,推荐将 VDDA 和 VSSD 分开走线。如果 VDDA
和 VDDD 由不同的电源供电,VDDA 必须提前于 VDDD。
芯片内部有四个个电压调节器(降压),都由 Vddd 供电。
活动状态电压调节器是主要的电压调节器,负责在活动
状态或睡眠状态时将外部电源降压到 1.8V,以供所有的
内部数字电路使用。其输出接到引脚 Vccd,必须外接一
个电容(如图 9-1 所示)。活动状态电压调节器是给内
部使用的,输出引脚 Vccd 除了接电容外,不能接任何外
部负载。
当外部电压最小值大于 1.8V 时,必须经过内部电压调节
器供电。当外部电压最小值小于 1.8V 并且电压范围在
1.71V-1.89V (1.8V±5%)时,应直接由外部电源供电,旁
路掉内部电压调节器。
经过内部电压调节器供电时,其输出引脚 Vccd 必须按照
图 9-1 连接,即外接一个去耦电容到地(1uF, X5R 或者
更好)。这个电压调节器仅供内部使用,其输出不能外
接其他负载。外部连接如图 9-2 或 图 9-3 所示。
以下例举了 PSoC4A 常用电源连接方式。
9.2.1 外部电压较高时(1.8V-5.5V)
图 9-2. 1.8V-5.5V,数字电源和模拟电源同路径供电
1.8-5.5V
Vddd
Vccd 可以是内部调压器的输出,也可以直接接输入电压。
当作为内部调压器输出时,Vddd 的输入范围是 1.8V5.5V,通过内部调压器产生芯片内部电路工作的电压。
当直接接入输入电源时,其输入范围是 1.71-1.89V。内
部活动状态电压调节器仍然是上电的,因为默认是使能
的。在这种情况下必须在固件程序里禁用(参见 9.3.1.1),
以节约能耗。
0.1uF
Vdda
1uF
Vccd
1uF
Vssd
另外,还有两个电压调节器是为深度睡眠状态和休眠状
态供电。还有一个低噪声调节器可以给一些敏感的模拟
电路提供电源,例如 bandgap 参考源电路、电容感应电
路等等。
9.2
PSoC 4A
Vssa
电源连接方式
图 9-3. 1.8V-5.5V,数字和模拟电源分开两条不同的路径供电
1.8-5.5V
Vddd
0.1uF
Vdda
1.8-5.5V
Vccd
0.1uF
1uF
PSoC 4
1uF
Vssd
Vssa
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
61
电源和电源监测
在一些较小的封装中,只有 Vdd 和 Vss, 外部电压为
9.2.2 外部电压较低时(1.71V-1.89V)
1.8V-5.5V 时,连接如图 9-4 所示:
图 9-4. 1.8V-5.5V, 单独 Vdd 供电
1.8-5.5V
Vdd
0.1uF
1uF
Vccd
PSoC 4
1uF
Vss
图 9-5. 1.71-1.89V, 外部电源直接供电,数字电源和模拟电源同路径供电
Vddd
Vdda
Vccd
1.71-1.89V
0.1uF
1uF
PSoC 4
Vssd
Vssa
62
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
电源和电源监测
图 9-6. 1.71-1.89V, 外部电源直接供电,数字和模拟电源分开两条不同的路径供电
1.71-1.89V
Vddd
0.1uF
1uF
Vdda
Vccd
1.71-1.89V
Vssd
1uF
0.1uF
PSoC 4
Vssa
图 9-7. 1.71-1.89V, 外部电源直接供电,单独 Vdd
Vdd
Vccd
1.71-1.89V
0.1uF
PSoC 4
1uF
Vss
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
63
电源和电源监测
9.3
使用
9.3.2.1
上电重启(POR)
如图 9-1 所示,芯片内部的数字电路由 Vddd 供电,模
拟电路由 Vdda 供电。
上电重启电路在芯片开始上电时提供重启脉冲,通常触
发电平并不是十分精确。上电重启电路只在初始上电时
工作,过后就不工作。
9.3.1 内部调压器
9.3.2.2
活动和低噪声电压调节器可以在活动和睡眠状态工作。
深度睡眠调压器和休眠调压器在相应的状态下工作。
当检测到 Vccd 电压低于最低安全运行电压(SOV,请
见芯片数据手册)时,欠压检测电路会产生一个重启脉
冲,以防止芯片在运行/保持状态时的电压逻辑不正常。
欠压保护电路在除了停止模式以外的任何运行模式(活
动/睡眠/深度睡眠/休眠) 都可以工作。
9.3.1.1
活动状态调压器
当外部电压在 1.8V 到 5.5V 时,这个调节器在活动和
睡眠状态给芯片内部的数字逻辑电路工作。这个调节器
的输出街道引脚(Vccd),并要求改引脚外接一个去
耦电容(1uF,X5R)。当电源电压低于 1.8V 时,
Vccd 直接接电源,Vccd 和 Vddd 必须直接短接到一起。
此时,活动状态寄存器可以通过设 PWR_CONTROL
寄存器中的 EXT_VCCD 位来禁用。
9.3.1.2
低噪声调压器
低噪声调节器可以给一些敏感的模拟电路提供电源,例
如 bandgap 参考源电路、电容感应电路等等。这个调
压器有特别高的电源抑制比,可以滤除数字电路高速开
关切换在电源系统上引入的噪声。
9.3.1.3
深度睡眠寄存器
深度睡眠状态的电压调节器在深度睡眠状态下为数字电
路提供电源(如内部低速时钟、串行通信模块等等)。
在活动和睡眠模式中,这个调压器的输出连到活动状态
调压器输出(VCCD)。这个调压器独立的一个输出,
给 ILO 提供稳定的保持电压。
9.3.1.4
休眠寄存器
休眠状态的电压调节器在休眠状态下为数字电路提供电
源,如睡眠控制器和低功耗比较器,以及 SRAM 和
UDB 的保持电压。在活动和睡眠模式中,这个调压器
的输出连到活动状态调压器。在深度睡眠模式,这个调
压器的输出连到深度睡眠调压器输出。
9.3.2 电压检测
9.3.2.3
欠压检测(BOD)
低压检测
低压检测用于精确的检测外部电压的状态。当外部电源
出现异常或者即将耗尽时,可以产生一个中断,提醒系
统做预防性措施。LVD 只能在活动或睡眠状态时使用。
LVD 可以通过设置 LVD_EN 位使能
(PWR_VMON_CONFIG [0])。
通过配置 LVD_SEL 位(PWR_VMON_CONFIG
[4:1]), 触发电平可以在 1.75V-4.5V 范围内自定义。
在 LVD 电路稳定前,使能低压检测有可能会触发错误
的中断。可以在使能低压检测位 LVD_EN 的 1uS 内屏
蔽 LVD 中断来避免这个问题。推荐的 LVD 使用步骤
如下:
1. 设置 PWR_INTR_MASK 寄存器中的 LVD 位为 0,
确保开始时中断被屏蔽。
2. 通过配置 LVD_SEL(PWR_VMON_CONFIG
[4:1]),设置触发电平。
3. 通过设置 LVD_EN 位使能低压检测
(PWR_VMON_CONFIG [0])。这时可能会检测
到有低压时间,但是由于设置了中断了屏蔽,不会
有中断产生。
4. 等待 1uS 的电路稳定时间。
5. 通过写“1”到 PWR_INTR 寄存器的 LVD 位,清除中
断标志位。
6. 清除 PWR_INTR_MASK 的中断屏蔽位(写“1”到
LVD 位)
电压检测包括上电重启(POR),欠压检测(BOD)和低
压检测(LVD)。
64
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
电源和电源监测
9.4
寄存器列表
表 9-1. 电源和电源监测寄存器表
寄存器名称
描述
PWR_INTR
电源中断标志寄存器
PWR_INTR_MASK
电源中断屏蔽寄存器
PWR_VMON_CONFIG
电源检测校正和配置寄存器
PWR_CONTROL
电源模式控制,当前状态观察寄存器
PWR_BOD_KEY
BOD 重启标记寄存器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
65
运行模式
10 运行模式
PSoC 4 可以在 4 种不同运行模式下执行软件程序。在不同模式下,系统会执行存储在闪存(FLASH)和静态只读存储
器(SROM)中的不同代码,并要求有相应的硬件权限。4 种模式中仅有 3 种模式会被用户使用;调试模式主要用于用
户软件开发过程中的调试。
PSoC 4 的 4 种运行模式如下:
 引导模式(Boot)
 用户模式(User)
 特权模式(Privileged)
 调试模式(Debug)
10.1
引导模式
器件复位完成后,在没有调试请求的情况下系统会进入引导模式运行。运行在引导模式下的引导程序保存在静态只读存
储器中。引导模式运行于特权模式下,所有中断会被禁止,从而使引导程序在无中断影响的情况下配置器件运行参数。
在上电复位阶段,硬件的校正参数会被从非易失锁存器加载到相应寄存器中,从而保证后续正常操作所需的电压和时钟。
引导程序执行结束后,程序会从闪存开始执行,并进入用户模式。闪存中的部分代码可能由 PSoC Creator 集成开发环
境自动生成。
10.2
用户模式
用户的程序运行于用户模式下,在闪存中执行(不可在静态只读存储器中执行)。运行在用户模式下的程序包括 PSoC
Creator 集成开发环境自动生成的代码和用户编写的代码;其中自动生成的代码包括软件启动代码和部分正常运行所需
代码。一旦引导程序执行完成,系统会进入此模式来执行用户程序。
10.3
特权模式
用户程序通过设置寄存器 CPUSS_SYSARG 和 CPUSS_SYSREG,可使系统进入特权模式。运行在特权模式下的程
序由 Cypress 编写并固化在静态只读存储器中(用户不可修改),用来执行专有功能,用户不可中断或观察其运行。
在此模式下,调试功能被禁止。一旦运行在此模式下的程序执行完成,系统会自动返回到用户模式。
10.4
调试模式
调试模式主要用于用户软件开发阶段。在调试模式下,用户可借助调试器和集成开发环境(如 PSoC Creator 或 ARM
MDK)对用户程序进行调试、查看运行参数。器件复位后,如果串行调试(SWD)端口有调试请求,则系统会进入调
试模式。如需调试接口的详细信息,请参考编程和调试接口章节。
在不同的器件安全模式下,调试的权限不同。详情请参考器件安全章节。
66
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
电源模式
11 电源模式
PSoC 4 提供了多种电源模式,可以最大程度地降低器件的功耗。
PSoC 4 的电源模式可分如下 5 种:





活动(Active)
睡眠(Sleep)
深度睡眠(Deep-Sleep)
休眠(Hibernate)
停止(Stop)
活动、睡眠和深度睡眠等 3 种电源模式是 ARM 的 3 种标准电源模式;ARM 处理器和指令集结构(ISA)均支持此 3 种
电源模式。休眠和停止是 PSoC4 提供的功耗更低的电源模式。用户可通过软件设置进入休眠或停止模式。但是 CPU
及所有外设一旦被从休眠或停止模式唤醒,将进入复位(Reset)。
不同的电源模式可通过如下方式来实现:




使能/禁止外设时钟
开启/关闭内部电压调节器
开启/关闭时钟发生器
开启/关闭 PSoC 的部分组件
各种电源模式及其转换见图 11-1。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
67
电源模式
图 11-1 电源模式转换框图
Internal Reset Event
External Reset Event
Firmware Action
Other External Event
XRES / POR / BOD*
RESET
Internal Resets,
e.g. WDT
ACTIVE
Firmware
Action
Wakeup
Interrupt
SLEEP
DEEP-SLEEP
HIBERNATE
Wakeup
Interrupt
STOP
WAKEUP Pin
Asserts
*BOD 在停止模式下不可用。
68
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
电源模式
表 11-1 描述了 PSoC 4 提供的各种电源模式。
表 11-1. PSoC 4 电源模式
电源
模式
描述
进入条件
活动
PSoC 4 器件的基本工
作模式,所有外设均可
用(也可选择性的使用
外设)
从睡眠、深度睡眠模
式唤醒;
内部或外部的复位;
掉电检测;
上电复位
睡眠
CPU 处于睡眠状态,
SRAM 处于保持状
态,所有外设均可用
(也可选择性的使用外
设)
深度
睡眠
所有内部供电来自于
Deep-Sleep 电压调节
器;
内部主振荡器 IMO 和
高速外设均被关闭,内
部低速振荡器 ILO(32
kHz)和低速外设是否
继续工作可选。
来自低速异步外设或低
功耗比较器的中断可将
其唤醒
唤醒源
可用时钟
醒来
动作
可用的电压调节器
处理
中断
所有电压调节器均可
用。当使用外部电压
调节器时,可通过软
件禁用 Active Digital
电压调节器。
N/A
主振荡器
IMO 和低速
振荡器 ILO
均可用(可
配置)
配置寄存器
任一中断
主振荡器
IMO 和低速
振荡器 ILO
均可用(可
配置)
处理
中断
所有电压调节器均可
用。当使用外部电压
调节器时,可通过软
件禁用 Active Digital
电压调节器。
配置寄存器
来自如下模块的中
断:
端口中断,
低功耗比较器,
串口通信模块
(SCB1/SCB2),
看门狗定时器
低速振荡器
ILO
(32KHz)
处理
中断
Deep-Sleep 电压调节
器和 Hibernate 电压
调节器
休眠
仅 SRAM 处于保持状
态,大多数模块的内部
供电被关闭。
来自端口或低功耗比较
器的中断可将其唤醒。
配置寄存器
来自如下模块的中
断:
端口中断源,
低功耗比较器
无
复位
Hibernate 电压调节器
停止
所有内部供电被关闭,
仅 GPIO 输出处于冻结
状态。
只有 XRES 或
WAKEUP 管脚上的有
效信号才可将其唤醒。
配置寄存器
XRES,
WAKEUP 管脚
无
复位
无
11.1
活动模式
活动模式是 PSoC 4 器件的基本模式,用户可以选择性
的使用器件的子系统和外设。在此模式中,CPU 将保持
运行,并且所有外设均开启。当然,用户也可以通过软
件动态地禁止不用的专用外设,以降低功耗。
11.2
睡眠模式
在睡眠模式中,CPU 处于睡眠状态,其主时钟被关闭。
当 CPU 不需要处理任何任务时,就可进入睡眠模式。在
程序的运行中,PSoC 4 可经常进入此模式,以实现器件
的低功耗要求。任何使能的中断均可将器件从睡眠模式
唤醒。
11.3
在深度睡眠模式下,CPU、SRAM、UDB、TCPWM 和
PCLK 等处于保持状态,主系统时钟关闭,内部低速振
荡器 ILO(32 kHz)是否继续工作是可选的(如果 ILO
被关闭,则看门狗和 LCD 模块也不可用)。但不需要时
钟或由外部接口(比如从模式的 I2C/SPI)提供时钟的外
设仍可继续工作。来自 GPIO 管脚、低功耗比较器、从
模式的 I2C 和看门狗的中断信号可将器件从深度睡眠模
式唤醒。深度睡眠模式下可用的唤醒信号源见表 11-3。
在深度睡眠模式下,当低速时钟开启时,工作电流值约
为 1.3µA;当低速时钟关闭时,工作电流值约为 0.5µA。
深度睡眠模式
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
69
电源模式
11.4
如果外部复位信号(XRES)被触发,将使整个系统重
启。在此情况下,器件重启后,系统将无法判别重启的
原因。在休眠模式下,工作电流值约为 150nA.
休眠模式
在此模式下,SRAM 处于保持状态。通过关闭所有时
钟、断开 CPU 和所有外设的电源(用于唤醒系统的外设
除外),系统可进入休眠模式。在此模式下,CPU 和所
有外设将失去其状态值。
11.5
停止模式
在休眠模式下,系统使用休眠电压调节器供电,以达到
超低功耗的目的。任何管脚上信号的最大频率将受到限
制。所有管脚上信号的翻转频率总和不能超过 10kHz。
如果信号的翻转频率很高,在功耗将与使用深度睡眠模
式没有什么显著区别。
在停止模式下,CPU、所有内部电压调节器和外设均被
关闭;GPIO 输出处于冻结状态(Frozen:所有 GPIO 的
配置、模式及状态处于锁存状态;在器件进入活动模式
前,无法改变 GPIO 的状态);仅有 GPIO 的状态被保
持。在此模式下,只有通过 XRES 或 WAKEUP 管脚上
的信号才可将系统唤醒,系统被唤醒后进入系统复位。
在休眠模式下,只有来自管脚或低功耗比较器的中断信
号才可将器件唤醒。一旦被唤醒,CPU 和大部分寄存器
将进入复位状态,软件将从复位向量地址处开始运行。
注意:如果使用 XRES 将器件唤醒,其将失去冻结
GPIO 的状态。
在停止模式下,工作电流值约为 20nA.。
器件复位将使 GPIO 进入高阻模拟模式(被程序设置为
冻结状态的管脚除外)。复位后,中断状态仍然有效,
以使系统能够识别唤醒器件的中断源。
表 11-2 各种电源模式下的可用外设
表 11-2 描述了各种电源模式下的可用外设;表 11-3 描
述了各种电源模式下有效的唤醒源。
内部主振荡器(IMO)
活动
on
on
on
睡眠
Retentionb
Retention
on
深度睡眠
Retention
Retention
off
休眠
off
Retention
off
停止
off
off
off
内部低速振荡器(ILO)
on
on
on(可选)
off
off
看门狗定时器 a
on
on
on
off
off
通用数字模块(UDB)
on
on
Retention
off
off
LCD 控制模块
on
on
on
off
off
串口通信模块(SCB:UART)
on
on
off
off
off
串口通信模块(SCB:SPI)
on
on
on(仅从模式)
off
off
串口通信模块(SCB:I2C)
TCPWM
PCLK
CTBm
SAR ADC 模块
on
on
on
on
on
on
on
on
on
on
on(仅从模式)
Retention
Retention
off
off
off
off
off
off
off
off
off
off
off
off
低功耗比较器
on
on
on
on
off
Capsense 模块
on
on
off
off
off
上电复位(POR) ,掉电检测(BOD)
on
on
on
on
off
外部复位管脚 XRES
on
on
on
on
on
高速输入输出矩阵(HSIOM)
on
on
on
on
off
GPIO 输出状态
on
on
on/frozen
frozend
frozen
CPU
SRAM
时钟
数字外设
模拟外设
c
电源和复位
a. 看门狗定时器 - 在深度睡眠模式下,如果 ILO 被关闭,看门狗定时器将不可用。
b. 保持(Retention)- 外设的配置和状态处于保留状态(相应电源模式的电压调节器提供电压,但是外设时钟被关
闭)。器件一旦醒来进入活动模式,外设可继续工作。
c. 上电复位(POR)- 上电复位电路在器件上电启动完成后被禁用,但是其可被掉电检测(BOD)电路使能。所以
说上电复位在深度睡眠和休眠模式下也是可用的。
d. 冻结(Frozen)- GPIO 的配置、模式及状态处于锁存状态。在器件进入活动模式前,无法改变 GPIO 的状态。
注意:on - 外设模块处于正常工作状态;off - 外设模块被关闭,不可用。
70
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
电源模式
表 11-3 各种电源模式下的唤醒源
电源模式
睡眠
深度睡眠
休眠
唤醒源
醒来动作
任何中断源
处理中断
任何复位源
复位
端口中断
处理中断
低功耗比较器
处理中断
串口通信模块 SCB
处理中断
看门狗定时器中断/复位
处理中断 / 复位
外部复位信号(XRES)a
复位
端口中断
复位
低功耗比较器
复位
a
停止
a.
外部复位信号(XRES)
复位
WAKEUP 管脚
复位
外部复位信号(XRES)a
复位
外部复位信号(XRES)会引起整个系统重启;所有外设(包括被冻结的 GPIO)的状态会被丢失。在这种情况下,
PSoC 4 重启后,无法识别唤醒原因。
11.6
寄存器 SCR 的 SLEEPDEEP 位和寄存器
PWR_CONTROL 的 HIBERNATE 位决定了系统将
从活动模式转换至睡眠、深度睡眠还是休眠模式。
表 11-4 描述了当 Cortex-M0 执行 WFI 指令时,因
SLEEPDEEP 位和 HIBERNATE 位配置不同而进入不
同的低功耗模式。
低功耗模式的使用
当 Cortex-M0 执行一条中断等待(WFI)指令时,系统
将从活动模式进入睡眠、深度睡眠或休眠模式(见表
11-4)。如果用户需要 CPU 执行完所有中断服务程序
(ISR)立即再次进入低功耗模式,可通过设置
Cortex-M0 系统控制寄存器(SCR)的
SLEEPONEXIT 位来实现。
表 11-4 从活动模式转换至低功耗模式的寄存器配置
从活动模式转换至的低功耗模式
SCR.SLEEPDEEP
PWR_CONTROL.HIBERNATE
睡眠
0
X(任意值)
深度睡眠
1
0
休眠
1
1
用户可通过寄存器 PWR_STOP 来设置 GPIO 在低功耗
模式下是否处于冻结状态。在休眠模式下,建议用户将
GPIO 设置为冻结状态,因为从休眠模式醒来,器件将进
入系统复位。
使能的中断可以将系统从睡眠、深度睡眠和休眠等低功
耗模式唤醒,详情请参考表 11-3。此外,任何 RESET
后,系统将转换至活动模式。
通过设置寄存器 PWR_STOP,系统可直接从活动模式
进入停止模式。在此模式下,系统中所有的低压逻辑的
电源会被关闭,仅有冻结的 I/O 状态和寄存器
PWR_STOP 中的值会被保持。来自 XRES 或 WAKEUP
管脚的有效信号可将其唤醒,并进入系统复位。




一个普通的 RESET 事件引起的。但是由 XRES 引起
的唤醒将使此字段复位。
UNLOCK - 通过向这个字段写 0x3A 可以解锁停止
模式;其他值将导致 STOP 位无效。
POLARITY - 此位用来设置 WAKEUP 管脚输入的
极性。当 WAKEUP 管脚输入信号的极性与设置的值
匹配时,处于停止模式的器件将被唤醒。
FREEZE - 此位置 1 可冻结所有 GPIO 的配置、模
式和状态。
STOP - 设置此位使系统进入停止模式。
寄存器 PWR_STOP 中的字段定义如下:
 TOKEN - 这个字段包括 8 个位,其数值在从停止模
式到被唤醒的过程中保持不变。软件可以通过读取其
值来判断系统的唤醒是由 WAKEUP 管脚信号还是由
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
71
电源模式
要使系统进入停止模式,建议对寄存器 PWR_STOP 按
如下配置连续赋值 3 次:





TOKEN = <应用程序指定的值>
UNLOCK = 0x3A
POLARITY = <应用程序指定的极性>
FREEZE = 1
STOP = 1
第 3 次赋值之后,建议用户放置两条空指令 NOP。
当 XRES 或 WAKEUP 管脚信号有效时,器件将退出停
止模式。这两个事件均可将寄存器 PWR_STOP 中的
11.7
STOP 位清除,并触发上电复位(POR)。WAKEUP 事
件不清除寄存器 PWR_STOP 的其他位,而 XRES 事件
将清除寄存器 PWR_STOP 中的所有位。
系统重启后,建议用户使用如下软件处理流程:
 <可选>读取 TOKEN 值,处理不同的分支程序
 <可选>设置 IO 驱动模式及输出值。对于数字输出管
脚,程序可将其设置为输出、读取其冻结值,并将此
值设置到输出数据寄存器中。
 解冻 IO
寄存器列表
表 11-5 电源模式寄存器列表
寄存器
描述
系统控制寄存器(SCR)
设置 或者返回系统控制数据
电源模式控制寄存器(PWR_CONTROL)
控制电源模式选择,查看当前的电源模式状态。
停止模式寄存器(PWR_STOP)
控制进入 / 退出停止模式
72
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
看门狗定时器
12 看门狗定时器
看门狗定时器(WDT:WatchDog Timer)是保证嵌入式系统鲁棒性的一个重要单元。当WDT被使能时,微控制器必须通过程
序定期的去刷新看门狗定时器中的计数值,否则会被重启,以避免程序陷入异常状态。在PSoC 4中,WDT的工作时钟是ILO
(Internal Low-power Oscillator),它的频率是32KHz。
12.1
特性
PSoC 4中的WDT主要有以下几个特性:
 三个可配置周期的计数器;
 三个计数器可以独立应用或者级联应用;
 在睡眠和深度睡眠的电源模式下,WDT能够产生唤醒中断;
 在活动的电源模式下,可以在指定的时间产生中断;
 防止寄存器数据被意外破坏的保护设置。
12.2
模块框图
图12-1 看门狗定时器的模块框图
AHB
接口寄存器
CFG/
STATUS
INTERUPPT
CPU
子系统
看门狗定时器
内部
低功耗振荡器
(ILO)
32KHz
CLK
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
RESET
复位模块
73
Interrupt Controller
看门狗定时器
12.3
工作原理
如果WDT的计数值在指定的时间内没有被刷新,它将
输出中断或者硬件复位,时间可以通过编程控制。在
PSoC 4中,WDT一共包含了两个16-bit的计数器(计
数器0和计数器1)和一个32-bit计数器(计数器2)。
这三个计数器可以被独立操作,或者级联操作。计数器
通过级联,可以拉长两次中断或者复位之间的间隔。
计数器0和计数器1在达到指定时间后可以输出中断或
者硬件复位;而计数器2则只能够输出中断。
12.3.1 WDT 的使能和禁止
WDT的 使 能和 禁 止 分别 通 过寄 存 器WDT_ENABLEx
(x = 0或者1)的置位与清零来实现。对WDT的使能
或者禁止需要通过三个低频时钟(LFCLK)周期才能
够生效。WDT_ENABLEx的有效值必须保持至少一个
LFCLK的周期。
在WDT被使能的情况下,对配置寄存器WDT_CONFIG
和控制寄存器WDT_CONTROL的操作是非法的。将
CLK_SELECT寄存器中的WDT_LOCK置位,可以禁止
所有WDT寄存器的写操作。如果用户需要更新WDT的
配置,需要首先将WDT_LOCK清零。
12.3.2 WDT 的操作模式
计数器0和计数器1有多种操作模式,它可以产生中断
唤醒低功耗电源模式中的PSoC 4,可以产生复位以避
免PSoC 4由于不当的程序陷入异常的不响应状态。寄
存器WDT_MODE[1:0]被用来配置具体的操作模式,当
计 数 器 的 计 数 值 WDT_CTRx 等 于 目 标 计 数 值
WDT_MATCHx时(x = 0或者1),中断或者复位就会
发生。
表12-1 计数器0和计数器1的操作模式
寄存器
WDT_MODEx[1:0]
描述
当计数器计数值与目标计数值匹配(WDT_CTRx = WDT_MATCHx)时,发生以下操作:
00:无操作
01:产生中断
10:产生复位
11:产生中断,若连续三次中断未被处理,则产生复位
注意:x = 0 或 1。
计数器2只能产生中断,如表2。
表12-2 计数器2的操作模式
寄存器
WDT_MODE2
描述
当计数器寄存器中的某一位翻转时(具体哪一位由寄存器WDT_BITS2[4:0]的值决定,
详见表12-4),发生以下操作:
0:无操作;
1:产生中断
12.3.3 WDT 的中断和低功耗模式
在活动电源模式下,WDT声明的中断请求被发送到CPU;在睡眠和深度睡眠电源模式下,WDT声明的中断被发送到唤
醒中断控制器(WIC:Wake-up Interrupt Controller),具体如下:
 活动电源模式:CPU子系统和WIC都工作在活动状态。CPU负责响应中断请求并执行中断服务程序(ISR:Interrupt
Service Routine)。进入ISR后,软件需要向中断请求寄存器WDT_INTx(x = 0,1或2)写1,将它清零;
 睡眠/深度睡眠电源模式:CPU子系统被关闭,中断被送到WIC来唤醒PSoC 4。CPU被唤醒后,对中断请求进行响
应并执行中断服务程序。中断请求寄存器需要在ISR中被清零。
12.3.4 WDT 的复位
在 WDT 触发复位之后,寄存器 RESET_CAUSE 中的 RESET_WDT 位会被置位,以记录发生过 WDT 的复位。RESET_WDT 的
置位状态会被一直保持到软件对它执行清零,发生上电复位(POR)或者掉电复位(BOD)。更多细节请参见复位章节。
74
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
看门狗定时器
寄存器列表
12.4
表12-3 计数器0和计数器1的状态与控制寄存器
寄存器
描述
WDT_CLEARx
WDT计数器的计数范围寄存器
0:计数器的计数范围为全0x0000到0xFFFF;
1:计数器的计数范围为全0到目标计数值WDT_MATCHx.
WDT_ENABLEx
计数器使能寄存器
0:禁止;
1:使能。
WDT_INTx
WDT的中断请求寄存器
硬件置位,软件清零。
在操作模式3中,如果连续三次中断寄存器未被清零,则WDT会声明复位
WDT_RESETx
WDT的计数器复位清零寄存器软件向该位写“1”,将WDT计数器复位,其计数值归零,之后硬件会
自动将该寄存器位重新清零。
WDT_CASCADE0_1
级联配置寄存器
0:计数器0和计数器1独立操作
1:计数器0和计数器1级联操作,当计数器0的计数值达到目标计数值时,计数器1的计数值累加1。
WDT_MATCH0
计数器0的目标计数值
WDT_MATCH1
计数器1的目标计数值
注意:x = 0 或 1。
表12-4 计数器2的状态与控制寄存器
寄存器
描述
WDT_CASCADE1_2
级联配置寄存器
0:计数器1和计数器2独立操作
1:计数器1和计数器2级联操作,当计数器1的计数值达到目标计数值时,计数器2的计数值累加1。
WDT_ENABLE2
计数器使能寄存器
0:禁止;
1:使能。
WDT_INT2
WDT的中断请求寄存器
硬件置位,软件清零。
WDT_RESET2
WDT的计数器复位清零寄存器软件向该位写“1”,将WDT计数器复位,其计数值归零,之后硬件会自动将该寄
存器位重新清零。
WDT_BITS2[4:0]
翻转触发中断的比特位设置寄存器
该寄存器决定:当计数器2的计数寄存器哪一位发生翻转会触发中断。
0:第0位翻转时触发中断;
1:第1位翻转时触发中断;
……
31:第31位翻转时触发中断。
更多细节请参见PSoC 4 寄存器TRM中xxx页的WDT寄存器。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
75
Interrupt Controller
复位
13 复位
PSoC 4 支持多种类型的复位(Reset),其包括器件的上电复位、用户提供的外部复位和软件复位等等。
PSoC 4 的复位系统具有如下复位源:
■
上电复位(Power-on Reset, POR):当为器件连接电源使其启动时,供电电压有个斜坡上升的过程,当电压高于阈值时,
会引起上电复位,并将器件锁定在复位状态。
■
掉电检测复位(Brown-out Reset , BOD):在程序运行的过程中,如果器件的供电电压低于规定值时,会引起掉电检测
复位。
■
看门狗复位(Watchdog Reset, WRES):当软件在规定的时间内没有复位看门狗中的定时器,即会引起看门狗复位。
■
软件复位(Software Initiated Reset, SRES):用户可通过软件写相应寄存器来产生软件复位。
■
外部复位(XRES):此复位是由来自复位管脚(XRES)上的外部信号引起的。
■
特权保护复位(Protection Fault Reset, PROT_FAULT):当用户操作需具有特权的代码时,会产生一个特权保护复位。
■
休眠模式唤醒复位:当处于休眠模式的器件被唤醒时,会产生一个休眠模式唤醒复位。
■
停止模式唤醒复位:当处于停止模式的器件被唤醒时,会产生一个停止模式唤醒复位。
13.1
复位源
下面将详细介绍各种复位源。
13.1.1
上电复位
PSoC 4 在上电启动时,会发生上电复位,产生一个系统复位。 上电复位会将器件锁定在复位状态,直到 Vdda、Vddd 和
Vccd 三个电压全部达到数据手册要求的值。
在 PSoC 4 中,没有记录上电复位的寄存器,只可通过推测来判断系统复位可能是由上电复位引起的,详细信息请参考复位源
识别章节。
13.1.2
掉电检测复位
PSoC 4 中包含一个掉电检测模块,其用于监测电压 Vccd 是否正常;如果 Vccd 低于数据手册中规定的最小逻辑工作电压,则
掉电检测模块会产生一个复位信号。掉电检测模块可在活动、睡眠、深度睡眠和休眠模式下正常工作,但不能在停止模式下正
常工作。
掉电检测复位可分为两种类型:可识别掉电检测复位和不可识别掉电检测复位。

可识别掉电检测复位:当 Vccd 低于最小逻辑工作电压、但仍高于最小逻辑保持电压时,一个掉电检测复位将发生,但是
具有保持能力的寄存器的状态会被保持。系统复位后,程序可以通过查询寄存器 PWR_BOD_KEY 来判别是否发生了可
识别掉电检测复位。

不可识别掉电检测复位:当 Vccd 同时低于最小逻辑工作和最小逻辑保持电压时,一个掉电检测复位将发生,但是寄存器
的状态不能被保持。这种情况下的复位无法与上电复位和外部复位进行区分。
关于掉电检测复位的识别,请参考复位源识别章节。
76
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
复位
13.1.3 看门狗复位
如果在设定的时间内,用户程序没有复位看门狗中的计数
器,则看门狗会产生一个复位信号,表示用户程序运行发
生了错误。
当 一 个 看 门 狗 复 位 事 件 发 生 时 , 状 态 位 RESET_WDT
(RES_CAUSE[0])会被置 1。
关于看门狗复位的识别请参考复位源识别章节。关于看门
狗的详细信息,请参考看门狗定时器章节。
13.1.4 软件复位
软件复位(SRES)是指用户通过软件写寄存器引起的系
统复位;即程序运行的过程中,当用户将位
SYSRESETREQ(AIRCR[2])置 1 时,会引起整个系统
复位。
当 软 件 复 位 发 生 时 , 状 态 位 RESET_SOFT
(RES_CAUSE[4])会被置 1。关于软件复位的识别请参
考复位源识别章节。
13.1.5 外部复位
外部复位(XRES)是指当专用管脚 XRES 上的电平满足
复位条件时引起的复位(XRES 管脚低电平时复位有效)。
当管脚 XRES 电平一直处于复位电平状态时,器件将一直
处于复位状态,直至电平处于非复位电平状态,然后器件
会进入正常的启动过程。关于管脚 XRES 的电气特性,请
参考数据手册。
在 PSoC 4 中,没有记录外部复位的寄存器,只可通过推
测来判断系统复位可能是由外部复位引起的。详细信息,
请参考复位源识别章节。
13.1.6 特权保护复位:
当用户尝试操作需具有特权的代码时,会产生一个特权保
护复位,比如 CPU 在执行特权代码时遇到一个调试断点。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
当特权保护复位发生时,状态位 RESET_PROT_FAULT
(RES_CAUSE[3])会被置 1。关于特权保护复位的识别
请参考复位源识别章节。
13.1.7 休眠模式唤醒复位
当器件处于休眠模式时,来自 GPIO 管脚或低功耗比较器
的中断信号可以将器件唤醒,并使器件进入复位状态。复
位后,SRAM 中的内容会被保持,但是代码的启动过程与
其他复位源一样。
复位后,中断状态位也会被保持。因此,程序可以通过读
取中断状态位来识别复位源。关于休眠模式的详细信息,
请参考电源模式章节。
13.1.8 停止模式唤醒复位
当器件处于停止模式时,来自管脚 WAKEUP 的有效信号
可以将器件唤醒,并使器件进入复位状态。复位后,
TOKEN(PWR_STOP[7:0])的值会被保持(外部复位会
复位 TOKEN)。关于休眠模式的详细信息,请参考电源
模式章节。
13.2
复位源识别
当器件复位完成时,如果软件能够查询到引起复位的复位
源,将有益于程序处理和应用。PSoC 4 提供了寄存器
RES_CAUSE 和寄存器 PWR_BOD_KEY 来帮助用户判断
复位源 。因此,应用程序复位后,用户可以通过查询寄存
器来判断最近一次的复位源。
在寄存器 RES_CAUSE 中,仅包含看门狗复位、特权保
护复位和软件复位等状态位(见表 13-1)。一旦看门狗复
位、特权保护复位或软件复位发生时,相应的标志位会立
即被置 1;此寄存器的值将一直被保持,直至被软件、上
电复位或不可识别掉电检测复位清除。
对于唤醒复位,用户可通过查询中断状态寄存器和寄存器
PWR_STOP 来判断是否发生了休眠模式唤醒复位和停止
模式唤醒复位。详情请见电源模式章节。
77
Interrupt Controller
复位
表 13-1 寄存器 RES_CAUSE
寄存器
RES_CAUSE的位
描述
RESET_WDT
(RES_CAUSE[0])
记录看门狗复位的状态位
RES_CAUSE[2:1]
保留
RESET_PROT_FAULT
(RES_CAUSE[3])
当用户尝试操作特权代码时,会产生一个特权保护复位。
RESET_SOFT
(RES_CAUSE[4])
记录软件复位状态。此复位是通过软件向SYSRESETREQ(AIRCR[2])写1,使Cortex-M0 CPU产生的复
位。
RES_CAUSE[31:5]
保留
寄存器 PWR_BOD_KEY 的值仅可被软件、不可识别的掉电检测复位、上电复位或外部复位修改。用户可用其来辨别可识别
掉电检测复位。在应用程序初始化时给此寄存器赋值,并在系统复位后读取此寄存器来判断是否发生了可识别掉电检测复位。
推荐的软件设计见表 13-2。
表 13-2 寄存器 PWR_BOD_KEY
寄存器
PWR_BOD_KEY的位
描述
用来识别上次复位是否由可识别的掉电检测复位引起的。
在系统启动时,用户软件可以通过如下步骤来查询上次复位是否由可识别掉电检测复位引起的:
KEY16
(PWR_BOD_KEY[15:0])
1.
声明一个变量并赋值: key = KEY16
2.
设置 KEY16 = 0x3A71
3.
判断key 是否等于0x3A71;如果相等并且排除其他可识别的复位源,则表示上次系统复位是由可识别
掉电检测复位引起的。
如果上述方法还不能判断复位的原因,那么此复位一定是一个不可记录的复位:不可识别掉电检测复位、上电复位或外部复位。
基于器件的资源,无法区分这三种复位源。
78
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
14 器件安全
PSoC4 给用户提供了多种防止未授权访问和复制的选项。通过强大的闪存保护、禁用调试功能,以及在 UDB 中(而非 CPU
固件程序)实现的用户编写的逻辑,能保证更高的安全级别。
调试电路在默认情况下是使能的,只能在固件程序中被禁用。一旦被禁用,重新使能的唯一方法是擦除整个器件,清除闪存保
护,然后用新的程序重新烧写器件。另外,对于通过恶意重新编程器件来进行欺诈性攻击或者企图通过启动/ 中断闪存编程时
序来进行安全性攻击的顾虑,可以永久禁用所有的编程、调试、测试接口。在大多数应用中不建议这么做,因为禁用所有接口
后,设计人员将无法对器件进行访问,也就不能退回进行故障分析,请根据实际情况权衡利弊。
14.1
特性
PSoC4 的器件安全系统有如下的特性:
■
用户可选择的保护级别
■
在最高安全级别的模式中,芯片被“锁住”,无法进入测试/调试模式,也无法进入擦除操作。中断擦除操作是一种已知的利
用芯片在擦除操作中的未知状态进行观察的黑客方法。
■
CPU通过不可屏蔽中断(NMI)进入特权模式(SVC指令此时不被使用);在特权模式中,NMI会保持有效,以防止任何
无意的中断返回导致的安全泄露。
14.2
工作原理
CPU 工作在用户模式或特权模式,而器件工作在四种保护模式:启动(BOOT)、开放(OPEN)、保护(PROTECTED)、终极
保护(KILL)。所有的模式都有相应的 CPU 和调试接口的访问权利。
■
■
■
■
启动模式: 器件在上电复位以后进入到启动模式,在此模式下调试接口禁用。这个模式会一直持续到启动代码将保护状
态从特权闪存(sFlash)中拷贝到保护控制寄存器中。通过这个临时的启动模式,系统的各个接口可以被配置到所需的保
护状态。
开放模式:这是默认的出厂模式。CPU 可以工作在用户模式或特权模式。在用户模式下,支持闪存编程和调试接口访问。
保护模式:PSoC4 可以从开放模式变化到保护模式。保护模式禁止对所有用户代码和存储空间的调试访问(访问用户寄
存器是允许的)。这样可以防止通过调试接口来对闪存进行重新编程。保护模式只有在完全擦除闪存后才能回到开放模式。
终极保护模式:用户可以在开放模式下,将芯片配置成终极保护模式。这种模式彻底禁止调试接口,只允许访问用户寄存
器。这种模式是不可逆的;进入终极保护模式的芯片可能不能退回进行故障分析。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
79
E 部分:数字系统
这部分包括以下章节:
■
串行通信模块 第 81 页
■
通用数字模块 第 117 页
■
计时器、计数器、脉冲宽度调制(PWM)模块
第 154 页
系统架构:
数字系统结构框图
Peripheral Interconnect (MMIO)
UDB
UDB
x4
UDB
4x TCPWM
Programmable
Digital
2x SCB-I2C/SPI/UART
PCLK
UDB
Port Interface & Digital System Interconnect (DSI)
High Speed I/O Matrix
36x GPIOs
IO Subsystem
80
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
15 串行通信模块 (SCB)
串行通信模块(SCB: Serial Communication Block)支持三种通信协议:SPI,UART 和 I2C。PSoC 4 提供了两个
SCB 模块,每个 SCB 模块在同一时刻只能用于实现一种串行通信协议。如果在设计中需要同时实现三个及以上串行通
信协议,用户可以借助 UDB 来设计。
特性
15.1
SCB 模块的特性主要如下:
 支持摩托罗拉 SPI 协议、德州仪器 SPI 协议和国家半导体 SPI 协议
 支持 SPI 主设备模式和从设备模式;
 支持数据卡协议(ISO7816)和红外数据传输协议(IrDA);
 支持 I2C 主设备模式和从设备模式;
 在 SPI 协议和 I2C 协议中,支持 EZ 的工作模式,该模式下的通信无需 CPU 的介入;
 在深度睡眠的电源模式下,仍能够支持 SPI 和 I2C 协议中的部分操作。
下面分别介绍如何应用 SCB 实现三种协议。
串行外设接口(SPI)协议
15.2
SPI 是一种同步的串行通信接口协议。此协议中有主设备和从设备,主设备负责发起数据传输。SCB 支持 SPI 协议中
“一主多从”拓扑的应用,此时主设备利用从设备选择信号线指定某一从设备与之通信。
用户设计中,如果 PSoC 4 需要和多个 SPI 从设备通信,则应将 PSoC 4 设置为主设备模式;如果系统中已经存在 SPI
主设备,且 PSoC 4 需要与之通信,则应将 PSoC 4 设置为从设备模式。
15.2.1
特性
SCB 实现 SPI 协议时,有如下特性:
 支持 SPI 主设备模式和从设备模式;
 支持多家厂商定义的 SPI 协议:
❒
摩托罗拉 SPI 协议,包括模式 0, 1, 2 和 3;
❒
德州仪器 SPI 协议,加入数据帧头指示机制,仅适用于模式 1;
❒
国家半导体 SPI 协议,半双工的传输协议,仅适用于模式 0。
 可配置数据帧长度,从 4 比特到 16 比特;
 CPU 通过中断或轮询与 SCB 通信;
 支持数据接收的过采样;
 支持 EZ(EASY)的工作模式;
 当 SCB 实现的 SPI 设备作为从设备时,支持外部时钟模式
❒
这时 SCB 可以工作在活动、睡眠和深度睡眠电源模式下;
❒
如果 SCB 同时工作在 EZ 模式下,则此时的通信无需 CPU 介入。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
81
串行通信模块 (SCB)
15.2.2
概述
图 15-1
一主三从的 SPI 通信系统框图
SCLK
SPI
Slave 1
SIMO
SPI
master
MISO
SELECT 1
SPI
Slave 2
SELECT 2
SPI
Slave 3
SELECT 3
图 15-1 给出了一主三从拓扑结构的 SPI 通信系统框图,
主要有四个信号:
 SCLK:串行时钟信号,由主设备产生,并传输到从
设备作为同步时钟;
 MOSI/SIMO:主出从入数据信号,由主设备输出,
输入到从设备;
 MISO/SOMI:主入从出数据信号,由从设备输出,
输入到主设备;
 SELECTx(x = 1,2 和 3):从设备选择信号,由主
设备输出,输入到从设备,一般为低电平有效。
缺省情况下,SPI 协议中一帧数据的长度为 8(1 个字
节);但通过配置,可以在 4 到 16 之间变化。在 SCB
实现 SPI 协议时,最高有效位(MSB)或者最低有效位
(LSB)的传输顺序可以配置的。
SCB 支持三家厂商定义的 SPI 协议:
 摩托罗拉(Motorola)SPI 协议:这是 SPI 协议的初
始版本;
 德州仪器(Texas Instrument)SPI 协议:它在摩托
罗拉 SPI 协议的基础上加入了帧指示机制;
 国家半导体(National Semiconductor)SPI 协议:
这是摩托罗拉 SPI 协议的一种半双工的变化。
某些应用中,MOSI/SIMO 和 MISO/SOMI 这两个单向数
据线被合并为一根双向数据线,如 SDAT,这样可以节
省一根数据线。
下面分别介绍这三种厂商协议。
SPI 协议的数据传输过程可以简述如下:
15.2.3
1. 主设备控制某一根 SELECTx 信号线,选择从设备;
2. 主设备向从设备同时传输时钟(通过 SCLK)与数据
(通过 MOSI/SIMO);
3. 从设备使用该时钟(或者与其同步的内部时钟)对数
据采样;
4. 如果从设备需要向主设备回复数据,则使用传输时钟
(SCLK)将回复的数据打到数据线 MISO/SOMI 上;
5. 主设备使用传输时钟对 MISO/SOMI 上的数据进行
采样;
15.2.3.1
82
SPI 协议介绍
摩托罗拉 SPI 协议
15.2.3.1.1 简介
SPI 协议最早由摩托罗拉公司提出,是一种全双工的串
行通信协议。
在连续传输多帧数据时,SELECT 信号一直被拉低。从
设备就无法利用 SELECT 的状态来区分每一帧,从而需
要一直监测数据,根据主从设备之间约定的协议找出帧
头和帧尾。当总线结束数据传输时,SELECT 被重新拉
高,SCLK 无时钟输出。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
摩托罗拉定义了 SPI 协议中的四种信号传输模式,规定
数据在哪个时钟沿被发送和采样。通过配置时钟极性
(CPOL: Clock POLarity)和时钟相位(CPHA: Clock
PHAse)来选择四种模式中的一种。
CPOL 决定了 SCLK 空闲态中的电平:
经过组合,可以得到四种传输模式,波形如图 15-2 所示,
具体如下所列:
 模式 0(CPOL = 0,CPHA = 0):SCLK 空闲态为
低,时钟上升沿采样数据,时钟下降沿发送数据;
 模式 1(CPOL = 0,CPHA =1):SCLK 空闲态为
 CPOL = 0:空闲态中,SCLK 为低电平;
低,时钟上升沿发送数据,时钟下降沿采样数据;
 CPOL = 1:空闲态中,SCLK 为高电平;
CPHA 决定了主设备和从设备在什么时候采样数据和发
送数据
 CPHA = 0:主从设备在同步传输时钟的第一个沿采
样数据,第二个沿发送数据;
 CPHA = 1:主从设备在同步传输时钟的第一个沿发
送数据,第二个沿采样数据。
 模式 2(CPOL =1,CPHA = 0):SCLK 空闲态为
高,时钟上升沿发送数据,时钟下降沿采样数据;
 模式 3(CPOL =1,CPHA =1):SCLK 空闲态为高,
时钟上升沿采样数据,时钟下降沿发送数据。
图 15-2 摩托罗拉 SPI 协议中四种传输模式的波形
CPOL = 0
CPHA = 0
SCLK
MISO /
MOSI
MSB
LSB
CPOL = 0
CPHA = 1
SCLK
MISO /
MOSI
MSB
LSB
CPOL = 1
CPHA = 0
SCLK
MISO /
MOSI
MSB
LSB
CPOL = 1
CPHA = 1
SCLK
MISO /
MOSI
MSB
LSB
LEGEND:
CPOL : Clock Polarity
CPHA : Clock Phase
SCLK : SPI interface clock
MOSI : SPI Master out / Slave in
MISO : SPI master in / Slave out
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
83
串行通信模块 (SCB)
图 15-3 给出了传输模式 0 下,单帧(8bit)数据传输和双帧(16bit)数据传输的波形图。
图 15-3 摩托罗拉 SPI 协议的传输波形
CPOL = 0, CPHA = 0 single data transfer
SCLK
SELECT
MOSI
MISO
MSB
LSB
MSB
LSB
CPOL = 0, CPHA = 0 two successive data transfers
SCLK
SELECT
MOSI
MISO
MSB
MSB
LSB MSB
LSB
LSB MSB
LSB
LEGEND :
CPOL : Clock Polarity
CPHA : Clock Phase
SCLK : SPI Interface Clock
MISO : SPI Master in / Slave out
MOSI : SPI Master out / Slave in
15.2.3.1.2 配置
15.2.3.2
通过下列的寄存器配置,可使 SCB 工作在摩托罗拉 SPI
协议下。
15.2.3.2.1 简介
1. 将寄存器 MODE(SCB_CTRL[25:24])设置为 01,
选择 SPI 协议;
2. 将寄存器 MODE(SCB_SPI_CTRL[25:24])设置为
00,进一步选择摩托罗拉 SPI 协议;
3. 配置寄存器 CPHA(SCB_SPI_CTRL[2])和 CPOL
(SCB_SPI_CTRL[3]),选择数据传输模式;
4. 根据章节 15.2.6(SPI 的初始化)中的步骤 2-4,对
SCB 实现的 SPI 接口控制器进行初始化和使能。
注意:上述的这些配置都可以在 PSoC Creator 中通过图
形用户界面完成,我们更推荐这种设计方式。如果需要
更多的了解寄存器的信息,请参考 PSoC 4 的寄存器用
户手册。
德州仪器 SPI 协议
德州仪器 SPI 协议重新定义了 SELECT 信号的用途。
SELECT 信号被用于指示一帧数据的帧头,而不仅作为
一个低有效的从设备选择信号。主设备在 SELECT 信号
上驱动一个持续时间为一个周期的高脉冲,来表明一个
数据帧传输的开始。根据配置,这个高脉冲可以与帧头
重合,也可以提前一个周期。这时,从设备不必消耗内
部资源找出帧头和帧尾,这是德州仪器版本相对于摩托
罗拉版本的优势。根据配置,SELECT 上的帧指示脉冲
可以指示帧头,也可以指示帧尾。德州仪器 SPI 协议仅
支持模式 1(CPOL = 0, CPHA =1),即 SCLK 空闲态
为低,时钟上升沿发送数据,时钟下降沿采样数据
图 15-4 给出了单帧(8bit)数据传输和双帧(16bit)数
据传输的时序图,此时 SELECT 上的帧指示脉冲相对于
帧头提前了一个周期。
图 15-4 德州仪器 SPI 协议传输时序图 - 帧头指示脉冲比帧头提前一个周期
84
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
single data transfer
SCLK
SELECT
MOSI
MSB
LSB
MISO
MSB
LSB
two successive data transfers
SCLK
SELECT
MOSI
MSB
LSB MSB
LSB
MISO
MSB
LSB MSB
LSB
LEGEND :
CPOL : Clock Polarity
CPHA : Clock Phase
SCLK : SPI Interface Clock
MISO : SPI Master in / Slave out
MOSI : SPI Master out / Slave in
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
85
串行通信模块 (SCB)
图 15-5 给出了单帧(8bit)数据传输和连续两帧(16bit)数据传输的时序图,此时 SELECT 上的帧指示脉冲与帧头
重合。
图 15-5 德州仪器 SPI 协议传输时序图 - 帧头指示脉冲与帧头重合
single data transfer
SCLK
SELECT
MOSI
MSB
LSB
MISO
MSB
LSB
two successive data transfers
SCLK
SELECT
MOSI
MSB
LSB MSB
LSB
MISO
MSB
LSB MSB
LSB
LEGEND :
CPOL : Clock Polarity
CPHA : Clock Phase
SCLK : SPI Interface Clock
MISO : SPI Master in / Slave out
MOSI : SPI Master out / Slave in
15.2.3.2.2 配置
通过下列的寄存器配置,可使 SCB 工作在德州仪器 SPI
协议下。
1. 将寄存器 MODE(SCB_CTRL[25:24])设置为 01,
选择 SPI 协议;
2. 将寄存器 MODE(SCB_SPI_CTRL[25:24])设置为
01,进一步选择德州仪器 SPI 协议;
3. 配置寄存器 SELECT_PRECEDE(SCB_SPI_CTRL
[1]),选择帧头指示脉冲出现的位置;
4. 根据章节 15.2.6(SPI 的初始化)中的步骤 2-4,对
SCB 实现的 SPI 接口控制器进行初始化和使能。
注意:上述的这些配置都可以在 PSoC Creator 中通过图
形用户界面完成,我们更推荐这种设计方式。如果需要
更多的了解寄存器的信息,请参考 PSoC 4 的寄存器用
户手册。
15.2.4
国家半导体 SPI 协议
15.2.4.1 简介
86
国家半导体 SPI 协议是一种半双工的协议,在同一时刻,
只能发送或者接收数据。该版本的 SPI 协议仅支持模式
0,即 SCLK 空闲态为低,时钟上升沿采样数据,时钟下
降沿发送数据。
图 15-7 给出了单帧数据传输和双帧数据传输的时序图,
由时序图可知:
 主设备发送的数据帧和接收的数据帧长度可以不相等。
此处,发送的数据帧长度为 8 比特,接收的数据帧长
度为 4 比特;
 主设备通过 MOSI 向从设备传输数据完毕后,从设备
需要等待一个空闲周期才可以通过 MISO 向主设备发
送数据;
 从设备通过 MISO 向主设备传输数据完毕后,主设备
可以立刻通过 MOSI 向从设备发送数据,无需空闲
周期。
空闲周期中,MISO 和 MOSI 上的数据无效。实际设计中,
主从设备一般在空闲周期中将各自的数据输出信号线
拉低。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
图 15-6 国家半导体 SPI 协议中的数据传输时序图
single data transfer
SCLK
SELECT
MOSI
MSB
LSB
MSB
MISO
LSB
“idle” ‘0’ cycle
two successive data transfers
SCLK
SELECT
MOSI
MSB
MSB
LSB
MISO
MSB
“idle” ‘0’ cycle
LSB
No “idle” cycle
LEGEND :
SCLK : SPI Interface Clock
MISO : SPI Master in / Slave out
MOSI : SPI Master out / Slave in
15.2.4.2 配置
通过下列的寄存器配置,可使 SCB 工作在国家半导体
SPI 协议下。
1. 将寄存器 MODE(SCB_CTRL[25:24])设置为 01,
选择 SPI 协议;
2. 将寄存器 MODE(SCB_SPI_CTRL[25:24])设置为
10,进一步选择国家半导体 SPI 协议;
3. 根据章节 15.2.6(SPI 的初始化)中的步骤 2-4,对
SCB 实现的 SPI 接口控制器进行初始化和使能。
钟下降沿发送数据。在该协议下,主设备与从设备之间
单帧数据的通信无需 CPU 的介入。从设备有一个 32 x
8bit 的 存 储 器 阵 列 , 主 设 备 可 以 通 过 地 址 寄 存 器
EZ_ADDR(SPI_STATUS[15:8])中的 EZ 存储器地址
对其寻址。
注意:SCB 中有一个基于 SRAM 的 16 x 16bit 的存储器。
在非 EZ 模式中,该存储器作为 2 个 8 x 16bit 的 FIFO 队
列使用:一个发送 FIFO 队列(TXFIFO)和一个接收
FIFO 队列(RXFIFO)。在 EZ 模式中,它作为一个 32
x 8bit 的 EZ 存储器使用。
注意:上述的这些配置都可以在 PSoC Creator 中通过图
形用户界面完成,我们更推荐这种设计方式。如果需要
更多的了解寄存器的信息,请参考 PSoC 4 的寄存器用
户手册。
15.2.5
EZSPI (Easy SPI) - SPI 的 EZ
模式
EZSPI 是摩托罗拉 SPI 协议的一种演化,仅支持传输模
式 0,即 SCLK 空闲态为低,时钟上升沿采样数据,时
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
87
串行通信模块 (SCB)
EZSPI 中,数据传输的帧长度为 8bit,共有三种传输类
型:写地址(主设备向从设备传输 EZ 存储器的地址),
写数据(主设备向从设备传输数据),读数据(主设备
由从设备读取数据)。
15.2.5.1
写地址
主设备首先通过 MOSI 向从设备传输命令字节 0x00,表
明写地址的操作意图。从设备收到该信息后,在下一帧
通过 MISO 向主设备传输响应字节,0xFE 表示响应,
0xFF 表示不响应。在接收到 0xFE 之后,主设备向从设
备传输 EZ 存储器的地址,该地址存放在地址寄存器
EZ_ADDR,指向 EZ 存储器 32 个字节中的某一个。
15.2.5.2
写数据
写数据的操作由主设备向从设备传输 0x01 的命令字节开
始,从设备的响应机制同上。主设备得到相应后传输数
据,从设备接收数据,并存放到 EZ_ADDR 指向的 EZ 存
储器的字节空间。完成一个字节的传输后,EZ_ADDR
累加 1,如果累加结果超出 31,则返回 0。
15.2.5.3
读数据
读数据对应的命令字节为 0x02,它的传输标志着读数据
操作的开始。从设备的响应机制同上。在相应主设备的
读数据请求后,从设备将 EZ 存储器中 EZ_ADDR 指向
的字节数据通过 MISO 传输到主设备,同时指针累加 1,
指针的返回机制同上。
图 15-7 描述了 EZSPI 的三种传输类型。
88
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
图 15-7 EZSPI 的三种传输类型
Command 0x00 : Write EZ address
SCLK
SELECT
MOSI
Command 0x00
EZ Address
MISO
EZ address (8 bits)
EZ address
Command 0x01 : Write DATA
SCLK
SELECT
MOSI
Write DATA
Command 0x01
MISO
Write
DATA
EZ address
EZ buffer
(32 bytes SRAM)
Read
DATA
Command 0x02 : Read DATA
SCLK
SELECT
MOSI
Command 0x02
MISO
Read DATA
LEGEND :
CPOL : Clock Polarity
CPHA : Clock Phase
SCLK : SPI Interface Clock
MISO : SPI Master in / Slave out
MOSI : SPI Master out / Slave in
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
0x00 : Write EZ address
0x01 : Write DATA
0x02 : Read DATA
0xfe : “slave ready”
0xff : “slave busy”
89
串行通信模块 (SCB)
15.2.5.4
配置
通过下列的寄存器配置,可使 SCB 工作在 SPI 的 EZ 模
式下。
1. 将寄存器 EZ_MODE(SCB_CTRL[10])设置为 1,
选择 EZ 模式;
2. 根据章节 15.2.6(SPI 的初始化)中的步骤 2-4,对
SCB 实现的 SPI 接口控制器进行初始化和使能。
3. 将寄存器 SCB_SPI_CTRL 中的 SCB_CONTINUOUS
置位,令发送器工作在连续发送模式;
4. 只 有 从 设 备 能 够 工 作 在 EZSPI 模 式 , 将 寄 存 器
SCB_SPI_CTRL 中的 SCB_MASTER_MODE 清零,
令 SCB 作为从设备;
表 15-1 SPI 相关寄存器
5. 将寄存器 SCB_TX_CTRL 和 SCB_RX_CTRL 中的
SCB_DATA_WIDTH 值配置为‘0111’,将数据帧的长
度设置为 8 比特;
注意:上述的这些配置都可以在 PSoC Creator 中通过图
形用户界面完成,我们更推荐这种设计方式。如果需要
更多的了解寄存器的信息,请参考 PSoC 4 的寄存器用
户手册。
15.2.6
SPI 相关寄存器
SPI 协议相关的寄存器如表 15-1 所列,更多寄存器的信
息请参考 PSoC 4 的寄存器用户手册。
寄存器名称
描述
SCB_CTRL
使能或者禁止 SCB;
选择 SCB 工作的协议(SPI,UART 或者 I2C);
选择内部时钟模式或外部时钟模式;
选择 EZ 模式或者非 EZ 模式;
SCB_STATUS
在 EZ 模式中,指示 32 x 8bit 的 EZ 存储器是否正在被外部时钟逻辑访问。
SCB_SPI_CTRL
选择主设备模式或从设备模式;
选择 SPI 协议(摩托罗拉,德州仪器或者国家半导体)
;
工作在摩托罗拉 SPI 协议时,选择具体的数据传输模式(0,1,2 或 3);
在德州仪器协议下,配置 SELECT 信号线上帧头指示脉冲出现的时间;
SCB_SPI_STATUS
总线状态标志位;
EZ 存储器地址寄存器;
SCB_TX_CTRL
使能或者禁止 SPI 的发送;
定义数据传输帧的长度;
配置 MSB 在前或者 LSB 在前;
SCB_RX_CTRL
使能或者禁止 SPI 的接收;
定义数据传输帧的长度;
配置 MSB 在前或者 LSB 在前;
使能或者禁止接收前端的中值滤波器(使用该滤波器的前提是,采样率大于数据率)
SCB_TX_FIFO_WR
保存前一次压入发送 FIFO 队列的数据;
SCB_RX_FIFO_RD
保存前一次接收 FIFO 队列弹出的数据,数据弹出后将从 FIFO 队列中删除,相当于
POP 操作;
SCB_RX_FIFO_RD_SILENT
保存前一次接收 FIFO 队列弹出的数据,数据弹出后不从 FIFO 队列中删除,相当于
PEEK 操作;
SCB_EZ_DATA
EZ 存储器
15.2.7
SPI 的中断
SCB 在某些事件发生时,可以触发中断,用户可以在
PSoC Creator 中通过图形用户界面选择中断触发事件。
设计中,PSoC Creator 可以自动生成中断服务程序,用
户也可以自定义中断服务程序。与 SPI 相关的中断包括:
90







SPI 数据传输完毕;
SPI 收发器空闲;
外部时钟模式的中断(详见 SCB_INTR_SPI_EC);
主设备模式的中断(详见 SCB_INTR_M);
从设备模式的中断(详见 SCB_INTR_M);
TXFIFO 的中断(详见 SCB_INTR_TX);
RXFIFO 的中断(详见 SCB_INTR_RX)。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
上述中断指向同一个中断向量,一旦其中一个未被屏蔽
的中断被触发,则该中断向量被读取,CPU 转入中断服
务程序处理该中断,查询中断寄存器进一步确认具体的
中断触发事件。
表 15-4 寄存器 SCB_TX_FIFO_CTRL /
SCB_RX_FIFO_CTRL
SCB_TX_FIFO_CTRL / SCB_RX_FIFO_CTRL
15.2.8
SPI 的初始化
比特位
寄存器名
描述
[2:0]
TRIGGER
_LEVEL
配置触发门限,如果 TXFIFO 中的数
据个数大于该值或者 RXFIFO 中的数
据个数小于该值,则会发生发送器触
发事件或者接收器触发事件,该触发
事件可以作为中断源。
16
CLEAR
置位时,发送器的 FIFO 或者接收器
的 FIFO 及其移位寄存器将被清零,
并保持无效状态。
17
FREEZE
置位时,发送器或者接收器被暂时冻
结,对它们的读或写无效,此时
FIFO 队列的读写指针不会移动。
在 SCB 中,实现 SPI 的初始化步骤如下:
1. 配置寄存器 SCB_SPI_CTRL(如表 15-2),选择具
体的 SPI 协议种类和主/从设备模式;
2. 通过寄存器 SCB_TX_CTRL 和 SCB_RX_CTRL(如
表 15-3),配置通用发送器与接收器,具体包括:
 数据帧的长度;
 高有效位(MSB)在前或者低有效位(LSB)在前;
 使能发送器或者接收器;
3. 通过寄存器 SCB_TX_FIFO_CTRL 和 SCB_RX_FIFO_
CTRL(如表 15-4),配置发送和接收的 FIFO 队列,
具体包括:
 选择触发门限;
 清除 FIFO 队列和移位寄存器;
 暂时冻结发送器和接收器;
4. 通过寄存器 SCB_CTRL(如表 15-5),选择工作协
议(SPI、UART 或者 I2C),使能 SCB 模块。
表 15-5 寄存器 SCB_CTRL
SCB_CTRL
比特位
寄存器名
表 15-2 寄存器 SCB_SPI_CTRL
[25:24]
SCB_SPI_CTRL
比特位
[25:24]
31
寄存器名
MODE
MASTER_MODE
值
描述
00
摩托罗拉 SPI 协议
01
德州仪器 SPI 协议
10
国家半导体 SPI 协议
11
预留
0
主设备模式
1
从设备模式
表 15-3 寄存器 SCB_TX_CTRL / SCB_RX_CTRL
SCB_TX_CTRL / SCB_RX_CTRL
比特位
寄存器名
[3:0]
DATA_ WIDTH
8
MSB_FIRST
31
ENABLED
MODE
描述
数据传输中帧的长度等于
“DATA_WIDTH + 1”(如果应用
于 UART 协 议 , 不 包 括 开 始
位,停止位和奇偶校验位);该
寄存器有效值的范围为 [3, 15]。
1:MSB 在前;
0:LSB 在前;
使能或禁止发送器与接收器;在
任何协议的数据传输中,都需要
使能它们。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
31
ENABLED
值
描述
00
I2C 协议
01
SPI 协议
10
UART 协议
11
预留
0
SCB 禁止
1
SCB 使能
如果需要对 SCB 进行配置,必须首先禁止 SCB,在配
置完成后,重新使能 SCB,所有的配置将在使能后生效。
注意重新使能 SCB 会带来重新的初始化,相关的状态也
会丢失,如 FIFO 队列的数据。在配置中,使能 SCB 模
块必须放在最后一步。
15.2.9
SPI 的时钟模式
对 SPI 和 I2C 协议,SCB 的操作可以支持内部时钟模式
和外部时钟模式。内部时钟模式中,SCB 使用芯片本身
提供的高频时钟(来自于 IMO);外部时钟模式中,
SCB 使用串行接口的同步时钟。在深度睡眠模式下,芯
片内部不提供高频时钟,此时 SCB 的操作只能够工作在
外部时钟模式。
当 SCB 为主设备时,所有的操作只能够工作在内部时钟
模式;当 SCB 为从设备时,可以选择工作在内部时钟模
式或者外部时钟模式。如果 SCB 的操作(对 SPI,从地
址选择操作除外;对 I2C,从地址匹配操作除外)工作在
外部时钟模式,其内部的 16 x 16bitSRAM 不能够支持
TXFIFO 或 RXFIFO 的功能,只能够作为 EZ 存储器,所
以此时 SCB 实现的 SPI 或 I2C 只能工作在 EZ 模式。
91
串行通信模块 (SCB)
在内部时钟模式中,SCB 的时钟来自于芯片内部的高频
时钟,详情请参考时钟章节。此时 SCB 支持对接收的数
据进行过采样,寄存器 OVS(SCB_CTRL[3:0])定义了
过采样率,过采样率(SCB 工作时钟除以接口速率)等
于 OVS+1。SCB 在不同寄存器设置下对过采样率的限制
如表 15-6 所列,更多详情请参考寄存器用户手册。
表 15-6 最小过采样率
最小过采样率
最大比特率(SCB 工作时钟为 48MHz)
MEDIAN = 0;LATE_MISO_SAMPLE = 0
6
8 Mbps
MEDIAN = 0;LATE_MISO_SAMPLE = 1
3
16 Mbps
MEDIAN = 1;LATE_MISO_SAMPLE = 0
8
6 Mbps
MEDIAN = 1;LATE_MISO_SAMPLE = 1
4
12 Mbps
寄存器设置
通过寄存器 SCB_CTRL 中的如下两位,可以配置 SCB
中操作的外部时钟模式或内部时钟模式:
 EC_AM_MODE:该位为 0 时,SPI 的从设备选择工
作在内部时钟模式;该位为 1 时,SPI 的从设备选择
工作在外部时钟模式。
 EC_OP_MODE:该位为 0 时,SPI 的其它协议操作
工作(包括所有的数据传输)在内部时钟模式;该位
为 1 时,SPI 的其它协议操作工作在外部时钟模式。
这两个寄存器位共同决定了 SCB 所实现 SPI 控制器的行
为特性,在 PSoC 4 不同的电源模式下,它们必须被正
确的配置,否则会导致错误的操作。
15.2.9.1
非 EZSPI 的时钟模式
在非 EZ 模式的 SPI 协议中,EC_OP_MODE 必须设置
为 0;而 EC_AM_MODE 可以设置为 0 或者 1。其它的
设置是不被支持或者无效的。如表 15-7 所示。
92
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
表 15-7 非 EZ 模式 SPI 协议的时钟模式设置
非 EZ 模式的 SPI 协议
EC_OP_MODE = 0
电源模式
活动和睡眠
深度睡眠
EC_AM_MODE = 0
EC_AM_MODE = 1
从设备选择和其它协议操
作均工作在内部时钟模式
(适用于主设备和从设
备)
从设备选择工作在外部时
钟模式,其它协议操作工
作在内部时钟模式,唤醒
中断被屏蔽(仅适用于从
设备)
不支持
从设备选择工作在外部时
钟模式,一旦从设备选择
信号有效,产生中断唤醒
CPU(仅适用于从设备)
EC_OP_MODE = 1
EC_AM_MODE = 1
EC_AM_MODE=0
不支持
不支持
不支持
休眠
停止
SCB 在这两种电源模式下无法工作(请参考电源模式章节)
EC_AM_MODE = 0,EC_OP_MODE = 0:该配置仅在
活动和睡眠电源模式中有效。此时,SCB 实现的 SPI 控
制器完全工作在内部时钟模式,能够提供所有的功能。
EC_AM_MODE = 1,EC_OP_MODE = 0:该设置在活
动、睡眠和深度睡眠的电源模式中均有效。当外部时钟
逻辑检测到从设备选择信号有效时,SCB 的唤醒中断请
求位 WAKE_UP(SCB_INTR_SPI_EC[0])将被置位,
它可以用于唤醒 CPU。
 在活动和睡眠电源模式中,从设备选择工作在外部时
钟模式(由于此时内部时钟也存在,从设备选择信号
也会被内部时钟逻辑采样);其它协议操作工作在内
部时钟模式。在活动模式中,唤醒中断请求被屏蔽
(SCB_INTR_SPI_EC_MASK[0] = 0);在睡眠模
式中,唤醒中断是否被屏蔽,用户可以自己设置。
 在深度睡眠电源模式中,唤醒中断请求未被屏蔽
(SCB_INTR_SPI_EC_MASK[0] = 1)。当从设备
选择信号有效时,SCB 会触发中断唤醒 CPU。唤醒
过程需要一定的时间,所以当前数据帧的传输不被从
设备响应(从设备由 SOMI 向主设备传输 0xff,主设
备会重发此帧)。唤醒以后,从设备选择工作在外部
时钟模式;其它协议操作工作在内部时钟模式。
15.2.9.2
EZSPI 的时钟模式
在 EZ 模式的 SPI 协议中,当 EC_OP_MODE 为 0 时,
EC_AM_MODE 可以是 0 或者 1;当 EC_OP_MODE 为
1 时,EC_AM_MODE 必须为 1。如表 15-8 所示,表中
的 灰 色 单 元 格 表 示 该 配 置 ( EC_AM_MODE = 1 ,
EC_OP_MODE = 0)是有效的,但是不推荐使用,因为
这涉及到从外部时钟逻辑向内部时钟逻辑切换的问题。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
93
串行通信模块 (SCB)
表 15-8 EZ 模式 SPI 协议的时钟模式设置
SPI, EZ mode
EC_OP_MODE = 0
电源模式
活动和睡眠
深度睡眠
EC_OP_MODE = 1
EC_AM_MODE = 0
EC_AM_MODE = 1
EC_AM_MODE = 1
从设备选择和其它协议操
作均工作在内部时钟模式
(仅适用于从设备)
从设备选择工作在外部时
钟模式,其它协议操作工
作在内部时钟模式,唤醒
中断被屏蔽
(仅适用于从设备)
从设备选择和其它协议操
作均工作在外部时钟模式
(仅适用于从设备)
不支持
从设备选择工作在外部时
钟模式,一旦从设备选择
信号有效,产生中断唤醒
CPU
(仅适用于从设备)
从设备选择和其它协议操
作均工作在外部时钟模式
(仅适用于从设备)
EC_AM_MODE=0
不支持
休眠
停止
SCB 在这两种电源模式下无法工作(请参考电源模式章节)
EC_AM_MODE = 0,EC_OP_MODE = 0:该配置仅在
活动和睡眠电源模式中有效。此时,SCB 实现的 SPI 控
制器完全工作在内部时钟模式,能够提供所有的功能。
EC_AM_MODE = 1,EC_OP_MODE = 0:EZSPI 的该
时钟模式与非 EZSPI 中对应的时钟模式相同。
EC_AM_MODE = 1,EC_OP_MODE = 1:该设置在活
动、睡眠和深度睡眠的电源模式中均有效。
 在活动和睡眠电源模式中,从设备选择和其它协议操
作均工作在外部时钟模式。由于此时内部时钟也存在,
如果外部时钟逻辑和内部时钟逻辑同时访问 EZ 存储
器 , 就 会 引 起 冲 突 。 通 过 将 寄 存 器 位 BLOCK
(SCB_CTRL[17])置位,可以阻止内部时钟逻辑对
EZ 存储器的访问,避免冲突。如果未被阻止,并且
与外部时钟逻辑的访问发生了冲突,那么内部时钟逻
辑的访问会发生异常(读操作返回 0xFFFFFFFF,写
操作被忽略),并且触发一个访问冲突中断请求,
寄 存 器 位 BLOCKED ( SCB_INTR_TX[7] 和
SCB_INTR_RX[7]),该中断请求时可以被屏蔽的。
 在深度睡眠模式中,从设备选择和其它协议操作均工
作在外部时钟模式。从设备中的 EZ 存储器完全由外
部主设备操作。
15.3
通用异步收发(UART)协议
通用异步收发协议(UART)定义了一种串行异步接口,
其拓扑一般是点到点的结构。UART 是一种全双工的协
议,主要有两个信号:
15.3.1 特性
SCB 实现 UART 协议时,有如下特性:
 串行数据收发;
 数据传输率最高为 1Mbps;
 支持多种 UART 协议;
❒ 标准 UART 协议;
❒
SmartCard(ISO7816)协议,较前者加入了错
误响应机制;
❒
红外串行数据(IrDA)协议,对普通 UART 信号
进行红外调制和解调;
 支持 LIN(Local Interconnect Network)的主从模式
❒ Break 检测;
❒
波特率检测;
❒
冲突检测;
 支持多处理器模式;
 数据帧长度可配置,范围从 4 比特到 16 比特(不包
括开始位,停止位和奇偶校验位);
 停止位个数可配置;
 支持奇偶校验;
 支持中断和轮询两种方式与 CPU 通信;
 支持对接收的数据进行过采样。
15.3.2
概述
图 15-8 给出了一个 UART 通信的示例。
图 15-8 UART 通信示例
 TX:发送器输出;
 RX:接收器输入;
TX
RX
UART
UART
RX
94
TX
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
UART 协议中一个典型的数据帧由开始位,数据位,奇
偶校验位和停止位组成。开始位的逻辑值为 0,它标志一
个数据帧的开始;数据位是需要传输的信息;奇偶校验
位是可选的,它的值取决于所有数据位逻辑值求和结果
的奇偶性;停止位的逻辑值为 1,它的长度可配置。当
UART 总线处于空闲态时,其逻辑值为 1(电路中通过电
阻上拉实现),如同停止位。
UART 是一个异步的通信协议,收发两端的设备都使用
各自内部的时钟接收和发送数据,如图 15-8,它们必须
在数据传输的波特率上保持一致。
SCB 支持多种 UART 协议,如下:
 标准 UART 协议;
 SmartCard 协议(ISO7816),与前者类似,但是加
入了错误响应机制;
 红外串行数据(IrDA)协议,对普通 UART 信号进行
了红外调制和解调;
UART 数据传输帧长度的配置范围是 4 比特到 9 比特,
缺省配置下为 8 比特,开始位、停止位和校验位不计入
数据帧的长度。停止位的长度可配置为 1 比特、2 比特或
3 比 特 。 在 标 准 UART 协 议 的 非 多 处 理 器 模 式 和
SmartCard 协议中,校验位是可选的,如果使用,可以
是偶检验或者奇校验;在标准 UART 协议的多处理器模
式和 IrDA 协议中,检验位是被禁止的。
15.3.3
15.3.3.1
UART 协议介绍
标准 UART 协议
UART 协议中一个典型的数据帧由开始位,数据位,奇
偶校验位和停止位组成。开始位的逻辑值为 0,它标志一
个数据帧的开始;数据位是需要传输的信息;奇偶校验
位是可选的,它的值取决于所有数据位逻辑值求和结果
的奇偶性;停止位的逻辑值为 1,它的长度可配置。当
UART 总线处于空闲态时,其逻辑值为 1,如同停止位。
由于 UART 协议是异步的,所以发送器和接收器必须约
定一个比特位的时间长度,它的倒数即为波特率。发送
器和接收器拥有各自的工作时钟,如果接收器的工作时
钟频率高于波特率,那么可以对接收到的数据进行过采
样,并应用数字滤波的手段来提高信噪比。
从停止位(1)到开始位(0)有一个下降沿。通过每个
数据帧传输开始的下降沿,接收器的时钟可以与发送器
的时钟进行同步。这个同步机制可以弥补收发时钟之间
频偏带来的影响,对频偏的容忍度取决于数据帧的长度
以及接收器对数据建立保持时间的要求。
数据帧中停止位的长度是可编程的(范围 1bit – 3bit),
但需要发送器与接收器在处理上达成一致。图 15-9 给出
了一个数据帧的结构,它包含 1 个开始位,7 个数据位,
1 个奇偶检验位和 2 个停止位。
注意:由于 UART 设备只能工作在内部时钟模式,所以
只能工作在活动和睡眠工作模式。
图 15-9 标准 UART 协议中的一个数据帧
Two successive data transfers (7data bits, 1 parity bit, 2 stop bits)
TX / RX
IDLE
START
DATA
DATA
DATA
DATA
DATA
DATA
DATA
PAR
STOP
START
DATA
DATA
DATA
LEGEND:
TX / RX : Transmit or Receive line
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
95
串行通信模块 (SCB)
若接收器的数据采样时钟高于波特率,则接收器可以对一个比特位做一次采样,如图 15-10 所示;也可以对一个比特
位做多次采样,如图 15-11 所示,即过采样。后者可以提高信噪比,降低误码率。
图 15-10 单次采样
TX clock
TX / RX
IDLE
START
DATA
DATA
DATA
DATA
DATA
DATA
DATA
PAR
STOP
START DATA
DATA
DATA
RX clock
Sample points
Sample points
Synchronisation
Synchronisation
LEGEND:
TX / RX : Transmit or Receive line
图 15-11 多次采样(过采样)
TX clock
TX / RX
IDLE
START
DATA
DATA
DATA
DATA
DATA
DATA
DATA
PAR
STOP
START
DATA
DATA
DATA
RX clock
Sample points
Sample points
Synchronisation
Synchronisation
LEGEND:
TX / RX : Transmit or Receive line
96
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
多处理器模式(UART_MP)
UART_MP(Multi-Processor)模式针对一主多从的应用,图 15-12 给出了拓扑。UART_MP 模式是标准 UART 协议的
一部分,也被称为 9 比特 UART,该模式下的数据帧的长度始终为 9 比特。
图 15-12 UART 多处理器模式的拓扑
UART_MP master
TX
RX
Master TX
Master RX
TX
TX
RX
UART_MP slave 1
TX
RX
UART_MP slave 2
RX
UART_MP slave 3
UART_MP 主要特性如下:
 一主多从的多节点网络拓扑结构;
 每个从设备有唯一的地址;
 数据帧的长度为 9 比特,由 8 比特数据和 1 比特地址/数据标志位(MP)组成,具体结构如图 15-13 所示。MP = 1
时,对应数据帧中的数据表示一个从设备的地址;MP = 0 时,对应数据帧中的数据表示一个字节的数据。
 无奇偶校验位。
图 15-13 UART_MP 中数据帧的结构
DATA Field
IDLE
START
DATA
DATA
DATA
DATA
DATA
在 UART_MP 中,SCB 可以作为主设备或者从设备。此
时,将 MP_MODE(SCB_UART_RX_CTRL[10])置位,
并配置寄存器 DATA_WIDTH( SCB_TX_CTRL[3:0]和
SCB_RX_CTRL[3:0]),将数据帧的长度设置为 9bit。
当 SCB 作为主设备时,数据帧中的 MP 需要根据当前帧
中数据的意义(数据或地址)而改变。当 SCB 作为从设
备时,需要通过寄存器 SCB_RX_MATCH 来配置从设备
的地址(包括一个地址寄存器和一个地址屏蔽寄存器)。
数据传输中,若从设备检测到接收到的地址与自身的不
匹配,则忽略后面的数据。当检测到地址匹配,从设备
开 始 接 收 数 据 。 如 果 寄 存 器 ADDRESS_ACCEPT
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
DATA
DATA
DATA
MP
STOP
(SCB_CTRL[16])为 1,则匹配的地址会先于数据被写
入 RXFIFO。
本地互连网络模式(LIN)
LIN 模式同样针对一主多从的应用,与前者不同的是,
LIN 总线的宽度为 1 比特,TX 和 RX 通过 LIN 收发器共
用一根数据总线,如图 15-14 所示。在 LIN 中,主节点
包含主任务和从任务;而从节点只有从任务。更多相关
信息请参考“LIN 规范”。
SCB 能够作为 LIN 总线中的主节点或者从节点,总线拓
扑如图 15-14 所示。
97
串行通信模块 (SCB)
图 15-14 LIN 总线的拓扑结构
LIN master
LIN slave 1
UART_LIN
UART_LIN
TX
RX
LIN transceiver
TX
LIN slave 2
RX
LIN transceiver
LIN bus
在 LIN 总线上,数据传输是以帧的形式进行的,具体
如下。
 帧头:由主任务发送到从任务,在主任务的 TX 信号
线和从节点的 RX 信号线上传输。帧头具体由以下几
个场组成:
❒ 间隔场:持续不少于 13 个比特周期的逻辑 0;
❒
同步场:数据值为 0x55,用于同步主任务和从任
务的时钟;
❒
标识符场:包含于指定从任务通信的内容。
 帧相应:有从任务发送到主任务,在主任务的 RX 信
号线和从节点的 TX 信号线上传输。
LIN 总线中的数据传输有主任务负责发起,从任务负责响
应。当 SCB 作为从节点时,提供波特率检测(在同步场
中进行)和间隔场长度检测。除间隔场,其它传输都是
以 8 比特长度(不包含开始位和停止位)的帧格式
进行的。
为了兼容 LIN 总线的物理层要求(总线宽度和电平标
准),SCB 必须通过 LIN 收发器才可以被应用于 LIN 总
线的通信。在通信中,SCB 可以通过比较 RX 和 TX 信
号线上的数据来判断是否有总线冲突发生,如果 RX 和
TX 信号线上的数据不同,则寄存器 UART_ARB_LOST
(SCB_INTR_TX[10])被置位,触发一个总线冲突中断。
配置
通过下列的寄存器配置,可使 SCB 工作在标准 UART 协
议下。
1. 将 SCB_MODE(SCB_CTRL[25:24])设置为 10,
选择 UART 协议;
2. 将 MODE(SCB_UART_CTRL[25:24])设置为 00,
进一步选择标准 UART 协议;
3. 如果要使能 UART_MP 模式,将寄存器
UART_MP_MODE(SCB_UART_RX_CTRL[10])
置位;如果要使能 LIN 模式,将寄存器
98
UART_LIN_MODE(SCB_UART_RX_CTRL[11])
置位;
4. 根据章节 15.3.6(UART 的初始化)中的步骤 2-4,
对 SCB 实现的 UART 控制器进行初始化和使能。
注意:上述的这些配置都可以在 PSoC Creator 中通过图
形用户界面完成,我们更推荐这种设计方式。如果需要
更多的了解寄存器的信息,请参考 PSoC 4 的寄存器用
户手册。
15.3.3.2
SmartCard (ISO7816) 协议
15.3.3.2.1 简介
SmartCard (ISO7816) 是一个异步串行通信协议,针对
一主多从的应用。SCB 只能作为 SmartCard 协议中的主
设备(读卡器)。SCB 可以进行异步的字符通信,为
SmartCard 协议提供基本的物理层支持。SCB 的 TX 信
号线在 SmartCard 协议中作为 IO 信号线,此时 SCB 内
部的发送与接收模块通过多路器分时连接到 TX 信号线上。
SmartCard 协议的数据帧与标准 UART 数据帧类似,额
外加入了否定应答机制 (NACK),它的逻辑值为 0。
图 15-15 给出了 SmartCard 协议中的两种数据帧格式,
一种不带 NACK,另一种带 NACK。如图所示,发送器
首先驱动 IO 信号线,依次传输开始位,数据位,奇偶校
验位,然后释放对信号线的控制(由于上拉电阻的关系,
信号线的逻辑值为 1,相当发送器传输停止位),此时会
有两种情况发生。第一种情况,接收器不传输 NACK,
停止位持续两个比特位长度后,发送器开始下个数据帧
的传输;第二种情况,接收器在停止位持续一个比特位
长度后,拉低信号线,传输 NACK 到发送器,表示否定
应答。发送器接收到 NACK,再传输一个比特位长度的
停止位,开始下个数据帧的传输。在 SmartCard 协议中,
停止位的长度需要大于一个比特。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
图 15-15 SmartCard 协议中数据帧的结构
Two successive data transfers (7data bits, 1 parity bit, 2 stop bits) without NACK
TX / RX
IDLE
START
DATA
DATA
DATA
DATA
DATA
DATA
DATA
PAR
STOP
START
DATA
DATA
DATA
DATA
DATA
Two successive data transfers (7data bits, 1 parity bit, 2 stop bits) with NACK
TX / RX
IDLE
START
DATA
DATA
DATA
DATA
DATA
DATA
DATA
PAR
STOP
NACK
STOP
START
LEGEND:
TX / RX : Transmit or Receive line
在 SmartCard 协议中,串行通信的波特率计算方法如下:
Baud rate= f7816 * (D / F)
其中
f7816 是工作时钟的频率;
注意:上述的这些配置都可以在 PSoC Creator 中通过图
形用户界面完成,我们更推荐这种设计方式。如果需要
更多的了解寄存器的信息,请参考 PSoC 4 的寄存器用
户手册。
15.3.3.3
F 是时钟速率转换系数;
IrDA 协议
15.3.3.3.1 简介
D 是波特率调整系数;
举例说明:当 F=372,D=1,工作时钟选择为 3.57MHz,
则波特率为 9600。
15.3.3.2.2 配置
通过下列的寄存器配置,可使 SCB 工作在 SmartCard
协议下。
1. 将寄存器 SCB_MODE(SCB_CTRL[25:24])设置为
10,选择 UART 协议;
2. 将寄存器 SCB_UART_MODE(SCB_UART_CTRL
[25:24])设置为 01,进一步选择 SmartCard 协议;
3. 根 据 章 节 15.3.6 中 的 步 骤 2-4, 对 SCB 实 现 的
UART 控制器进行初始化和使能。
IrDA 协议与标准 UART 协议在数据链路层上相同,只是
在物理层上对信号做了红外调制和解调。这里的调制采
用了 RZI(Return-to-Zero-Inverted)格式,即数据线上
的逻辑 0 被调制为一个高脉冲,脉冲宽度取决于波特率;
逻辑 1 被调制为零电平。SCB 支持红外串行数据协议物
理层规格的 1.4 版本,最高波特率可达 115200。
SCB 实现的 IrDA 协议支持的波特率包括 2400、9600、
19200、38400、57600 和 115200,高脉冲的宽度为
3/16 的 比 特 位 时 间 长 度 。 通 过 寄 存 器 OVS
(SCB_CTRL[3:0]),数据采样时钟应当被设置为波特
率的 16 倍。
图 15-16 IrDA 协议中数据帧的结构
Two successive data transfers (7data bits, 1 parity bit, 2 stop bits)
TX / RX
IDLE
START
‘1'
‘0'
‘1'
‘1'
‘0'
‘0'
‘1'
PAR
STOP
START
‘0'
‘1'
‘1'
‘1'
IrDA
TX / RX
LEGEND:
TX / RX : Transmit or Receive line
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
99
串行通信模块 (SCB)
15.3.3.3.2 简介
通过下列的寄存器配置,可使 SCB 工作在 IrDA 协议下。
1. 将寄存器 SCB_MODE(SCB_CTRL[25:24])设置为
10,选择 UART 协议;
2. 将寄存器 SCB_UART_MODE(SCB_UART_CTRL
[25:24])设置为 10,进一步选择 IrDA 协议;
3. 根 据 章 节 15.3.6 中 的 步 骤 2-4, 对 SCB 实 现 的
UART 控制器进行初始化和使能。
注意:上述的这些配置都可以在 PSoC Creator 中通过图
形用户界面完成,我们更推荐这种设计方式。如果需要
更多的了解寄存器的信息,请参考 PSoC 4 的寄存器用
户手册。
15.3.4
UART 相关寄存器
UART 协议相关的寄存器如表 15-9 所列,更多寄存器的
信息请参考 PSoC 4 的寄存器用户手册
表 15-9 UART 相关寄存器
寄存器名称
SCB_UART_CTR
L
SCB_UART_RX_
STATUS
SCB_UART_TX_
CTRL
SCB_UART_RX_
CTRL
SCB_TX_CTRL
SCB_RX_CTRL
100
描述
选择标准 UART 协议、SmartCard 协
议或者 IrDA 协议;
本地自环控制;
指示一个比特周期包含外设时钟周期
的个数(检测波特率时有效)
配置停止位的个数;
使能或者禁止奇偶校验位;
选择奇校验或者偶校验;
使能或者禁止数据帧的重发(仅适用
于 SmartCard 协 议 中 RX 端 发 送
NACK 时)
配置停止位的个数;
使能或者禁止奇偶校验位;
选择奇校验或者偶校验;
选择 UART_MP 模式;
选择 UART_LIN 模式;
配置校验错误时是否丢弃当前数据帧
使能或者禁止发送器;
选择数据帧的长度;
选择 MSB 在前或者 LSB 在前;
使能或者禁止接收器;
选择数据帧的长度;
选择 MSB 在前或者 LSB 在前;
使能或者禁止中值滤波器(对 IrDA
协议,必须始终使能)
15.3.5
UART 的中断
SCB 在某些事件发生时,可以触发中断,用户可以在
PSoC Creator 中通过图形用户界面选择中断触发事件。
设计中,PSoC Creator 可以自动生成中断服务程序,用
户也可以自定义中断服务程序。与 UART 相关的中断
包括:







UART 发送完毕;
UART 的发送器接收到 NACK(SmartCard 协议);
UART 仲裁丢失(LIN 和 SmartCard 协议);
帧传输错误
奇偶校验失败
波特率检测完成(LIN 协议)
间隔场检测成功(LIN 协议)
上述中断指向同一个中断向量,一旦其中一个未被屏蔽
的中断被触发,则该中断向量被读取,CPU 转入中断服
务程序处理该中断,查询中断寄存器进一步确认具体的
中断触发事件。
15.3.6
UART 的初始化
在 SCB 中,实现 UART 的初始化步骤如下:
1. 配置寄存器 SCB_UART_CTRL(如表 15-10),选
择具体的 UART 协议种类,进行环回配置;
2. 通过寄存器 SCB_TX_CTRL 和 SCB_RX_CTRL(如
表 15-11),配置通用发送器与接收器,具体包括:
 数据帧的长度;
 高有效位 ( MSB)在 前或者低有效位 ( LSB)
在前;
 使能发送器或者接收器;
3. 通过寄存器 SCB_TX_FIFO_CTRL 和 SCB_RX_FIFO_
CTRL(如表 15-12),配置发送和接收的 FIFO 队列,
具体包括:
 选择触发门限;
 清除 FIFO 队列和移位寄存器;
 暂时冻结发送器和接收器;
4. 通过寄存器 SCB_CTRL(如表 15-13),选择工作
协议(SPI、UART 或者 I2C),使能 SCB 模块。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
表 15-10 寄存器 SCB_UART_CTRL
SCB_UART_CTRL
比特位
[25:24]
寄存器名
值
MODE
16
LOOP_BACK
描述
00
标准 UART 协议
01
SmartCard 协议
10
IrDA 协议
11
预留
自环回配置,置位时有效,发送器的输出直接由内部连接到接收器的输入。
表 15-11 寄存器 SCB_TX_CTRL / SCB_RX_CTRL
SCB_TX_CTRL / SCB_RX_CTRL
比特位
寄存器名
描述
[3:0]
DATA_ WIDTH
数据传输中帧的长度等于“DATA_WIDTH + 1”(如果应用于 UART
协议,不包括开始位,停止位和奇偶校验位);
该寄存器有效值的范围为 [3, 15]。
8
MSB_FIRST
1:MSB 在前;
0:LSB 在前;
31
ENABLED
使能或禁止发送器与接收器;在任何协议的数据传输中,都需要使
能它们。
表 15-12 寄存器 SCB_TX_FIFO_CTRL / SCB_RX_FIFO_CTRL
SCB_TX_FIFO_CTRL / SCB_RX_FIFO_CTRL
比特位
寄存器名
描述
[2:0]
TRIGGER_LEVEL
配置触发门限,如果 TXFIFO 中的数据个数大于该值或者 RXFIFO
中的数据个数小于该值,则会发生发送器触发事件或者接收器触发
事件。
16
CLEAR
置位时,发送器的 FIFO 或者接收器的 FIFO 及其移位寄存器将被
清零,并保持无效状态。
17
FREEZE
置位时,发送器或者接收器被暂时冻结,对它们的读或写无效,此
时 FIFO 队列的读写指针不会移动。
表 15-13 寄存器 SCB_CTRL
SCB_CTRL
比特位
[25:24]
31
寄存器名
MODE
ENABLED
值
描述
00
I2C 协议
01
SPI 协议
10
UART 协议
11
预留
0
SCB 禁止
1
SCB 使能
如果需要对 SCB 进行配置,必须首先禁止 SCB,在配
置完成后,重新使能 SCB,所有的配置将在使能后生效。
注意重新使能 SCB 会带来重新的初始化,相关的状态也
会丢失,如 FIFO 队列的数据。在配置中,使能 SCB 模
块必须放在最后一步。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
101
串行通信模块 (SCB)
15.4





I2C 协议
I2C(Inter Integrated Circuit)是一种两线制的串行通信
协议,被广泛应用于嵌入式设备中芯片之间的低速互连
通路,如单片机,ADC,DAC,EEPROM,温度传感器,
电源检测器等。
通过中值滤波器提高通信的可靠性;
10ns 或 50ns 的毛刺滤波器;
支持 EZ 模式;
从设备支持外部时钟模式;
CPU 通过中断或轮询与 SCB 通信;
如果使用 PSoC 4 的专用 SCB 模块来实现一个 I2C 接口,
那么 SCL 和 SDA 可以连接到哪些 IO 口上是有限制,具
体信息请查询器件手册。如果利用 PSoC 4 的 UDB 资源
来实现一个 I2C 接口,那么 SCL 和 SDA 可以通过 DSI
互连到任何一个 IO 口上。被用于 I2C 接口的 IO 口不能
够同时用于其他的用途。
15.4.1 特性
SCB 实现 I2C 协议时,有如下特性:
 支持主设备,从设备和主从设备模式;
 支持的速度等级包括:慢速模式(50 kbps),标准
速度模式(100 kbps),快速模式(400 kbps)和超
15.4.2 概述
快速模式(1000 kbps);
图 15-17 给出了 I2C 总线的示意图。
 支持 7 比特或者 10 比特的从地址空间;
 支持时钟延展和冲突检测;
 支持对接收数据进行过采样;
图 15-17 I2C 总线
VDD
Rp
Rp
SCL
SDA
I2C
Master
I2C Slave
 I2C 总线一共有两根信号线:
❒ 串行数据线(SDA)
❒
串行时钟线(SCL)
 同步串行数据传输,半双工,速率可配置;
 I2C 设备以集电极开路(漏极开路)的方式连接到总
线上,总线上需要接上拉电阻;
 一条总线上的每个 I2C 从设备拥有独一无二的 7bit 地
址,软件可寻址,通过软件的支持,PSoC 4 也支持
10 比特地址的寻址;
 主设备和从设备均可作为发送器和接收器;
 支持多主设备,当多个主设备同时发起数据传输时,
启动冲突检测和总线仲裁机制。
102
I2C Slave
I2C Slave
表 15-14 I2C 总线相关的术语
术语
描述
发送器
向总线发送数据的设备
接收器
从总线接收数据的设备
主设备
负责发起数据传输的设备,提供同步时钟,
并主导数据传输的开始与结束
从设备
被主设备选址的设备
多主设备
一条总线上有多个主设备的应用,需要启动
冲突检测和总线仲裁机制
总线仲裁
当总线上多个主设备同时发起数据传输时,
总线仲裁机制保证只有一个主设备能够驱动
总线的控制权
同步
同步机制确保了多个设备之间的时钟同步。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
I2C 是一个同步的串行通信接口。总线上的设备可以是主
设备,从设备或者主从设备。当一个主从设备被寻址时,
它的角色会切换为从设备。同一个时刻,总线上只允许
一个主设备工作,该主设备负责驱动总线的同步时钟,
并主导数据传输的开始与结束。首先介绍一些 I2C 协议
中的术语,如表 15-14 所示。
15.4.2.1
时钟延展
I2C 协议介绍
PSoC 4 的 SCB 能够对 I2C 的主从设备模式做最大化的
支持,具体如表 15-15。
模式
总线冲突检测与仲裁
描述
从设备
仅作为从设备(缺省设置)
主设备
仅作为主设备
主从设备
支持同时作为主设备和从设备
当工作在多主设备模式时,一个主设备(主设备 A)在
发起数据传输之前必须检测当前总线是否在另一个主设
备的控制下。如果总线被某一个主设备控制,那么必须
等待该主设备结束当前传输(输出 STOP),主设备 A
才可以开始发起数据传输(输出 START)。
当总线上多个主设备在同一时刻发起数据传输时,冲突
检测和仲裁机制能够保证数据不被丢失。当主设备侦测
到 SDA 上的逻辑值与自身驱动的值不符时,则检测到总
线冲突,并放弃对总线的控制。举例说明,主设备 1 向
SDA 驱动 1,同时主设备 2 同时驱动 0,此时它们检测
到 SDA 上实际的逻辑值为 0,那么主设备 1 检测到总线
冲突,放弃总线控制;主设备 2 未检测到冲突,继续控
制总线。
15.4.3.1
15.4.3
表 15-15 I2C 设备的操作模式
当总线上的数据率超出一个从设备的处理能力时,该从
设备可以选择将 SCL 拉低。此时无论主设备如何驱动,
都会检测到 SCL 上的逻辑值为 0,则暂停当前的数据传
输,这被称为时钟延展。这是由从设备驱动 SCL 的唯一
情况。当从设备完成数据处理后,会释放 SCL。主设备
在 SCL 上驱动上升沿,接管总线,恢复数据传输。
15.4.2.2
更多 I2C 协议的知识请参考官方的 I2C 协议标准
http://www.nxp.com/documents/user_manual/UM10204
.pdf
当工作在主从设备模式时,如果失去对总线的控制,则
该设备转换为一个从设备的角色。
下面介绍 I2C 协议中两个数据传输:写数据和读数据。
写数据
图 15-18 写数据传输
Write data transfer(Master writes the data)
SDA
MSB
LSB
SCL
START
Slave address (7 bits)
Write
ACK
SDA:
Serial Data line
SCL:
Serial Clock line(always driven by the master)
Data(8 bits)
ACK
STOP
Slave transmit / Master receive
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
103
串行通信模块 (SCB)
写数据传输可以简述如下:
 如果寻址被响应,主设备将通过 SDA 向从设备写数
据,从设备接收一帧数据后发送应答信号(ACK 或
者 NACK);
 如果主设备接收到 ACK,则开始发送下一帧;如主
设备接收到 NACK,则重发上一帧;
 当主设备写完所有的数据,输出 STOP 事件,结束本
次传输。
 主设备发起数据传输,输出 START 事件;
 主设备输出 7 比特的 I2C 从设备地址和写标志‘0’;
 主设备释放 SDA,被寻址的从设备拉低 SDA(发送
ACK),以表示对主设备寻址的响应;
 如果 SDA 没有被拉低(所有的从设备发送 NACK),
则说明当前总线上没有从设备的地址与该地址匹配,
此时主设备将直接输出 STOP 事件结束本次数据传输;
15.4.3.2
读数据
图 15-19 读数据传输
Read data transfer(Master reads the data)
SDA
MSB
LSB
SCL
START
Slave address (7 bits)
Read
ACK
Data(8 bits)
SDA:
Serial Data line
SCL:
Serial Clock line(always driven by the master)
ACK
STOP
Slave transmit / Master receive
读数据传输可以简述如下:
 主设备发起数据传输,输出 START 事件;
 主设备输出 7 比特的 I2C 从设备地址和读标志‘1’;
 主设备释放 SDA,被寻址的从设备拉低 SDA(发送
ACK),以表示对主设备寻址的响应;
 如果 SDA 没有被拉低(所有的从设备发送 NACK),
则说明当前总线上没有从设备的地址与该地址匹配,
此时主设备将直接输出 STOP 事件结束本次数据传输;
 如果寻址被响应,从设备将通过 SDA 向主设备发送
数据,主设备接收一帧数据后发送应答信号(ACK
或者 NACK);
 如果从设备接收到 ACK,则开始发送下一帧;如从
设备接收到 NACK,则重发上一帧;
 当主设备读完所有的数据,输出 STOP 事件,结束本
次传输。
15.4.4
EZI2C (Easy I2C) - I2C 的 EZ
模式
EZI2C(Easy I2C)协议允许从设备与主设备进行数据
通信而无需 CPU 的介入,协议共提供了两种传输方式:
104
写数据和读数据。在协议中,数据帧的长度只能为
8 比特。
和在 EZSPI 中的使用情况相同,在 EZI2C 中,SCB 中
的 SRAM 存储器作为 32 x 8bit 的 EZ 存储器使用。从设
备 中 EZ 存 储 器 的 地 址 存 放 在 寄 存 器 EZ_ADDR
(I2C_STATUS[15:8])中,主设备可以对该地址指向的
EZ 存储器的某个字节空间进行读写操作。由于 EZ 存储
器只有 32 个字节空间,所以 EZ 地址寄存器 EZ_ADDR
中只有低 5 比特是有效的。
如图 15-20 给出了 EZI2C 协议中读写操作的时序图。
在写操作中,首先主设备发起 START 事件并输出从设备
地址和写标志;被从设备响应后,主设备会发送 EZ 地址
(仅低 5 比特有效),更新从设备中的 EZ 地址寄存器
EZ_ADDR;被响应后,主设备对 EZ 地址寄存器指向的
字节进行写操作。当完成一次写操作后, EZ_ADDR 自
动累加 1,如果累加结果超出 31,则返回 0。
在读操作中,首先主设备发起 START 事件并输出从设备
地址和读标志。与写操作不同,读操作中,主设备跳过
了传输 EZ 地址的帧,后续读操作的对象所在的字节空间
位置取决于上一次写数据操作结束时 EZ_ADDR 中的值。
当完成一次读操作后,EZ_ADDR 累加 1,如果累加结果
超出 31,则返回 0。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
图 15-20 EZI2C 中的读写操作
Write data transfer(single write data)
MS
B
SDA
LS
B
SCL
Write ACK
START Slave address (7 bits)
EZ address(8 bits)
Write Data(8 bits)
ACK
ACK STOP
EZ address
Data
EZ Buffer
(32 bytes SRAM)
Address
Read data transfer(single read data)
SDA
MSB
LSB
SCL
START
Slave address (7 bits)
Read
ACK
SDA:
Serial Data line
SCL:
Serial Clock line(always driven by the master)
Read Data(8 bits)
ACK
STOP
Slave transmit / Master receive
15.4.5
I2C 相关寄存器
I2C 协议相关的寄存器如表 15-16 所列,更多寄存器的信息请参考 PSoC 4 的寄存器用户手册
表 15-16 I2C 相关寄存器
寄存器名称
SCB_CTRL
描述
使能或者禁止 SCB;
选择 SCB 工作的协议(SPI,UART 或者 I2C);
选择内部时钟模式或外部时钟模式;
选择 EZ 模式或者非 EZ 模式;
SCB_I2C_CTRL
选择主设备或者从设备模式;
配置从设备基于 FIFO 的何种状态发送 ACK 或者 NACK;
SCB_I2C_STATUS
总线状态标志位;
主设备或从设备的读写标志位;
EZ 存储器地址寄存器;
SCB_I2C_M_CMD
主设备发送 START,STOP,ACK 和 NACK 的命令寄存器
SCB_I2C_S_CMD
从设备发送 ACK 和 NACK 的命令寄存器
SCB_STATUS
在 EZ 模式中,指示 32 x 8bit 的 EZ 存储器是否正在被外部时钟逻辑访问。
SCB_TX_CTRL
使能或者禁止 I2C 的发送;
定义数据传输帧的长度(I2C 中数据帧长度只能为 8bit);
配置 MSB 在前或者 LSB 在前;
SCB_TX_FIFO_CTRL
配置 TXFIFO 的事件触发门限,该触发事件可以作为中断源;
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
105
串行通信模块 (SCB)
寄存器名称
描述
清除 TXFIFO;
冻结 TXFIFO;
SCB_TX_FIFO_STATUS
TXFIFO 中的数据个数;
指示当前 TX 移位寄存器中数据的有效性;
TXFIFO 的读指针与写指针寄存器;
SCB_TX_FIFO_WR
保存前一次压入发送 FIFO 队列的数据;
SCB_RX_CTRL
使能或者禁止 I2C 的接收;
定义数据传输帧的长度(I2C 中数据帧长度只能为 8bit);
配置 MSB 在前或者 LSB 在前;
SCB_RX_FIFO_CTRL
配置 RXFIFO 的事件触发门限,该触发事件可以作为中断源;
清除 RXFIFO;
冻结 RXFIFO;
SCB_RX_FIFO_STATUS
RXFIFO 中的数据个数;
指示当前 RX 移位寄存器中数据的有效性;
RXFIFO 的读指针与写指针寄存器;
SCB_RX_FIFO_RD
保存前一次接收 FIFO 队列弹出的数据,数据弹出后将从 FIFO 队列中删除,相当于 POP 操
作;
SCB_RX_FIFO_RD_SILENT
保存前一次接收 FIFO 队列弹出的数据,数据弹出后不从 FIFO 队列中删除,相当于 PEEK 操
作;
SCB_RX_MATCH
从设备地址寄存器和地址屏蔽寄存器
SCB_EZ_DATA
EZ 存储器
15.4.6
I2C 的中断
与 I2C 相关的中断包括:










仲裁失败;
从地址匹配;
检测到开始/停止条件;
检测到总线错误;
数据传输完成;
外部时钟模式的中断(详见 SCB_INTR_I2C_EC);
主设备模式的中断(详见 SCB_INTR_M);
从设备模式的中断(详见 SCB_INTR_M);
TXFIFO 的中断(详见 SCB_INTR_TX);
RXFIFO 的中断(详见 SCB_INTR_RX)。
上述中断指向同一个中断向量,一旦其中一个未被屏蔽
的中断被触发,则该中断向量被读取,CPU 转入中断服
务程序处理该中断,查询中断寄存器进一步确认具体的
中断触发事件。
15.4.7
I2C 的初始化
在 SCB 中,实现 I2C 的初始化步骤如下:
1. 配置寄存器 SCB_I2C_CTRL,选择主设备模式或从
设备模式;
2. 通过寄存器 SCB_TX_CTRL 和 SCB_RX_CTRL,
配置通用发送器与接收器,具体包括:
 数据帧的长度,对 I2C,数据帧的长度始终为 8;
106
 高有效位 ( MSB)在 前或者低有效位 ( LSB)
在前;
 使能发送器或者接收器;
3. 通过寄存器 SCB_TX_FIFO_CTRL 和
SCB_RX_FIFO_CTRL(如表 15-12),配置发送和
接收的 FIFO 队列,具体包括:
 选择触发门限;
 清除 FIFO 队列和移位寄存器;
 暂时冻结发送器和接收器;
4. 通 过 寄 存 器 SCB_CTRL , 选 择 工 作 协 议 ( SPI 、
UART 或者 I2C),使能 SCB 模块。
如果需要对 SCB 进行配置,必须首先禁止 SCB,在配
置完成后,重新使能 SCB,所有的配置将在使能后生效。
注意重新使能 SCB 会带来重新的初始化,相关的状态也
会丢失,如 FIFO 队列的数据。在配置中,使能 SCB 模
块必须放在最后一步。
15.4.8
I2C 的时钟模式
 EC_AM_MODE:该位为 0 时,I2C 的地址匹配工作
在内部时钟模式;该位为 1 时,I2C 的地址匹配工作
在外部时钟模式。
 EC_OP_MODE:该位为 0 时,I2C 的其它协议操作
工作(包括所有的数据传输)在内部时钟模式;该位
为 1 时,I2C 的其它协议操作工作在外部时钟模式。
15.4.8.1
非 EZI2C 的时钟模式
在非 EZ 模式的 I2C 协议中,EC_OP_MODE 必须设置
为 0;而 EC_AM_MODE 可以设置为 0 或者 1。其它的
设置是不被支持或者无效的。如表 15-17 所示。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
表 15-17 非 EZ 模式 I2C 协议的时钟模式设置
非 EZ 模式的 I2C 协议
EC_OP_MODE = 0
电源模式
活动和睡眠
深度睡眠
EC_OP_MODE = 1
EC_AM_MODE = 0
EC_AM_MODE = 1
从设备地址匹配和其它协议
操作均工作在内部时钟模式
(适用于主设备和从设备)
从设备地址匹配工作在外部
时钟模式,其它协议操作工
作在内部时钟模式,唤醒中
断被屏蔽(仅适用于从设
备)
不支持
从设备地址匹配工作在外部
时钟模式,一旦从设备地址
匹配成功,产生中断唤醒
CPU(仅适用于从设备)
EC_AM_MODE = 1
EC_AM_MODE=0
不支持
不支持
不支持
休眠
停止
SCB 在这两种电源模式下无法工作(请参考电源模式章节)
EC_AM_MODE = 0,EC_OP_MODE = 0:该配置仅在
活动和睡眠电源模式中有效。此时,SCB 实现的 I2C 控
制器完全工作在内部时钟模式,能够提供所有的功能。
EC_AM_MODE = 1,EC_OP_MODE = 0:该设置在活
动、睡眠和深度睡眠的电源模式中均有效。当外部时钟
逻辑检测到从设备地址匹配时,SCB 的唤醒中断请求位
WAKE_UP(SCB_INTR_I2C_EC[0])将被置位,它可
以用于唤醒 CPU。
 在活动和睡眠电源模式中,从设备地址匹配工作在外
部时钟模式;其它协议操作工作在内部时钟模式。在
活动模式中,唤醒中断请求被屏蔽(SCB_INTR_SPI
_EC_MASK[0] = 0);在睡眠模式中,唤醒中断是否
被屏蔽,用户可以自己设置。当从设备地址匹配成功
后,SCB 需要将 SDA 的操作由外部时钟逻辑切换到
内部时钟逻辑。这时有两种处理方式:向主设备发送
NACK(外部时钟逻辑不做任何操作),内部时钟逻
辑向主设备发送 ACK(必须在主设备的采样沿前发
生),并接管后面的数据传输;做时钟延展,由内部
时钟逻辑结束时钟延展后,向主设备发送 ACK,并
接管数据传输。通过配置 S_NOT_READY_ADDR_
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
NACK(SCB_I2C_CTRL[14]),可以选择具体的处
理方式。
 在深度睡眠电源模式中,唤醒中断请求被使能(SCB_
INTR_I2C_EC_MASK[0] = 1)。当从设备地址匹配
成功时,SCB 会触发中断唤醒 CPU。唤醒过程需要
一定的时间,所以当前数据帧的传输不被从设备响应。
这时有两种处理方式:向主设备发送 NACK,等待设
备被唤醒后,由内部时钟逻辑接管数据传输(此时如
果主设备重新发起数据传输,并且地址匹配成功,则
向主设备发送 ACK);做时钟延展,等待被唤醒后,
结束时钟延展,由内部时钟逻辑向主设备发送 ACK,
并接管数据传输。通过配置 S_NOT_READY_ADDR_
NACK(SCB_I2C_CTRL[14]),可以选择具体的处
理方式。
15.4.8.2
EZI2C 的时钟模式
在 EZ 模式的 I2C 协议中,当 EC_OP_MODE 为 0 时,
EC_AM_MODE 可以是 0 或者 1;当 EC_OP_MODE 为
1 时,EC_AM_MODE 必须为 1。如表 15-18 所示,表
中 的 灰 色 单 元 格 表 示 该 配 置 ( EC_AM_MODE = 1 ,
EC_OP_MODE = 0)是有效的,但是不推荐使用,因为
这涉及到从外部时钟逻辑向内部时钟逻辑切换的问题。
107
串行通信模块 (SCB)
表 15-18 EZ 模式 I2C 协议的时钟模式设置
I2C, EZ mode
EC_OP_MODE = 0
电源模式
活动和睡眠
深度睡眠
休眠
停止
EC_OP_MODE = 1
EC_AM_MODE = 0
EC_AM_MODE = 1
EC_AM_MODE = 1
从设备地址匹配和其它协
议操作均工作在内部时钟
模式
(仅适用于从设备)
从设备地址匹配同时工作
在外部时钟模式,其它协
议操作工作在内部时钟模
式,唤醒中断被屏蔽
(仅适用于从设备)
从设备地址匹配和其它协
议操作均工作在外部时钟
模式
(仅适用于从设备)
不支持
从设备地址匹配工作在外
部时钟模式,一旦从设备
地址匹配成功,产生中断
唤醒 CPU
(仅适用于从设备)
从设备地址匹配和其它协
议操作均工作在外部时钟
模式
(仅适用于从设备)
EC_AM_MODE=0
不支持
SCB 在这两种电源模式下无法工作(请参考电源模式章节)
EC_AM_MODE = 0,EC_OP_MODE = 0:该配置仅在
活动和睡眠电源模式中有效。此时,SCB 实现的 I2C 控
制器完全工作在内部时钟模式,能够提供所有的功能。
注 意 : 必 须 将 中 断 比 特 位 SCB_WAKE_UP ( SCB_
INTR_I2C_EC[0])使能,否则从地址匹配无法唤醒系统。
EC_AM_MODE = 1,EC_OP_MODE = 0:EZI2C 的该
时钟模式与非 EZI2C 中对应的时钟模式相同。
EC_AM_MODE = 1,EC_OP_MODE = 1:该设置在活
动、睡眠和深度睡眠的电源模式中均有效。
 在活动和睡眠电源模式中,从设备地址匹配和其它协
议操作均工作在外部时钟模式。由于此时内部时钟也
存在,如果外部时钟逻辑和内部时钟逻辑同时访问
EZ 存储器,就会引起冲突。通过将寄存器位 BLOCK
(SCB_CTRL[17])置位,可以阻止内部时钟逻辑对
EZ 存储器的访问,避免冲突。如果未被阻止,并且
与外部时钟逻辑的访问发生了冲突,那么内部时钟逻
辑的访问会发生异常(读操作返回 0xFFFFFFFF,写
操作被忽略),并且触发一个访问冲突中断请求,寄
存器位 BLOCKED(SCB_INTR_TX[7]和 SCB_INTR
_RX[7]),该中断请求时可以被屏蔽。
 在深度睡眠模式中,从设备地址匹配和其它协议操作
均工作在外部时钟模式。从设备中的 EZ 存储器完全
由外部主设备操作。
15.4.9
唤醒操作
作为从设备时,当 I2C 接口检测到从地址匹配,可以触
发中断。该中断能够将系统从睡眠/深度睡眠模式中唤醒。
唤醒需要一定的事件,此时 I2C 可以有两种操作:
 发送 ACK:检测到地址匹配后,执行时钟延展操作,
等待系统被唤醒后,发送 ACK;
 发送 NACK:检测到地址匹配后,立即发送 NACK,
主机在系统被唤醒后,重新发送从地址;
108
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
15.4.10 主设备模式数据传输示例
15.4.10.1 主设备发送数据
图 15-21 主设备发送数据的流程图
Begin
Default
TX fifo
Empty?
Disable SCB
E
Yes
No
No
(stretch)
Select I2C mode
Transmission of 1-byte
Data complete?
E
Error
Yes
Select Master
mode
Byte ACK’ed or
NACK’ed?
NACK
STOP/
RESTART
ACK
Enable
TX fifo
No
Data transfer
Complete?
Yes
Enable SCB
Send STOP
signal
STOP
Send START
signal
RESTART
No
(stretch)
Transmission of 1Byte slave address
Complete?
Begin
E
Error
Yes
E
Addr ACK’ed or
NACK’ed?
NACK
STOP/
RESTART
ACK
Report and
handle error
Set to transmit
mode
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
109
串行通信模块 (SCB)
15.4.10.2 主设备接收数据
图 15-22 主设备接收数据的流程图
Begin
Default
RX fifo
Full?
Disable SCB
E
Yes
No
Select I2C mode
Receiving 1-byte
Data complete?
No
Select Master
mode
E
Error
Yes
Send ACK
Enable
RX fifo
No
Data transfer
Complete?
Yes
Send NACK
STOP
Enable SCB
Send START
signal
Send STOP
signal
RESTART
No
(stretch)
Transmission of 1Byte slave address
Complete?
Begin
E
Error
Yes
E
Addr ACK’ed or
NACK’ed?
ACK
NACK
STOP/
RESTART
Report and
handle error
Set to receive
mode
110
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
15.4.11 从设备模式数据传输示例
15.4.11.1 从设备发送数据
图 15-23 从设备发送数据的流程图
Begin
Default
Tx fifo
empty?
Disable SCB
E
Yes
No
Select I2C mode
No
Select Slave
mode
Transmitting 1-byte
Data complete?
Error
E
Yes
Byte ACK’ed
or NACK’ed?
Enable
TX fifo
Begin
NACK
ACK
Enable SCB
No
Data Transfer
Complete?
Yes
START detected
Begin
No
(stretch)
Wake up
NACK
Receiving 1-Byte
slave address
Complete?
E
Error
Yes
Addr ACK’ed or
NACK’ed?
ACK
E
Set to transmit
mode
Report and
handle error
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
111
串行通信模块 (SCB)
15.4.11.2 从设备接收数据
图 15-24 从设备接收数据的流程图
Begin
Default
RX fifo
full?
Disable SCB
E
Yes
No
Select I2C mode
Receiving 1-byte
Data complete?
No
(stretch)
Select Slave
mode
Error
E
Yes
Send
ACK
Enable
RX fifo
No
Data Transfer
Complete?
Yes
Send
NACK
Enable SCB
START detected
No
(stretch)
Wake up
NACK
Receiving 1-Byte
slave address
Complete?
Begin
E
Error
Yes
Addr ACK’ed or
NACK’ed?
ACK
E
Set to receive
mode
Report and
handle error
112
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
15.4.12 EZ 模式的数据传输示例
15.4.12.1 EZ 从设备发送数据
图 15-25 EZ 模式从设备发送数据的流程图
Begin
Default
EZ buffer
empty
Disable SCB
E
Yes
No
Select I2C mode
No
Transmitting 1-byte
Data complete?
Error
E
Yes
Select Slave
mode
Byte ACK’ed
or NACK’ed?
Begin
NACK
ACK
Select EZ
mode
No
Data Transfer
Complete?
Enable
TX fifo
Yes
Begin
Enable SCB
START detected
No
(stretch)
Wake up
NACK
Receiving 1-Byte
slave address
Complete?
E
Error
E
Yes
Addr ACK’ed or
NACK’ed?
Report and
handle error
ACK
Select transmit
mode
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
113
串行通信模块 (SCB)
15.4.12.2 EZ 从设备接收数据
图 15-26 EZ 模式从设备接收数据的流程图
Default
Begin
Receiving 1-Byte
EZ address
Complete?
No
(stretch)
Disable SCB
Yes
Addr ACK’ed or
NACK’ed?
Begin
NACK
Select I2C mode
ACK
EZ buffer
full
Select Slave
mode
E
Yes
No
Select EZ
mode
Receiving 1-byte
Data complete?
No
(stretch)
Error
E
Yes
Enable
RX fifo
Send
ACK
Enable SCB
Wake up
Receiving 1-Byte
slave address
Complete?
Data Transfer
Complete?
Yes
Send
NACK
START detected
No
(stretch)
No
E
Begin
Error
Yes
E
NACK
Addr ACK’ed or
NACK’ed?
ACK
Report and
handle error
Select receive
mode
114
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
串行通信模块 (SCB)
15.4.13 多主设备总线上的数据传输示例
15.4.13.1 仅作为主设备
图 15-27 仅作为主设备的数据传输流程图
Begin
Default
Disable SCB
Select I2C mode
Select Master
mode
No
(stretch)
Enable
TX fifo
Transmission of 1Byte slave address
Complete?
E
Error
Yes
Lost arbitration?
Begin
Yes
Enable SCB
No
Continue with data transfer as
in single master
Bus Busy?
Yes
No
Send START
signal
E
Report and
handle error
Bus Busy?
Yes
No
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
115
串行通信模块 (SCB)
15.4.13.2 主从设备
图 15-28 主从设备的数据传输流程图
Begin
Default
Disable SCB
Select I2C mode
Select Master and
Slave mode
No
(stretch)
Enable
TX fifo
Transmission of 1Byte slave address
Complete?
E
Error
Yes
Bus busy or
Lost arbitration?
Enable SCB
Yes
No
Continue with data transfer as
in single master
Continue with address
recognition as a slave
Bus Busy?
Yes
No
Send START
signal
E
Report and
handle error
116
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
16 通用数字模块
本章介绍 PSoC 4 中通用数字模块(UDB)的设计。UDB 实现了配置灵活性和高效性的平衡。UDB 包含了通用可编程
逻辑器件(PLD:Programmable Logic Device),数据通道处理器(DP: DataPath),状态与控制模块(SC: Status
and Control),复位与时钟模块(RC: Reset and Clock)及它们之间的互连信号通道。
16.1
b.
特征
为达到最佳的灵活性,每个UDB包含如下几个组件:
一个基于算术逻辑单元的数据通道处理器(DP),包括指令存储器,寄存器和FIFO队列;
❒
2个PLD,每个PLD有12个输入,8个乘积项和4个宏单元输出;
❒
状态与控制(SC)模块;
❒
复位与时钟(RC)模块;
为多个UDB组成的阵列提供了高度灵活的互连方案;
同一时刻,UDB中的不同模块可用于实现不同的逻辑功能模块;
多个UDB可以被级联,来设计更复杂的逻辑功能模块;
UDB能够实现的逻辑功能包括定时器,计数器,脉冲宽度调试器(PWM,带死区),UART收发器,I2C收发器,
SPI收发器,循环冗余校验(CRC:Cyclic Redundancy Check)和伪随机序列(PRS:Pseudo Random
Sequence)发生器;
CPU可以通过寄存器与UDB通信。
❒
c.
d.
e.
f.
g.
图 16-1 给出了 UDB 的内部框图,其中包括 2 个 PLD,1 个 DP,时钟与复位模块,状态与控制模块以及它们之间的
互连。
图 16-2 给出了由 4 个 UDB 组成的一个 UDB 阵列及其接口。
图 16-1. UDB 框图
图 16-2. UDB 阵列
AHB Bridge CPUSS
PLD
Chaining
UDBIF
BUS IF IRQ IF CLK IF
Datapath
Datapath
Chaining
Other Digital
Signals in Chip
Status and
Control
4 to 8
DSI
Port
Port
IF
PortIF
IF
DSI
UDB
UDB
UDB
UDB
High Speed IO Matrix
Clock
and Reset
Control
8 to 32
PLD
12C4
(8 PTs)
PLD
12C4
(8 PTs)
Dig. CLKS
Routing
Channels
Routing Channel
DSI
DSI
Programmable Digital Subsystem
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
117
通用数字模块
16.2
16.2.1
工作原理
The major components of a UDB are:
一个 UDB 主要由以下几个部分组成:
■
■
■
■
■
■
■
PLD(2 个) - PLD 可以通过逻辑运算实现状态机,
以及对 DP 操作,条件判决输入和驱动输出的控制;
DP - 这个模块包含一个动态可编程的算术逻辑单元,
4 个寄存器,2 个 FIFO 队列,比较器和条件判决器;
SC 模块 - 这个模块为 CPU 的软件与 UDB 之间的
通信提供接口;
RC 模块 - 这个模块为 UDB 中其它模块提供时钟源
的选择与使能,以及复位源的选择;
级联信号 - 通过级联信号,相邻的 UDB 可以级联,
实现更加复杂的逻辑功能;
互连通道 - 通过一个可编程的开关阵列,UDB 的内
部模块被连接到互连通道;
系统总线接口 - UDB 中所有的寄存器与随机存取存
储器(RAM)都被映射到系统的地址空间,CPU 可
以通过 8-bit 和 16-bit 的位宽访问它们。
PLD
每个 UDB 包含 2 个“12C4”结构的 PLD 模块,“12C4”结
构 主 要 由 与 门 阵 列 ( AND Array ) 、 或 门 阵 列 ( OR
Array)和宏单元(MC:MacroCell)组成,如图 16-3。
PLD 可以用来实现状态机,执行输入输出数据的条件判
决,以及创建查找表(LUTs: Look-Up Tables)。通过
配置,PLD 也可以执行算术运算,或者控制 DP 按照一
定的配置字序列工作并产生不同的状态。PLD 可以用通
用的 RTL 代码来进行设计。
1 个 PLD 中,12 个数字信号被输入到与门阵列分别与 8
个乘积项进行与运算,在输入之前,数字信号可以被选
择是否先进行非运算。与门阵列的输出被输入到或门阵
列,“12C4”中的 C 表示对所有的输入,或项是一个常数,
通过编程,或门的输入可以是任意一个或者所有的乘积
项。“12C4”结构赋予了逻辑运算最大的灵活性,并且保
证了所有的输入与输出都是可置换的。
PT0
PT1
PT2
PT3
PT4
PT5
PT6
PT7
图 16-3. PLD 中的 12C4 结构
IN0
TC
TC
TC
TC
TC
TC
TC
TC
IN1
TC
TC
TC
TC
TC
TC
TC
TC
IN2
TC
TC
TC
TC
TC
TC
TC
TC
IN3
TC
TC
TC
TC
TC
TC
TC
TC
IN4
TC
TC
TC
TC
TC
TC
TC
TC
IN5
TC
TC
TC
TC
TC
TC
TC
TC
IN6
TC
TC
TC
TC
TC
TC
TC
TC
IN7
TC
TC
TC
TC
TC
TC
TC
TC
IN8
TC
TC
TC
TC
TC
TC
TC
TC
IN9
TC
TC
TC
TC
TC
TC
TC
TC
IN10
TC
TC
TC
TC
TC
TC
TC
TC
IN11
TC
TC
TC
TC
TC
TC
TC
TC
AND
Array
SELIN
(carry in)
OUT0
MC0
T
T
T
T
T
T
T
T
OUT1
MC1
T
T
T
T
T
T
T
T
OUT2
MC2
T
T
T
T
T
T
T
T
OUT3
MC3
T
T
T
T
T
T
T
T
SELOUT
(carry out)
16.2.1.1
OR
Array
PLD 的宏单元
宏单元的架构如图 16-4 所示。在宏单元中,逻辑运算的结果作为输出信号驱动互连阵列,它有组合逻辑或者时序逻辑
两种模式,其中的差别在于是否与 PLD 的时钟进行同步。在初始化中,或者有互连信号控制的异步操作中,输出寄存
器可以被置位或者复位。每个宏单元有 7bit 的配置寄存器,它们分别位于 PLD RAM 的四个字节中。
118
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-4 PLD 中宏单元的架构
XOR Feedback
00: D FF
01: Arithmetic (Carry)
10: T FF on high
11: T FF on low
(from previous macrocell)
XORFB[1:0]
Set Select
0: Set not used
1: Set from input
SSEL
selin
Special Product Term
Inputs
3
cpt1
cpt0
CONST
1
1
2
1
0
0
To macrocell
read-only register
Constant
0: D FF true in
1: D FF inverted in
0
1
out
set
D Q
sum
clk
0
QB
res
pld_en
reset
1
0
COEN
Carry Out Enable
0:Carry Out disabled
1: Carry Out enabled
Output Bypass
0: Registered
1: Combinational
BYP
Reset Select
0: Set not used
1: Set from input
RSEL
selout
(to next macrocell)
1 个 UDB 中的 8 个宏单元能够作为一个 8 比特的只读寄存器被 CPU/DMA 访问。多个 UDB 中的宏单元能够作为 16 比
特或者 32 比特寄存器被 CPU/DMA 访问。请参见章节“UDB 中寄存器的寻址”。
16.2.1.2
PLD 的进位级联
在 UDB 中,2 个 PLD 被级联,如图 16-6 所示。进位链的输入“selin”从上一个 UDB 连接过来,通过 PLD 中的每个宏单
元,最后作为进位链的输出“selout”连接到下一个 UDB。为了实现高效的算术功能,宏单元中会产生特殊的乘积项来与
进位链进行协同工作。
图 16-6. PLD 进位级联示意图
PLD1
{PT7,PT6}
{PT5,PT4}
{PT3,PT2}
{PT1,PT0}
{PT7,PT6}
{PT5,PT4}
{PT3,PT2}
{PT1,PT0}
selout
PLD0
cpt1,cpt0
cpt1,cpt0
cpt1,cpt0
cpt1,cpt0
cpt1,cpt0
cpt1,cpt0
cpt1,cpt0
cpt1,cpt0
MC3
MC2
MC1
MC0
MC3
MC2
MC1
MC0
To the next
PLD block
in the chain
16.2.1.3
selin
From previous
PLD block in
the chain
PLD 的配置
对于系统来说,PLD 表现为总线上一个位宽为 16bit 的 RAM。与门阵列对应于 12 x 8 x 2 bits,即 24 bytes;或门阵列
对应于 4 x 8 bits,即 4 bytes;4 个宏单元对应于 4 x 8 bits,即 4 bytes。综上,1 个“12C4”结构的 PLD 对应的可配置
寄存器的大小为 32 bytes。由于 1 个 UDB 包括 2 个 PLD,所以 PLD 对应的可配置寄存器的大小为 64 bytes,即 32
words。
16.2.2
数据通道处理器(DP:DataPath)
如图 16-7 所示,DP 包含一个 8bit 的单周期算术逻辑处理器(ALU:Arithmetic Logic Unit )以及相应的移位寄存器
(Shift)和屏蔽寄存器(Mask)。DP 还包含一个基于 8 x 16bit RAM 的动态控制寄存器(Control Store RAM),通
过它可以动态控制 DP 的操作。相邻 UDB 中的 DP 可以被级联以实现更复杂的应用。
DP 能够实现的功能包括定时器,计数器,脉冲宽度调试器(PWM,带死区)和移位器等。DP 的加减功能使它可以支
持数字Δ − Σ运算。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
119
通用数字模块
Figure 16-7. Datapath Top Level
System Bus
R/W Access to all
registers
F1
FIFOs
F0
D1
Data Registers
D0
A1
To/From
Prev
Datapath
Output
Muxes
Conditions
A0
A1
D0
D1
2 Compares
2 Zero Detect, 2 Ones Detect
Overflow Detect
Datapath Control
Input
Muxes
6
Control Store RAM
8 Word X 16 bit
Input from
Programmable
Routing
Chaining
6
Output to
Programmable
Routing
To/From
Next
Datapath
Accumulators
A0
Parallel Input/Output
(to/from Programmable
Routing)
PI
PO
ALU
ALU
Shift
Mask
16.2.2.1
概览
数据通道处理器的关键特性如下:
动态配置
动态配置指:在不同的周期里,寻址到动态配置寄存器
中的不同配置字,设置 DP 的功能和内部信号互连。动
态配置寄存器中,最多可写入 8 套不同的配置字,组成
一个配置字序列。动态配置寄存器的地址线通过互连通
道连接到 PLD,I/O 或者 DP。CPU 可以对动态配置配置
寄存器进行读写。
算术逻辑单元
DP 中的算术逻辑单元(ALU)可以执行 8 种通用的运算:
递增,递减,加,减,与,或,异或以及直通。通过动
态配置寄存器,ALU 可以逐周期执行不同的运算。ALU
120
后面的移位寄存器和屏蔽寄存器可以对运算结果进行相
应的操作。
条件判决
DP 中包含 2 个带位屏蔽功能的比较器,可以用来比较
DP 中的两个寄存器。通过配置,也可以对 DP 的寄存器
进行条件判决,如全“0”,全“1”和溢出等条件判决,其结
果可以通过互连通道输出到其它模块。
内置 CRC/PRS
DP 可以用于设计单周期循环冗余(CRC)校验器和伪随
机序列(PRS)发生器。如果在设计中,CRC 或者 PRS
的位宽超过了 8bit,则需要级联相邻 UDB 的 DP。由于
动态配置的特性,该运算可以与其它运算在同一个 DP
中交织进行的。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
最高有效位可配置
DP 中寄存器的 MSB(最高有效位)可以通过配置指定,
这使 DP 可以实现不同位宽的 CRC/PRS 运算。通过与
ALU 输出的屏蔽功能配合,DP 可以实现不同位宽的定时
器,计数器和移位器。
输入/输出 FIFO 队列
DP 中包含 2 个深度为 4byte 的 FIFO 队列,可被独立配
置为输入缓冲器(CPU 写 FIFO,DP 读 FIFO)或者输
出缓冲器(DP 写 FIFO,CPU 读 FIFO)。FIFO 产生满/
空状态信号,可以触发中断。通过设计,FIFO 的状态信
号能够决定动态配置寄存器中不同的配置字被使能,使
DP 后续执行不同的操作和运算。
级联
通过配置,将相邻 UDB 中的 DP 的信号级联,能够实现
更复杂的算术,移位和 CRC/PRS 运算。可以级联的信
号包括条件判决信号,移位信号,进位信号,捕获
信号等。
复用
某些设计中,运算速度要求不高,一个 ALU 可以被分时
复用。通过动态配置寄存器,可以令 ALU 逐周期执行不
同的运算,ALU 在一个周期的运算结果可以作为下一个
周期运算的操作数。这样可以在一个 8bit 的 DP 中实现
一个 16bit 的函数;也可以在 DP 中交叉进行数据移位操
作与 CRC 运算。
数据通道处理器的输入
DP 有三种类型的输入信号:配置信号,控制信号和串/
并行数据信号。配置信号选择控制存储器的地址;控制
信号将 FIFO 中的数据载入数据寄存器,将累加器的数据
载入 FIFO;串行数据输入包括移位输入和进位输入,由
互连通道输入的并行数据位宽为 8bit。
数据通道处理器的输出
DP 一共生成 16 个信号,包括条件判断信号,状态信号
以及其他的数据信号。通过一个 16-6MUX,其中的 6 个
信号可以通过互连通道输出。默认的情况下,信号在输
出之前会与 DP 的时钟进行同步;通过配置,也可以跳
过这个同步。
数据通道处理器的工作寄存器
每个 DP 有 6 个 8bit 工作寄存器,如表 16-1。它们对
CPU 都是可读写的。
表 16-1 DP 的工作寄存器列表
类型
名称
描述
累加器
A0, A1
累加器的数据可以是 ALU 的运算操作数,也可以是结果。数据存储器和 FIFO 的数据可以被载
入累加器。累加器中一般包含函数的当前运算值,如计数器的计数变量,CRC 中的多项式变
量或者移位操作数变量。该寄存器无数据保持功能,进入睡眠会丢失原状态,复位后被复位到
0x00。
数据寄存器
D0, D1
数据寄存器一般包括函数中固定的操作数,如 PWM 发生器的比较值,定时器/计数器的周期或
者 CRC 中的多项式系数。该寄存器有数据保持功能。
F0, F1
FIFO 的深度为 4 个字节,它们可以用来缓存运算的操作数或者结果。2 个 FIFO 可以被独立的
配置成输入缓存器或者输出缓存器。FIFO 可以产生信号,来表示缓存器处于满/空状态,这在
很多应用中十分重要,如缓存 SPI/UART 的收发数据,缓存 PWM 的比较数,缓存定时器的周
期等。这些寄存器没有数据保持功能。
FIFO
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
121
通用数字模块
16.2.2.2
数据通道处理器中的 FIFO
FIFO 的工作模式与配置
每个 FIFO 有多种配置与操作模式,如表 16-2 所示。
表 16-2 FIFO 的配置与操作模式
模式
描述
输入与输出
输入模式中,CPU 向 FIFO 写数据,DP 从 FIFO 读数据;输出模式中,DP 向 FIFO 写数据,CPU 从
FIFO 读数据;
单字节缓冲器
FIFO 可以工作为一个单字节缓冲器。这时写入 FIFO 的数据被透传到接收端,FIFO 中的数据随时可以
被覆盖。
电平敏感与边沿敏感
装载 FIFO 的控制信号(F0_LD 和 F1_LD)可以是电平敏感的或者边沿敏感的。
正常与快速
DP 向 FIFO 写数据的速率分为正常与快速两种。正常模式下,数据传输时钟为 DP 的内部时钟;快速模
式下,数据传输时钟为总线时钟。
软件捕获
当 FIFO 为输出状态时,可以工作在软件捕获的模式下。这时,CPU 读累加器的数据是由 FIFO 中转
的,而非直接访问累加器。CPU 读累加器的动作会产生一个捕获触发信号,使累加器的数据被载入
FIFO,以便 CPU 读取。这个捕获触发信号可以被级联到相邻的 UDB 的 DP。
同步与异步
当 DP 的时钟与总线时钟同步时,FIFO 的状态信号可以直接输出或者与 DP 时钟做一次同步后输出;
当 DP 的时钟与总线时钟异步时,FIFO 的状态信号可以与 DP 时钟做一次同步或两次同步后输出;
时钟反向
通过配置,FIFO 的时钟可以与 DP 的时钟反向。
图 16-8 给出了两个 FIFO 可能的几种操作模式。TX/RX 模式中,F0 为输入状态,F1 为输出模式,典型的设计用例是
SPI 收发器。双捕获器模式中,两个 FIFO 均为输出状态。双缓冲器模式中,两个 FIFO 均为输入状态。
图 16-8 FIFO 的操作模式
System Bus
System Bus
F0
D0/D1
122
A0/A1/ALU
A0/A1/ALU
A0/A1/ALU
F1
F0
F1
System Bus
System Bus
TX/RX
Dual Capture
F0
F1
D0
D1
A0
A1
Dual Buffer
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
UDB Local Data Bus
FIFO F0
ALU
A1
A0
ALU
A1
A0
图 16-9 FIFO 的输入与输出
FIFO F1
D0
D1
A0
A1
图 16-9 给出了 FIFO 的输入输出情况。当 FIFO 为输入模式时,其数据源是系统总线,其数据流包括累加器和数据寄存
器;当 FIFO 为输出模式时,其数据源包括累加器和算术逻辑单元,其数据流为系统总线。通过寄存器 F0_INSEL[1:0]
和 F1_INSEL[1:0],可以配置 FIFO 的数据源或数据流,如表 16-3,其中 x = 0 或 1。
表 16-3 FIFO 的输入输出模式配置
描述
FIFO 为输入状态,数据源为系统总线,数据流为累加器或数据寄存器。
FIFO 为输出状态,数据源为累加器 A0,数据流为系统总线。
FIFO 为输出状态,数据源为累加器 A1,数据流为系统总线。
FIFO 为输出状态,数据源为算术逻辑单元,数据流为系统总线。
Fx_INSEL[1:0]
00
01
10
11
FIFO 的状态
FIFO 有两个状态信号:bus 和 block,它们可以通过 DP 的输出 MUX 传输到互连通道。状态信号“bus”通常可以用来触
发一个 FIFO 的读/写中断;状态信号“block”主要是记录 FIFO 的状态,供 UDB 内部调用。这两个状态信号的具体含义
由寄存器 Fx_INSEL[1:0]和 Fx_LVL 界定
表 16-4 FIFO 的状态
Fx_INSEL[1:0]
状态
Fx_LVL
状态信号
输入模式
0
非满
Bus Status
输入模式
1
至少一半为空
Bus Status
输入模式
NA
空
Block Status
输出模式
0
非空
Bus Status
输出模式
1
至少一半为满
Bus Status
输出模式
NA
满
Block Status
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
描述
当 FIFO 至少还有 1 个字节为空时,输出为 1,此时数据总线
可以向 FIFO 写数据。
当 FIFO 至少还有 2 个字节为空时,输出为 1。此时数据总线
可以向 FIFO 写数据。
当 FIFO 为空时,输出为 1。当 FIFO 不为空时,DP 可以从
FIFO 中读取数据。当 FIFO 为空时,DP 可以保持空闲状
态,或者产生一个空载条件信号。
当 FIFO 至少还有 1 个字节数据时,输出为 1。此时数据总线
从 FIFO 读数据。
当 FIFO 至少还有 2 个字节数据时,输出为 1。此时数据总线
从 FIFO 读数据。
当 FIFO 被写满数据时,输出为 1。当 FIFO 未满时,DP 内
部可以继续向 FIFO 写入数据。当 FIFO 被写满时,DP 可以
保持空闲状态,或者产生一个过载条件信号。
123
通用数字模块
FIFO 的读写
图 16-10 描述了一个典型的 FIFO 读写过程,以及各状态信号的对应值。虽然从图中看来,读写是在不同时间发生的,
但是它们确实是可以同时发生的。
图 16-10 FIFO 的读写过程
Reset
Write 2 bytes
Write 2 more bytes
Read 3 bytes
Empty = 1
Empty = 0
Empty = 0
Empty = 0
At Least Half Empty = 1
At Least Half Empty = 1
At Least Half Empty = 0
At Least Half Empty = 1
Full = 0
Full = 0
Full = 1
Full = 0
At Least Half Full = 0
At Least Half Full = 1
At Least Half Full = 1
At Least Half Full = 0
WR_PTR
RD_PTR
WR_PTR
D0
RD_PTR
D0
RD_PTR
D1
WR_PTR
WR_PTR
D1
X
D2
X
D3
Write 2 bytes
Read 2 bytes
Empty = 0
Empty = 0
Empty = 1
At Least Half Empty = 0
At Least Half Empty = 1
At Least Half Empty = 1
Full = 0
Full = 0
Full = 0
At Least Half Full = 0
At Least Half Full = 0
D4
X
X
D5
X
WR_PTR
RD_PTR
X
RD_PTR
WR_PTR
X
D3
RD_PTR
D3
Read 1 bytes
At Least Half Full = 1
D5
X
WR_PTR
RD_PTR
X
X
X
FIFO 的快速模式
当 FIFO 工作在输出模式时,DP 的数据发送时钟和 FIFO 的数据接收采样时钟一般是 DP 自身的工作时钟。然而,
如图 16-11 所示,通过设置,可以选择总线时钟(bus clk)作为 FIFO 的数据接收采样时钟。配合 FIFO 的边沿敏感写
模式,这样做可以将从 DP 到 FIFO 的数据传输延迟从 DP 时钟周期的量级降低到总线时钟的量级,使 CPU 能够以最
小的延迟来读 FIFO 的数据。当然,采用更高的时钟来工作会稍微增加系统的功耗。fx_ld 是外部输入的 FIFO 写触发信
号,它通常由状态机或者条件判断器产生。如果 FIFO 工作在快速模式,fx_ld 必须满足总线时钟的时序要求。
图 16-11 FIFO 快速模式的配置
UDB DP
Clock Mux
digital
clocks
DP clk
DP Operation
bus clk
fx_ld
Write
FIFO
(In Output Mode)
0
bus clk
1
FIFO Fast
124
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
FIFO 的写模式
FIFO 的软件捕获模式
DP 向 FIFO 写数据有两种模式。在电平敏感写模式中,
数据从累加器同步传输到 FIFO。fx_ld = 1 时,DP 持续
向 FIFO 写数据。
通过将寄存器位 FIFO_Cap 置位,使能 FIFO 的软件捕
获模式。当 DP 在进行运算时,这种模式为 CPU 提供一
种可靠读取累加器的方式。此时的 FIFO 必须工作在输出
状态,CPU 以 FIFO 为中转,从累加器中读取数据。这
种模式下,F0 从 A0 载入数据,F1 从 A1 载入数据。
在边沿敏感写模式中,fx_ld 有上升沿输入时,累加器中
的数据被传输到 FIFO。在这种模式下,可以利用一个外
部信号作为边沿写触发信号,捕获累加器中的值。
如图 16-13,读累加器的操作(read_ax)可以触发软件
捕获信号(capx),使累加器的数据被传输到 FIFO,这
时 CPU 可以立即从 FIFO 中读走这些数据。软件捕获信
号可以被级联,这允许 CPU 从被级联的 UDB 的 FIFO
同时读取 16bit 或者更多的数据。
图 16-12 给出了两种模式的控制电路,通过配置寄存器
位 FIFO_Edge,可以选择 FIFO 的写模式。
图 16-12. FIFO 写模式的配置
0
fx_ld (from Routing)
之前我们介绍的外部写触发信号 fx_ld 也可以触发 FIFO
的写操作。fx_ld 和 capx 逻辑或运算的结果共同决定了
FIFO 是否进行写操作。若这两个 FIFO 写触发信号同时
有效,将出现不可预知的结果,因此通常情况下,这两
个写触发信号应该是互斥的,但在以下情况下可以例外:
fx_write
1
FF
dp_clk
0
bus_clk
1
FIFO Edge


FIFO 工作在快速写模式下;
FIFO 工作在边沿敏感写模式下。
在使能软件捕获模式之前,可以通过 ACTL 寄存器设置
将 FIFO 清零,使 FIFO 的读指针和写指针工作在一个可
知的状态。
FIFO Fast
图 16-13 FIFO 软件捕获模式的配置
Chain X
capxi (chaining in)
capx (chaining out)
read ax
FIFO Cap
0
fx_write
1
fx_ld
FIFO EDGE
bus clk
(FIFO FAST)
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
125
通用数字模块
在 TX 端,DP 的状态机通过“empty”来判断 FIFO 中是否
还有数据可读。“empty”由 DP 时钟同步置位,但是被总
线时钟同步清零。当被清零时,“empty”需要被同步到
DP 时钟。
FIFO 的控制寄存器
在辅助控制寄存器 ACTL 中,共有四个寄存器位用于控
制 FIFO 的操作,分别是 FIFO0_CLR,FIFO1_CLR,
FIFO0_LVL 和 FIFO1_LVL。
在 RX 端,DP 的状态机通过“full”来判断 FIFO 中是否还
有数据可读。“full”由 DP 时钟同步置位,但是被总线时钟
同步清零。当被清零时,“full”需要被同步到 DP 时钟。
FIFOx_CLR 用于复位 FIFOx。当它为 1 时,对应的
FIFO 将被复位。当它为 0 时,对应的 FIFO 能够被正常
操作。如果 FIFOx_CLR 持续被置位,对应的 FIFO 表现
为一个单字节的缓冲器,被写入 FIFO 的数据可以立即被
读出,也可以在任意时候被覆盖。
当 DP 的时钟与总线时钟同步时, FIFO 的状态信号
blk_stat 可以直接输出或者与 DP 时钟做一次同步后输出;
当 DP 的时钟与总线时钟异步时,FIFO 的状态信号可以
与 DP 时钟做一次同步或两次同步后输出。这些选择是
通过寄存器位 FIFO_ASYNC 和 FIFO_ADD_SYNC 进行
配置的。
配合 Fx_INSEL[1:0]的设置,FIFOx_LVL 可以选择对应
的状态信号 fx_bus_stat 的意义,如表 16-4 所示。
图 16-14 给出了 FIFO 中状态信号的同步电路,其中 F0
工作在输入状态,F1 工作在输出状态,分别作为 TX 和
RX 寄存器。
图 16-14 FIFO 状态信号的同步
System Bus
async
F0 (TX)
blk_stat
empty
Synch to
DP
Datapath Process
(Asynch)
empty
Asynchronously cleared
by bus write,
sycnhyronously set by
DP read
0
d
set
1
q
DP clk
async
Synch to
DP
full
blk_stat
F1 (RX)
System Bus
126
Empty to
DP state
machine
full
Asynchronously cleared
by bus read,
sycnhyronously set by
DP write
0
d
set
1
Full to
DP state
machine
q
DP clk
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
FIFO 的溢出操作
由于 FIFO 不提供内置上溢保护或下溢保护,所以需要根
据 FIFO 的状态信号来正确的进行读写操作。如果 FIFO
处于满状态,则下一次的写操作令 FIFO 发生上溢,写入
的新数据将覆盖 FIFO 顶部的数据(下一个即将被读出的
数据)。如果 FIFO 处于空状态,则下一次的读操作令
FIFO 发生下溢,读出的数据是不可预测的。虽然发生下
溢或者上溢,但是 FIFO 的读写指针正常移动。
FIFO 的时钟反向
通过寄存器位 Fx_CK_INV 的配置,可以将对应的 FIFO
的时钟做反向。默认状态下,Fx_CK_INV = 0,FIFO 的
时钟与 DP 的时钟通向;当 F0_CK_INV = 1 时,FIFO
的时钟与 DP 的时钟反向。这支持了双时钟沿的通信模
块的设计,如 SPI。
将寄存器位 Fx_DYN(CFG17[0]和 CFG17[1])置位后,
可以通过互连信号 dx_ld 动态配置对应 FIFO 的访问模式
(0:内部访问模式;1:外部访问模式)。这时 dx_ld
不再是 FIFO 写数据寄存器的触发信号。
ALU
A1
图 16-15 FIFO 读写的动态控制
A0
DP 中有 2 个 FIFO,每个 FIFO 有两个状态信号,分别
是 fifo0_bus_stat , fifo0_blk_stat 和 fifo1_bus_stat ,
fifo1_blk_stat。它们的含义与寄存器位 Fx_INSEL[1:0]和
Fx_LVL 相关,具体参考表 16-4。
DP 中的 ALU
16.2.2.4
DP 中的算术逻辑单元可以完成 8bit 的运算,在算术逻辑
单元之后还有一个 8bit 的移位寄存器和一个 8bit 的屏蔽
单元。
算术与逻辑运算
通过位于寄存器位 Function[2:0],可以配置算术逻辑单
元进行何种运算。
表 16-7 ALU 的功能配置
FIFO 的动态控制
UDB Local Data Bus
FIFO Fx
FIFO 的状态信号
16.2.2.3
FIFO Fx
算术运算
Func[2:0]
运算表达
000
直通
srca
001
递加
++srca
010
递减
--srca
011
加
srca +srcb
100
减
srca – srcb
101
异或
srca ^ srcb
110
与
srca & srcb
111
或
srca | srcb
进位输入
进位输入可以参与某些算术运算,它在各运算中的缺省
值如表 16-8 所示。
Ax
Internal Access
UDB Local Data Bus
External Access
如图 16-15,在内部访问模式中,只有 DP 能够读写
FIFO。配置寄存器位 Fx_INSEL 可以选择 FIFO 的数据
源,在该模式中,Fx_INSEL = 0(选择系统总线为数据
源)是非法的。另外注意,FIFO 的数据只能传输到累加
器中,而不能够传输到数据寄存器中。在外部访问模式
中,只有 CPU 能够读写 FIFO。
举例说明该应用。首先,FIFO 工作于外部访问模式
(dx_ld = 1),CPU 可以向 FIFO 写一个或多个字节的
数据;然后,FIFO 切换到内部访问模式(dx_ld = 0),
DP 从 FIFO 中读取数据并做运算,并将结果写入 FIFO;
最后,FIFO 重新切换到外部访问模式,CPU 从 FIFO 中
读出运算结果。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
表 16-8 进位输入在各运算中的应用
算术运算
运算表达式
运算式解析和进位默认值
递加
++srca
srca + 00h + ci, ci 的缺省值为 1
递减
--srca
srca + ffh + ci, ci 的缺省值为 0
加
srca + srcb
srca + srcb + ci, ci 的缺省值为 0
减
srca – srcb
srca + ~srcb + ci, ci 的缺省值为 1
通过寄存器位 CI_SELA(CFG13[1:0])或 CI_SELB
(CFG13[3:2])可以配置进位信号在不同的操作模式工
作,具体如表 16-9。通过动态配置寄存器中的 CI_SEL
(CDFG[2])位,可以选择 CI_SELA 或 CI_SELB 的配
置有效。
127
通用数字模块
进位输出
表 16-9 进位操作的模式
CI SEL A
CI SEL B
进位操作
模式
00
Default
01
Registered
10
Routed
11
Chained
进位输出可以被选择为 DP 的输出信号,进位输出的值
不仅与运算中的操作数有关,也与设置的 MSB 位置有关。
通过级联,可以将进位输出的值输出,以扩展运算规模。
表 16-11 给出了在不同运算情况下,进位输出是否有效。
描述
默认算术模式:进位为缺省值,
如表 16-8 所示。
寄存器缓存模式:上一周期运算
中的进位结果存入进位寄存器,
作为下一周期的进位输入。这种
模式下,一个 8bit 的 ALU 工作两
个 周 期 可 以 模 拟 一 个 16bit 的
ALU 工作一个周期的情况。
互连模式:进位输入来自于互连
通道传输过来的信号。
级联模式:进位输入来自于级联
情况下高一级的 DP。
表 16-11 互连进位输出的操作
在互连模式中,进位信号有效和无效时 ALU 的运算结果
如表 16-10 所示。
进位输入
信号极性
正
负
正
负
进位输入有效
++srca
--srca
(srca + srcb) + 1
(srca – srcb) – 1
进位输出
信号极性
进位输出有效
进位输出无效
递加
正
++srca == 0
srca
递减
负
--srca == -1
srca
加
正
srca + srcb > 255
srca + srcb
减
负
srca – srcb < 0
(srca – srcb)
进位操作
具体的进位操作如图 16-16 所示。ALU 运算中,MSB 是
可以通过编程来配置的;进位输入可以来自于四个不同
的源;进位输出可以直接被互连通道输出,也可以被锁
存到进位寄存器 co_msb_reg 中。
表 16-10 互连进位输入的操作
算术
运算
递加
递减
加
减
算术
运算
进位输入无效
srca
srca
srca + srcb
(srca – srcb)
图 16-16 进位操作
Selected MSB
Arithmetic ALU Function
(inc, dec, add, sub)
Default function value
ALU
Bit 7
ALU
Bit 6
ALU
Bit 5
ALU
Bit 4
ALU
Bit 3
ALU
Bit 2
ALU
Bit 1
ALU
Bit 0
ci
Chained (from prev datapath)
Registered (from co_msb_reg)
Routed (from interconnect)
co_msb
(to DP output mux)
co_msb_reg
128
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
表 16-13 移位操作的模式
移位操作
SI SEL A
SI SEL B
通过位于寄存器位 Shift[2:0],可以配置 DP 移位操作的
具体功能,具体如表 16-12 所示
进位操作
模式
表 16-12 移位操作中的功能配置
功能
Shift[1:0]
00
直通
01
左移
10
右移
11
高低半字节互换
配置寄存器 CFG15 的 SHIFT_SEL,DP 的输出 MUX 选
择右移出(sor)和左输出(sol_msb)中的一个输出到
互连通道,详见图 16-23。未发生移位操作时,sor 和
sol_msb 相当于 ALU 运算中的 LSB 和 MSB。
SI_SELA(CFG[1:0])或 SI_SELB(CFG[3:2])决定了
移入操作数的来源,SI_SEL(DCFG[1])可以逐周期的
选择采用 SI_SELA 还是 SI_SELB 的配置。移入操作数
只有在左移或右移操作时才有效(Shift[1:0] = 01 或 10)。
SI_SELA 和 SI_SELB 的具体配置信息如表 16-13 所示。
00
Default/
Arithmetic
01
Registered
10
Routed
11
Chained
描述
默认模式:移位输入值为 DEF_SI
(CFG12[4])配置的缺省值(固
定为 1 或 0)。但是,如果
MSB_SI ( CFG15[4] ) 被 置 位 ,
则移位输入值为当前周期的 MSB
(此情况值发生在右移操作
中)。
寄存器缓存模式:上一次移位操
作的输出值存入移位寄存器中,
作为下一次移位操作的输入值。
左移操作使用上一次左移操作的
移出值;右移操作使用上一次右
移操作的移出出值。
互连模式:移位输入的值来自于
DP 输入 MUX 的输入信号 si。
级联模式:左移操作的级联输入
来自于右边相邻 UDB 中的 DP;
右移操作的级联输入来自于左边
相邻 UDB 中的 DP。
如图 16-17 所示,左移操作的移出位从 MSB 的位置被输
出;右移操作的移入位从 MSB 的位置被输入。在寄存器
缓存模式中,左移操作和右移操作的移出位分别被锁存
到寄存器 sol_msb_reg 和 sor_reg 中,可以在紧接的下
一个周期中被使用,这使同一个移位寄存器在多周期中
实现更高位宽的移位运算。
图 16-17 移位操作
Select default value or
arithmetic shift
Default (tie value)
sor_reg
shift in left (sil)
Registered (sor_reg)
Routed (from interconnect)
Selected MSB
Chained (from next Datapath)
sil
7
6
shift out right (sor)
(to DP output mux)
Shift right or shift left
5
4
3
2
1
0
Default (tie value)
Registered (from sol_msb_reg)
shift out left (sol_msb)
(to DP output mux)
shift in right (sir)
sol_msb_reg
MSB 以左的位称为隔离位,如图 16-17 中的 bit7,bit6
和 bit5,它们也参与移位运算。例如,左移操作中,bit4
(MSB)的值被移入 sol_msb 和 sol_msb_reg 的同时也
会 被 移 入 bit5 ; 右 移 操 作 中 , sil 的 值 除 被 送 到 bit4
(MSB)外,也会被送到 bit7。但是一旦隔离位的移位
值被移出隔离位的范围,就会被丢失,不会对正常的移
位操作产生影响。
Routed (from interconnect)
Chained (from prev Datapath)
ALU 的屏蔽选项
ALU 的运算结果还可以与屏蔽寄存器做位与运算,从而
可以屏蔽一些位的输出。屏蔽功能一个典型的应用场合
是,通过设置输出屏蔽位,使同一个计数器或定时器表
现出不同的工作周期。
16.2.2.5
DP 的输入多路器(MUX)
DP 共有 6 个输入(dp_in[5:0]),通过配置 9 个 6-1 输
入 MUX(每个 MUX 有 6 个输入和 1 个输出),可以将
输入配置为各种 DP 的内部输入信号,如表 16-14 所列。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
129
通用数字模块
表 16-14 DP 的输入信号
信号
描述
RAD2
RAD1
RAD0
异步动态配置寄存器的地址输入。动态配置寄存器中共有 8 个 16bit 的配置字可供寻址选择,通过输入不同
的地址,动态配置寄存器就可以生成一个配置字序列,逐周期配置 DP 的工作。
F0 LD
F1 LD
当这两个输入信号有效时,对应的 FIFO 会根据 Fx_INSEL[1:0]的配置从恰当的数据源载入数据。这两个信
号可以是电平有效或者边沿有效的,具体工作情况参考 16.3.2.2。
D0 LD
D1 LD
当这两个输入信号有效时,数据寄存器会从对应的 FIFO 中载入数据。这两个信号时上升沿有效的。
SI
移位操作的互连移入信号,可以参与左移位操作或者右移位操作。
CI
进位互连输入信号。
如图 16-18 举例所示,9 个 6-1MUX 分成两组,一组需要支持边沿有效的输入,另一组不需要。
图 16-18 DP 的输入选择
rad0
(similar for rad1, rad2, si, ci)
{0, dp_in[5:0], 0}
CFGx
RAD0 MUX[2:0]
These inputs are
edge sensitive
f0_ld
(similar for f1_ld, d0_ld, d1_ld)
{0, dp_in[5:0], 0}
CFGx
F0 LD MUX[2:0]
16.2.2.6
CRC/PRS
图 16-19 CRC 运算的逻辑电路
DP 能够生成循环冗余校验码(CRC)和 PRS(伪随机
序列)。通过级联多个 DP,支持的位宽可以大于 8 位。
在 CRC/PRS 的运算中,最高有效模块的 MSB 被传输到
最低有效模块与移位输入信号(SI)进行异或运算,生
成反馈信号(FB)。FB 的作用是对数据寄存器的多项式
系数进行门控,门控结果与累加器的当前值进行异或。
异或的输出左移,存入累积器,作为下一个周期异或操
作数。
图 16-19 给出了 CRC 运算的功能结构。数据寄存器存放
多项式的系数,累加器存放初值,以及计算过程中的值。
PRS 运算的功能结构与前者类似,此时 SI 为固定值“0”。
为了使能 CRC/PRS 运算,CFB_EN(CDFG[3])必须
被置位,使能反馈信号与 ALU 操作数 B(SRCB)的与
运算。如果该位清零,那么反馈信号被禁用,始终为 1,
DP 无法进行 CRC/PRS 运算,但可以进行其它算术逻辑
运算。通过动态配置寄存器,可以使 CRC/PRS 运算与
其他算术逻辑运算在 DP 中逐周期的交织执行。
130
D0/D1
(POLY)
A0/A1
(CRC)
MSB
(most significant bit)
FB
(feedback)
srcb
srca
ALU
(XOR)
SI
(shift in)
Tie input to
zero for PRS
operation
SHIFTER
(LEFT)
CRC/PRS 的级联
图 16-20 给出了一个 3 个 UDB 级联进行 CRC/PRS 运算
的应用,可支持 17 位到 24 位的操作。如图所示,最低
有 效 模 块 UDB0 和 UDB1 的 寄 存 器 位 CHAIN_MSB
( CFG14[3] ) 需 要 被 置 位 ; 最 高 有 效 模 块 UDB2 和
UDB1 的寄存器位 CHAIN_FB(CFG14[3])需要被置位。
通过 UDB2 的寄存器位 MSB_SEL[2:0](CFG14[6:4])
可以配置运算的位宽(17bit - 24bit)。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-20 CRC/PRS 级联的配置
Set msb_sel
CHAIN MSB = 1
CHAIN FB = 1
CHAIN FB = 1
cmsbi
cmsbo
cmsbi
CHAIN MSB = 1
cmsbo
UDB 2
cmsbi
UDB 1
cfbo
cfbi
cfbo
cfbi
cfbo
■
最低有效模块 UDB0 负责产生反馈并通过 cfbo 信号
输出到上级有效模块,它是 cmsbi 与 sir 的异或运算
结果,其中,cmsbi 是上级有效模块(UDB1)输入
的 MSB,sir 是 UDB0 的右移位输入信号(注意:当
执行 PRS 运算时,sir 始终为 0);
对于 UDB2 和 UDB1,它们的反馈输入信号由各自
的下级有效模块级联过来。
■
CRC/PRS 中的多项式配置
举一个例子来说明 CRC/PRS 运算中的具体配置。定义
一个 CCITT 的 CRC-16 算法的多项式 x16 + x12 +x5 + 1,
它在数据寄存器中对应的系数值如图 16-21 所示。
最高有效位(MSB)信号的级联:
■
CRC data in
cfbi
通 过 寄 存 器 MSB_SEL[2:0] ( CFG14[6:4] ) 和
MSB_EN(CFG14[7])来配置的。
对于 UDB1 和 UDB0,它们的 MSB 信号由各自的上
级有效模块级联过来。
反馈信号的级联:
■
cmsbo
sir
UDB 0
最高有效模块 UDB2 负责将 MSB 通过 cmsbo 信号
输出到下级有效模块,UDB2 中 MSB 的具体位置是
图 16-21 CCITT 的 CRC16 多项式格式
X16
X15
X13
+
X16
1
X14
0
0
X12
X11
X10
X9
1
X7
X6
+
X12
0
X8
0
0
0
X5
X4
X3
0
0
1
X1
+
X5
0
X2
0
0
X0
1
0
0
CCITT 16-Bit Polynomial is 0x8810
CRC/PRS 配置范例
下面给出了具体的配置,假定数据寄存器 D0 存放多项式
系数,CRC/PRS 在累加器 A0 中进行运算:
1. 选择一组合适的多项式系数写入 D0;
2. 将运算的初始值写入 A0;
3. 如果需要级联 DP 以扩展运算,则按照前文进行相关
配置;
4. 通 过 寄 存 器 MSB_SEL[2:0] ( CFG14[6:4] ) 和
MSB_EN(CFG14[7])配置最高有效位 MSB 的位置;
5. 操作动态配置寄存器:
a) 将 D0 配置为操作数 B;
b) 将 A0 配置为操作数 A;
c) 将 ALU 的运算函数配置为异或;
d) 将移位寄存器配置为左移;
e) 如果是 PRS 运算,将移位信号设为固定值“0”;
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
f) 将 CFB_EN 置位;
g) 将 A0 的数据源配置为 ALU。
CRC/PRS 的外部模式
将 寄存器位 EXT_CRCPRS ( CFG16[1])置位 ,可以
在 DP 之外的模块中进行 CRC/PRS 的一部分运算。如
图 16-22,CRC 的 FB 计算在 PLD 中进行这时,CRC 的
FB 通过输入 MUX 进入 DP。原先内部的 FB 运算逻辑被
旁 路 。 通 过 对 一 个 UDB 的 时 分 复 用 , 可 以 实 现
CRC/PRS 运算的位宽可达到 16bit。
在这个模式中,通过动态配置寄存器中的 CFB_EN 位
(CDFG[3])同样可以使能或者禁止反馈信号与 ALU 操
作数 B(SRCB)的与运算。这样 CRC/PRS 运算与其他
算术逻辑运算在 DP 中逐周期的交织执行。
131
通用数字模块
图 16-22 CRC/PRS 外部模式的逻辑电路
PLD
Tie shift in to
zero for PRS
operation
SI
(shift in)
Routing
Routing
D0/D1
(POLY)
When the
EXT_CRCPRS bit is
set, the CI selection
drives the CRC
feedback line.
A0/A1
(CRC)
FB
(feedback)
srcb
srca
CI Mux
ALU
(XOR)
SHIFTER
(LEFT)
16.2.2.7
DP Inputs
MSB
(Most Significant Bit)
SI Mux
DP 的输出多路器
DP 能够对累加器,ALU 输出和 FIFO 状态进行条件判决。判决结果可以通过数字互连通道输出,供 UDB 中的其它模
块使用,或者产生中断,或者直接输出到芯片的 I/O 管脚。表 16-15 给出了所有 16 个可被 DP 判决的条件。
表 16-15 DP 的判决条件
名称
判决条件
是否可级联
判决表达式和描述
ce0
A0 和 D0 相等
是
A0 == D0
cl0
A0 小于 D0
是
A0 < D0
z0
A0 为全 0
是
A0 == 00h
ff0
A0 为全 1
是
A0 == FFh
ce1
相等
是
A1 or A0 == D1 or A0 (dynamic selection)
cl1
小于
是
A1 or A0 < D1 or A0 (dynamic selection)
z1
A1 为全 0
是
A1 == 00h
ff1
A1 为全 1
是
A1 == FFh
ov_msb
溢出
否
Carry(msb) ^ Carry(msb-1)
co_msb
进位输出
是
进位输出
cmsb
CRC/PRS 的最高有效位
是
CRC/PRS 的最高有效位
so
移位输出
是
移位输出
f0_blk_stat
FIFO0 的 Block Status 状态信号
否
具体意义取决于 FIFO 的配置
f1_blk_stat
FIFO1 的 Block Status 状态信号
否
具体意义取决于 FIFO 的配置
f0_bus_stat
FIFO0 的 Bus Status 状态信号
否
具体意义取决于 FIFO 的配置
f1_bus_stat
FIFO1 的 Bus Status 状态信号
否
具体意义取决于 FIFO 的配置
DP 共有 6 个输出,通过 6 个 16-1 输出 MUX,上表中的 16 个条件判断的结果可以输出到互连通道上。
132
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
通过配置寄存器,可以选择比较器是否与相邻 DP 的比
较器进行级联,图 16-24 和图 16-25 分别给出了“等于”和
“小于”比较运算级联的逻辑电路。
图 16-23 输出多路器的连接
Output Mux
1
2
5
z1
6
ff1
7
ov_msb
8
co_msb
f0_bus_stat
14 13 12 11 10 9
f1_bus_stat
15
ce1
cmsb
f0_blk_stat
f1_blk_stat
CFGx
CCHAIN0
ce0
(to routing
and chaining)
Output Mux (6 - 16 to 1)
ff0
3
z0
4
cl0
cl1
sor
sol_ msb
0
图 16-24 “等于”比较运算级联逻辑电路
ce0
ce0i
(from chaining)
Compare Equal
6
dp_out[5:0]
图 16-25“小于”比较运算级联逻辑电路
CFGx
CCHAIN0
cl0i
(from chaining)
cl0
(to routing
and chaining)
Compare
Less Than
Compare
Equal
全 0 和全 1 的条件判决
比较器
DP 中共有两个比较器,第一个比较器(比较器 0)的操
作数是固定的(A0 和 D0),另一个比较器(比较器 1)
的操作数能够被动态配置。操作数在输入比较器前经过
一个 8bit 的可配置屏蔽寄存器,这使比较运算可以在指
定的比特位上进行。默认情况下,屏蔽寄存器是禁止的。
比较器可以进行两种比较运算:第一个操作数是否“小于”
第一个操作数(1 表示小于,0 表示不小于);第一个操
作数是否 “等于 ”第二个操作数( 1 表示等于, 0 表示
不等于)。
如表 16-16 所示,通过寄存器 CMP_SELA(CFG[5:4])
或 CMP_SELB(CFG[7:6]),可以选择比较器 1 的两个
操 作 数 。 通 过 动 态 配 置 寄 存 器 中 的 CMP_SEL
( DCFG[0] ) , 可 以 逐 周 期 的 选 择 比 较 器 1 根 据
CMP_SELA 还是 CMP_SELB 来选择操作数。
累加器能够对自身的值进行全 0 和全 1 的条件判决。一
个 DP 中的判断结果可以分别与相邻 DP 中的全 0 和全 1
条件判断器级联,级联的逻辑电路与“等于”比较级联的结
构类似。
溢出操作
将 DP 的进位输入与进位输出做异或运算来做 DP 是否溢
出的条件判断。这个条件判断是不可以级联的,在多个
DP 级联的应用中,各个 DP 独立进行各自的溢出判断。
16.2.2.8
DP 的并行输入和并行输出
如图 16-26 所示,PI[7:0]和 PO[7:0]分别是 DP 与互连通
道通信的并行输入信号和并行输出信号。通过配置
SRC_A(DCFG[12]),可以将 DP 内部 A0 或 A1 的值
并行输出到互连通道。
表 16-16 比较器配置
描述
CMP SEL A
CMP SEL B
00
A1 与 D1 比较
01
A1 与 A0 比较
10
A0 与 D1 比较
11
A0 与 A0 比较
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
133
通用数字模块
说明:
图 16-26 DP 并行输入和并行输出的连接
■
■
动态操作模式中,具体选择 A0[7:0]或者 A1[7:0]作为
操作数 A,这取决于 SRC_A 的配置;
CFB_EN 的主要功能是使能 CRC/PRS 的运算,当
在动态操作方式被用来选择操作操作数 A 的数据源
时,它不再具有使能 CRC/PRS 运算的功能。
16.2.2.9
DP 的级联
DP 包含一个 8bit 的 ALU,相邻 UDB 中的 DP 通过级联
进位,捕捉触发信号,移位数据,条件判断信号能够支
持更高位宽和更复杂的运算。这些级联信号通过专属互
连通道进行传输,所以不用担心设计中的级联应用带来
任何的时序问题。另外,捕捉触发信号的级联为 CPU 同
时 读 多 个 UDB 中 DP 的 累 加 器 提 供 了 支 持 ( 详 见
16.3.2.2 中的软件捕获模式)。
ALU 的操作数 A 的选择有两种操作方式。在静态操作方
式中,通过将 PI_SEL(CFG15[7])置位,可以将操作
数 A 固 定 选 择 为 PI[7:0] ; 在 动 态 操 作 方 式 中 , 将
PI_SEL 清 零 , 将 PI_DYN ( CFG15[5] ) 置 位 , 通 过
CFB_EN 来动态的选择 PI[7:0]或者 Ax[7:0]作为操作数 A。
如图 16-27 所示,几乎所有级联信号的传输方向都是从
低有效模块到高有效模块,右移位操作信号和 MSB 信号
的级联是从高有效模块到低有效模块。
图 16-27 DP 级联时的信号流
CE0
CL0
CE1
CL1
CE0i
CL0i
CE1i
CL1i
Z0
Z0i
Z1
Z1i
FF0
FF1
0
0
FF0i
UDB2
FF1i
CAP0
CAP0i
CAP1
CAP1i
CE0
CL0
CE1
CL1
CE0i
CL0i
CE1i
CL1i
Z0
Z0i
Z1
Z1i
FF0
FF1
FF0i
UDB1
FF1i
CAP0
CAP0i
CAP1
CAP1i
CE0
CL0
CE1
CL1
CE0i
CL0i
CE1i
CL1i
Z0
Z0i
Z1
Z1i
FF0
FF1
FF0i
FF1i
0
0
0
0
0
0
0
CAP0
CAP0i
0
0
CAP1
UDB0
CAP1i
0
CO_MSB
CI
CO_MSB
CI
CO_MSB
CI
SOL_MSB
SIR
SOL_MSB
SIR
SOL_MSB
SIR
0
0
0
CFBO
CFBI
CFBO
CFBI
CFBO
CFBI
SIL
SOR
SIL
SOR
SIL
SOR
CMSBI
CMSBO
CMSBI
CMSBO
CMSBI
CMSBO
16.2.2.10 动态配置寄存器
每 个 DP 中 包 含 一 个 动 态 配 置 寄 存 器 , 它 的 大 小 为
16bit x 8,如图 16-28 所示。通过 RAD[2:0]进行异步寻
址,选择不同的配置字。动态寄存器提供了一个异步只
读端口,将被选择的 16bit 配置字输出到 DP,对 DP 的
工作进行逐周期动态配置。寻址信号通过 DP 的 MUX 输
入,它的来源可以使互连信号,包括 I/O 管脚,PLD 的
输出,控制模块的输出以及其他的 DP 输出。动态配置
寄存器也为总线提供了读写端口,这些端口是与系统时
钟同步的。
134
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-28 动态配置寄存器的输入输出
Read Only
UDBLocal Bus
wrl
bus_data[15:0]
R/W
Read
16
bus_addr
[2:0]
Wr Ctrl
RO
Read
Address
16 Bit-by-8 Word RAM
Array
Read/Write
rad[2:0]
Decoder
Datapath Control
Inputs
Address Decoder
16
wrh
16
Config RAM
dyn_cfg_ram
[15:0]
rd
dpram
下面给出了动态配置寄存器的具体地址,以及其中各个比特位的具体说明。
寄存器名
表 16-17 动态配置寄存器列表
寄存器名
FUNC[2:0]
位宽
3
功能
ALU 的运算种
类的选择
SRCA
1
ALU 中操作数
SRCA 的选择
SRCB
2
ALU 中操作数
SRCB 的选择
SHIFT[1:0]
2
移位操作的选
择
A0 WR
SRC[1:0]
2
选择由谁写
A0
A1 WR
SRC[1:0]
2
选择由谁写
A1
CFB EN
1
使能或禁止
位宽
CRC 运算中
的反馈信号
(FB)
详述
000 直通
001 操作数 SRCA 递
加
010 操作数 SRCA 递
减
011 加
100 减
101 异或
110 与
111 或
0 A0
1 A1
00 D0
01 D1
10 A0
11 A1
00 直通
01 左移
10 右移
11 高半字节与低半字
节互换
00 None
01 ALU
10 D0
11 F0
00 None
01 ALU
10 D1
11 F1
0 使能
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
功能
详述
1 禁止
CI SEL
1
进位输入操作
数的配置字选
择
0 ConfigA
1 ConfigBa
SI SEL
1
移位输入操作
数的配置字选
择
0 ConfigA
1 ConfigBa
CMP SEL
1
比较器的配置
字选择
0 ConfigA
1 ConfigBa
a. 对于 CI、SI 和 CMP 的操作,通过动态配置寄存器可以选择
两套不同的配置字:ConfigA 和 ConfigB,两套配置字具体由
另外的寄存器决定。
16.2.3
状态与控制模块
状态与控制模块两个主要的寄存器如图 16-29 所示。状
态寄存器为固件监控 UDB 状态提供了途径,对固件来说,
它是只读的;控制寄存器为固件控制 UDB 操作提供了途
径,对固件来说,它是可读可写的。
135
通用数字模块
图 16-29 状态寄存器与控制寄存器
System Bus
8-Bit Status Register
(Read Only)
8-Bit Control Register
(Write/Read)
Routing Channel
该模块的内部细化图如图 16-30 所示。这个模块的主要作用是协调 CPU 固件与 UDB 的工作,但是基于它丰富的互连
矩阵资源,也可以通过配置来执行其他功能。
图 16-30 整体框图
Status and Control Module
7-Bit
Period Register
(same as Mask)
8-Bit
Control Register
From
Datapath
Parallel
Output
(po[7:0])
TC
8
Interrupt
Gen
EN/LD CTL
7-Bit
Down Count
CNT
7
8
8-Bit
Status Register
INT
8
sc_in[3:0]
7-Bit
Mask Register
(same as Period)
8
8
To
Datapath
Parallel
Input
(pi[7:0])
4
4-Bit Sync
8
CFGx
SC OUT
CTL[1:0]
3
8
sc_out[7:0]
CFGx
INT MD
CFGx
SYNC MD
8
sc_io_out[3]
sc_io_out[2:0]
{sc_io_in[3:0],sc_in[3:0]}
Horizontal Channel Routing
该模块的操作模式如下:
■
■
■
■
■
■
状态输入 - 通过读状态寄存器,CPU 读取和捕捉互连信号 sc_io_in[3:0]和 sc_in[3:0]的数据;
控制输出 - 通过写控制寄存器,CPU 驱动互连信号 sc_out[7:0];
并行输入 - SC 模块将互连信号 sc_io_in[3:0]和 sc_in[3:0]连接到 DP 的并行输入信号 PI[7:0];
并行输出 - SC 模块将 DP 的并行输出信号 PO[7:0]连接到互连信号 sc_out[7:0];
计数器模式 - 控制寄存器工作为一个 7bit 的周期可配置的递减计数器,支持周期自动重载。通过互连信号能够使
能计数或者主动重载周期。在此模式下,其它对控制寄存器的操作是非法的;
同步模式 - 状态寄存器工作为 4bit 的双同步器。在此模式下,其它对状态寄存器的操作是非法的。
16.2.3.1
状态输入模式
当模块工作在状态输入和控制输出模式下时,简化的模块内部结构如图 16-31,主要的组成部分有一个 8bit 的控制寄存
器,一个 8bit 的状态寄存器和一个 7bit 的中断屏蔽寄存器。
136
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-31. 状态寄存器和控制寄存器的操作
00: Read Transparently
01: Sticky, Clear on Read
CFGx
STAT MD[7:0]
System Bus
Read
Write
Reset
(Routed Reset
Read
Only
8-Bit Control
Register
Read
Write
8-Bit Status
Register
7
7
7-Bit Mask
Register
from Reset and Clock
Control Block
7
ACTL
INT EN
CFGx
SC OUT
CTL[1:0]
INT
SC OUT CTL bits must
be set to select Control
register bits for output 8
sc_out[7:0]
8
{sc_io_in[3:0],sc_in[3:0]
状态寄存器的操作
一个 UDB 中有一个 8bit 的状态寄存器,对 CPU,该寄
存器是只读的,它的状态由对应的互连信号输入。状态
寄存器无数据保持功能,PSoC 4 进入睡眠状态将丢失原
状态,唤醒后,被复位到 0x00。状态寄存器的位读取有
两种模式,由寄存器 STAT_MD[7:0]分别配置,具体如
下表:
表 16-18. 状态寄存器位读取模式的配置
STAT MD
0
1
CFGx
INT MD
描述
透 传 读 取 模 式 : CPU 读 状 态 寄 存 器 某 一 位
时,状态寄存器将该位对应互连信号的当前值
透传给 CPU。
粘滞读取模式:互连信号上一旦出现逻辑值
“1”,状态寄存器对应位的值被锁定为“1”,只
有 CPU 读取该位后,才会被清零。
sc_io_out[3]
器一直保持“1”值,直到被 CPU 通过系统总线读取。被读
取之后,状态寄存器自动清零,进入下一次捕捉。
这里涉及到 2 个时钟域,互连信号写状态寄存器是在模
块时钟域;CPU 读取状态寄存器是在总线时钟域,二者
相互独立。
读操作中的状态锁存
图 16-32 为状态寄存器的简化图。或门与 D 触发器组成
了状态“1”保持电路;读锁存器保证读取过程中状态的稳
定;通过 MUX 来切换状态寄存器工作在即时读取模式或
者粘滞读取模式;与门确保状态寄存器被读取后自动
清零。
状态寄存器按位独立操作,位与位之间互不影响,如:
其中一位捕捉成功,进入锁定状态之后,并不影响其它
位继续捕捉。
透传读取模式
CPU 通过系统总线进行读操作,状态寄存器返回对应互
连信号的当前值。这种模式可以用来传输 UDB 中计算和
操作的瞬间状态。
粘滞读取模式
该模式下,在每个状态和控制时钟的周期中,状态寄存
器捕捉对应互连信号的“1”值,一旦捕捉成功,状态寄存
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
137
通用数字模块
图 16-32. 状态寄存器逻辑电路
Sticky/!Transparent
Read Latch
0
D
D
from Routing
Status and
Control Clock
AR
EN
1
Q
UDB Local Bus
Q
Sticky Status
Register
Status Register
Read
End of Status
Register Read
中断的产生
图 16-33. 控制寄存器的直接控制模式
在大多数应用中,中断的产生与状态位的设置相关联。
如图 16-31 所示,通过配置寄存器位 INT_EN(ACTL[4])
和 INT_MD(CFG22[2]),寄存器的低 7 比特与屏蔽寄
存器的 7 比特的逻辑运算结果作为中断由互连信号
sc_io_out[3]输出到中断控制器。这时,状态寄存器的最
高有效位不参与逻辑运算,它存放上面逻辑运算的结果,
即作为一个中断标志位,可供 CPU 查询。
16.2.3.2
控制输出模式
UDB 中有一个 8bit 的控制寄存器,对于 CPU,它是可读
写的。状态寄存器各比特位的值可以通过互连信号
(sc_out[7:0])输出。控制寄存器无数据保持能力,进
入睡眠状态后会丢失原逻辑值,唤醒后,被复位到 0x00。
控制寄存器的操作模式
控制寄存器一共有四种工作模式,对各比特位可以独立
配 置 , 具 体 取 决 于 寄 存 器 CTL_MD1[7:0] 和
CTL_MD0[7:0] 的 位 组 合 。 举 例 说 明 ,
{ CTL_MD1[0],CTL_MD0[0]}决定了控制寄存器中 bit0 位
的工作模式,如表 16-19 所示,其它位的配置以此类推。
同步模式
如图 16-34 所示,同步模式中,控制寄存器的逻辑值在
驱动互连通道之前,会通过一个以 SC 时钟为工作时钟
的 D 触发器,进行同步。互连通道的逻辑值是与 SC 时
钟同步的,而在前一个工作模式中,它是与总线写时钟
同步的。
表 16-19. 控制寄存器 bit0 的操作模式
CTL MD
00
01
10
11
描述
Direct mode
Sync mode
Double sync mode
Pulse mdoe
直接模式
直接模式是控制寄存器的默认工作模式,如图 16-33 所
示。CPU 将逻辑值写入控制寄存器后,控制寄存器直接
利用该逻辑值驱动互连通道,该工作模式不需要 SC 时
钟的参与。
138
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-34. 控制寄存器的同步操作模式
在双同步模式中,我们在同步模式的基础上,又多加了
一次同步。在总线时钟与 SC 时钟异步的情况下,这种
工作模式能够增加信号链路的可靠性。
双同步模式
图 16-35. 控制寄存器的双同步操作模式
脉冲模式
脉冲模式与同步模式有类似之处,控制寄存器的逻辑值
在驱动互连通道之前,都会与 SC 时钟进行同步;不同
之处在于,脉冲模式中,控制寄存器的逻辑值“1”只能持
续一个脉冲,此后会被自动清零,该脉冲的宽度为一个
SC 周期。因此,在由控制寄存器驱动的互连通道上,该
逻辑值也只能持续一个脉冲。
在这种工作模式下,固件向控制寄存器的某一位写“1”来
产生脉冲。只有在控制寄存器该位的回读结果为“0”(驱
动互连通道的脉冲信号已经结束)的情况下,才可以再
次往控制寄存器的该位写“1”。可以推知,脉冲的最大频
率为 SC 时钟频率的一半。
控制寄存器的复位
控 制 寄 存 器 共 有 2 种 复 位 模 式 , 如 图 16-36 。 当
EXT_RES = 0(默认状态),互连复位(1 有效)只复
位 D 触发器,而不复位控制寄存器的比特位;当
EXT_RES = 1,D 触发器和控制寄存器的比特位均被
复位。
图 16-36. 控制寄存器复位的逻辑电路
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
139
通用数字模块
16.2.3.3
并行输入和并行输出模式
如图 16-37,DP 的并行输入端口 pi[7:0]和并行输出端口
po[7:0] 连 接 的 互 连 通 道 分 别 是 sc_out[7:0] 和
{sc_io_in[3:0], sc_in[3:0]},SC 模块与 DP 共享这些互连
通道。
通过配置寄存器位 SC_OUT_CTL(CFG22[1:0])可以
选择 sc_out[7:0]被 SC 模块还是 DP 使用。当 sc_out[7:0]
被 SC 模块使用时,还分为 2 种情况,或者输出状态寄
存器的逻辑值,或者输出计数器的值,这都可以通过
SC_OUT_CTL(CFG22[1:0])配置。
图 16-37. 并行输入与输出模式框图
Datapath
SC OUT CTL bits must
be set to select
datapath parallel out bits
for output to routing.
po[7:0]
Datapath
Parallel Out
计数器模式
SC 模块可以被配置为向下计数器,如图 16-38。计数器
的具体特性如下:
■
■
■
■
■
■
■
一个可读写的 7bit 周期寄存器;
一个可读写的 7bit 计数寄存器,只有在计数器被禁止
时才可以访问该寄存器;
当终端计数(TC: Terminal Count)为 0 时,自动将
周期重载到计数寄存器;
通过固件配置 CNT_START(ACTL[5]),可以启动
或停止计数器(另一种方法是通过互连信号直接控制
计数器的启动或停止);
通过配置 ROUTE_LD(CFG23[4])和 ROUTE_EN
(CFG23[5]),选择互连信号操作计数器:
❒ 启动或者停止计数器;
❒ 强制重载计数器,此时不关心 TC 的逻辑值;
计数器的计数值可以通过互连信号 sc_out[6:0]输出;
TC 的逻辑值可以通过互连信号 sc_out[7]输出;
140
8
8
sc_out[7:0]
16.2.3.4
pi[7:0]
Datapath
Parallel In
The INT MD and SYNC
MD control bits should
be cleared to enable
SC_IO bits to input mode.
{sc_io_in[3:0], sc_in[3:0]}
■
通过配置寄存器位 ALT_CNT(CFG23[6])可以选择
计数器工作在默认模式或 ALT(Alternate)模式:
❒ 默认模式中,TC 是时序逻辑值,只有通过互连
信号启动或停止寄存器,才可通过互连信号重载
计数器;
❒ ALT 模式中,TC 是组合逻辑值,通过互连信号
启动或停止寄存器和通过互连信号重载计数器是
相互独立的。
通过配置寄存器 SC_OUT_CTL[1:0],可以将计数器的值
通过 sc_out[7:0]输出,其中 sc_out[6:0]输出的是计数值,
sc_out[7]输出的是 TC。当 SC 模块工作在计数器模式下,
控制寄存器的其它操作是非法的;状态寄存器仍然是可
读的,但是无法产生中断,因为此时的屏蔽寄存器被用
作计数器的周期寄存器,周期寄存器具有数据保持功能。
如果要将计数器的周期设置为 N,那么需要在周期寄存
器中写入 N-1。向周期寄存器写 0(N = 1)是非法的,
导致的结果是计数值维持 1 不变。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-38. 计数器框图
P3B Bus System Bus
Read
Only*
Read
Write
*Current count value is
only readable when
not enabled.
7-Bit Period
Register
0: Reload is only controlled by terminal count
1: Reload is also controlled by routing
Routed Reset from
Reset and Clock
Control Block
RES
CFGx
ROUTE LD
CFGx
ROUTE EN
LD
7-Bit Counter
EN
Zero
Detect
Terminal
Count
(TC)
SC OUT CTL bits must be set
to select the counter output
as the selected output to
routing.
sc_out[7]
0: Enable is only controlled by firmware
1: Enable is also controlled by routing
ACTL
CNT START
CFGx
EN SEL[1:0]
7
The INT MD and SYNC
MD bits should be
cleared to configure the
SC_IO bits to input mode.
sc_out[6:0]
CFGx
LD SEL[1:0]
4
4
[7:4]
[3:0]
8
{sc_io_in[3:0], sc_in[3:0]}
16.2.3.5
16.2.3.6
同步模式
同步模式下,状态寄存器可以作为 2 个串联的 4bit 的双
同步器,将输入信号同步到 SC 模块的工作时钟上,如
图 16-39 所 示 。 当 同 步 模 式 使 能 后 , 互 连 信 号
SC_IN[3:0]作为同步器的输入;SC_IO_OUT[3:0]作为输
出。无论 STAT_MD[7:0]如何设置,状态寄存器的粘滞
读取模式被禁止。此时,状态寄存器的其它操作是非法
的;控制寄存器的操作不受影响。控制寄存器依然可以
工作计数器模式下,但是此时不能够使能 LD 和 EN 互连
信号。
如果计数器模式中使用了互连信号来操作计数器,则同
步模式无法启动,因为二者使用的互连信号有交叠。如
果计数器模式中没有使用互连信号操作计数器,则一个
SC 模块可以同时工作在计数器模式和同步模式。
状态与控制模块的时钟
当工作以下模式中,状态寄存器或者控制寄存器需要工
作时钟:
■
■
■
状态寄存器中的任意一位工作在粘滞读取模式;
控制寄存器工作在计数器模式;
状态寄存器工作同步模式。
关于时钟的更多细节,请参考 16.3.4 章节。
16.2.3.7
辅助控制寄存器
辅助控制寄存器是 SC 模块中的一个具有固定硬件配置
功能的特殊寄存器,通过它 CPU 可以动态的控制中断,
FIFO 和计数器的操作,具体描述如下:
图 16-39. 双同步器的框图
Sync Module (Status Register)
FIFO0 Clear 与 FIFO1 Clear
7
6
5
4
3
4
2
1
0
FIFO0_CLR 与 FIFO1_CLR 分别控制 FIFO0 和 FIFO1
的复位。当被置位时,对应的 FIFO 被同步重启并清零,
此时 FIFO 不能够保存数据,仅相当于一个缓冲器。当被
清零时,对应的 FIFO 才可以正常操作。
4
CFGx
SYNC MD
sc_io_out[3:0]
sc_in[3:0]
Digital Routing
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
141
通用数字模块
FIFO0 Level 与 FIFO1 Level
FIFO0_LVL 与 FIFO1_LVL 分别设定对应 FIFO 状态判
别 的 阈 值 , 如 表 16-20 所 示 。 更 多 细 节 , 请 参 考
16.3.2.2 章节。
a. 在计数器模式下,中断屏蔽寄存器被复用为计数周期
寄存器,所有无法产生中断;
中断使能
b. 在同步模式下,对状态寄存器的操作是非法的,屏蔽
寄存器也无法实现屏蔽中断功能;如果控制寄存器工
作在计数器模式下,屏蔽寄存器可以用来作为计数周
期寄存器。
当 SC 模块内置的中断产生逻辑被使能后,产生的中断
可以通过互连信号 sc_io_out[3]输出。
16.2.4
计数器的启动
配置 SC_OUT_CTL[1:0],令互连信号 sc_out[7:0]输出
计数器的值,此时通过 CNT_START 位可以启动或者禁
止计数器。
16.2.3.8
状态与控制寄存器的总结
表 16-21 对状态与控制寄存器做了一个总结。在不同的
模式中,控制寄存器与屏蔽寄存器分别是和计数寄存器
与计数周期寄存器复用的。
表 16-21. 状态寄存器与控制寄存器总结
模式
控制寄存器
状态寄存器
屏蔽寄存器
/计数值寄存器
/同步寄存器
/计数周期寄存器
控制输出
模式
向互连通道输
出控制信息
作为中断屏蔽
寄存器
计 数 器
模式
向互连通道输
出计数值
由互连通道
输入状态信
息或者作为
同步寄存器
状态输入
模式
向互连通道输
出控制信息或
者计数值
由互连通道
输 入 状 态
信息
作为中断屏蔽
寄存器
作 为 同 步
寄存器
作为计数周期
寄存器 b
同步模式
142
作为计数周期
周期寄存器 a
复位与时钟模块
复位与时钟模块的主要作用是为 2 个 PLD,DP 和状态
与控制模块选择复位源和时钟源。其中时钟源可以来自
于全局系统时钟,总线时钟和外部时钟;复位源可以来
自于互连信号和固件。如图 16-40 所示,UDB 共有 4 个
时钟选择/使能模块和 1 个复位选择/使能模块。
对 UDB 来说,一共有 10 个时钟源可供选择,分别是 8
个全局数字时钟,总线时钟以及寄存器选定的外部时钟。
需要声明,这里的总线时钟并不等同于系统总线时钟,
它被称为“bus_clk_app”(如图所示),因为它是门控的,
仅应用于 UDB 之中,其它的全局数字时钟也是同样。
DP 中的时钟发生器一共产生三个时钟,一个是 DP 的整
体工作时钟,还有两个分别供给它的 2 个 FIFO。
UDB 有四个互连信号 – RC_IN[3:0]。它们被输入到时钟
选择/使能模块,每个模块可以根据配置选择其中的一个
作为时钟使能信号,它可以被配置为电平敏感模式或边
沿敏感模式;另一方面,通过 MUX 选择,其中的一个信
号输入到各个时钟选择/使能模块中作为备选的外部时钟
源。当然,在这同一个互连输入信号是不可能同时作为
时钟使能信号和外部时钟源的。如图所示,外部时钟源
在输入之前可以选择是否与总线时钟同步。
复位与时钟模块为 PLD 和状态控制模块提供了一个互连
复位信号,同时也为各个模块提供了固件复位信号以支
持重复配置。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-40. 复位与时钟的控制
global_enable
From channel routing
rc_in[3:0]
bus_clk_app, gclks[7:0]
rc_in_gated[3:0]
PLD0
Clock
Select/Enable
pld0_clk (to PLD0)
PLD1
Clock
Select/Enable
pld1_clk (to PLD1)
ext_clk
2
bus_clk
CFGx
EXT SYNC
CFGx
EXT CLK SEL[1:0]
dp_clk (to Datapath)
DP
Clock
Select/Enable
f0_clk (to FIFO0)
f1_clk (to FIFO1)
SC
Clock
Select/Enable
sc_clk (to Status and Control)
mf
rc_in_gated[3:0]
cnt_routed_ reset (to SC counter)
sysreset
Reset
Select/Enable
pld0_reset (firmware/system reset)
pld1_reset (firmware/system reset)
sc_reset (firmware/system reset)
dp_reset (firmware/system reset)
16.2.4.1
时钟的控制
图 16-41 给出了一个时钟选择/使能模块内部电路的例子。
在 UDB 中共有 4 个这样的电路,2 个 PLD 中各有 1 个,
DP 和状态与控制模块中各有 1 个。该电路的主要组件有:
1 个全局时钟 MUX,时钟反相器,时钟使能信号 MUX,
时钟使能反相器和边沿检测器。
图 16-41. 时钟信号的选择与使能控制
3
1
rc_in_gated[3:0]
2
0
2
2
CFGx
EN SEL[1:0]
Enable Select
00: rc_in[0]
01: rc_in[1]
10: rc_in[2]
11: rc_in[3]
FF
1
1
0
0
Latch
clk
2
CFGx
EN INV
CFGx
EN MODE[1:0]
Enable Invert
0: true
1: inverted
Enable Mode
00: off
01: on
10: positive edge
11: level
1
{bus_clk_app,ext_clk, gclk[7:0]}
Clock Select
0000: gclk[0] 0100: gclk[4]
0001: gclk[1] 0101: gclk[5]
0010: gclk[2] 0110: gclk[6]
0011: gclk[3] 0111: gclk[7]
1000: ext_clk
1001: bus_clk_app
0
4
CFGx
CK SEL[3:0]
2
CFGx
CK INV
Clock Invert
0: true
1: inverted
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
143
通用数字模块
时钟选择
时钟使能的应用
时钟源的选择包括 8 个全局数字时钟,它们连接到每个
UDB,其中任意一个均可配置为 UDB 中任意一个模块的
工作时钟。另外一个选择是总线时钟,它是系统中最高
频率的时钟。最后一个选择是外部时钟,它通过互连信
号 RC_IN[3:0]被送入 UDB 的各个模块。当设计一些需要
外部提供时钟的逻辑功能模块,如 SPI,外部时钟会被
选择为 UDB 中相关模块的时钟源。在实际设计中,存在
一个 UDB 中不同模块被用来实现不同逻辑功能的需求,
为 UDB 中各个模块提供独立的时钟源选择方案支持了这
种需求的实现,提供了最大的设计灵活性。
时钟使能主要由 2 个使用场景:
时钟反向
通过配置,选定的时钟源可以被反向。但是此时有 2 个
限制:
1. 因为时钟源被反向后,系统中会出现半周期数据通道,
所以反向时钟源的频率应当比系统的最高频率要小,
从而保证建立保持时间的时序要求;
2. 当反向时钟源的频率等于总线时钟时,同步的总线
写与 UDB 内部写(如向一个正在计数的计数器中
写一个新的值)是不支持的。这条限制影响的寄存器
有 A0,A1,D0,D1 和 CTL(当作为 7bit 的计数
器时)。
固件使能 - 在实际应用中,几乎所有的逻辑功能模块都
需要时钟使能功能。PSoC 4 中一个 UDB 可以被分割以
实现多个简单的逻辑功能模块;多个 UDB 也可以被级联
以实现一个复杂的逻辑功能模块,所以需要更加灵活的
时钟使能控制。可以将控制寄存器的一位连接到一个或
者多个时钟使能输入,并通过配置各个 UDB 中模块的时
钟使能输入 MUX 来实现这样灵活的控制。
模拟本地时钟发生 - 此场景中,将时钟使能模式配置为
上升沿,这样允许 UDB 产生本地时钟,如果其它 UDB
使用与此 UDB 同步的一个时钟使能信号,则它们也可以
产生同样的本地时钟。在这个场景中,“时钟使能信号的
最大频率必须小于时钟频率的 1/2”的限制将不再存在。
FIFO 的时钟方案
DP 中 FIFO 的时钟方案比较特别。默认情况下,FIFO
与 DP 的时钟配置是相同的,当时有以下的例外:
■
■
DP 的时钟在进入 FIFO 之前,可以被反向;
当 FIFO 设置为 FAST 模式是,总线时钟会取代取代
DP 时钟作为 FIFO 的数据接收采样时钟。
16.2.4.2
复位控制
时钟使能选择
集中复位模式
通过 MUX 选择互连信号 RC_IN[3:0]中的任意一个作为
时钟使能信号输入。
通过配置,时钟使能信号也可以被反向。这个特点允许
时钟使能的原始输入信号为任意极性。
复位控制有 2 种模式:集中模式与分散模式,通过设置
UDB 配置寄存器 CFG 的 ALT_RES 位,可以选择不同
的控制模式。当 ALT_RES = 0 时,集中模式被选择,
UDB 中所有模块共享一个互连复位信号;当 ALT_RES
= 1 时,分散模式被选择,UDB 中不同的模块可以有不
同互连复位信号。
时钟使能的模式
表 16-23 给出了 2 种复位控制模式在不同方面的区别。
默认状态下,时钟是不被使能的(OFF 状态)。在配置
完目标模块的操作之后,软件可以操作寄存器 CFGxEN
MODE[1:0],来设置时钟的工作状态,具体如表 16-22
所示。
表 16-23. 复位模式
时钟使能反向
特征
集中复位模式
分散复位模式
灵活性
UDB 中 的 所 有
模块共享一个互
连复位信号
每个 UDB 的组件可以
有独立的互联复位信号
互连信号能否
复位 SC 模块
不能复位状态寄
存器
能够复位其中的一部分
电路
互连信号能否
复位 DP
否
能够复位其中的一部分
电路
表 16-22. 时钟使能的四种模式
时钟使能模式
描述
关闭
无时钟输入
连通
选择的信号源作为时钟输入
上升沿
一个时钟使能的上升沿触发一个时钟脉冲。
显然时钟使能信号的最大频率必须小于时钟
频率的 1/2
电平
时钟使能信号为高时,选择的信号源作为时
钟输入
144
PLD 的集中复位模式
图 16-42 给出了工作在集中模式的 PLD 复位系统。这里
选择了互连信号作为复位源,此外通过配置也可以选择
固件控制的寄存器位作为复位源。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-42. PLD 的集中复位模式
PLD0
pld_routed_reset
rc_in[3:0]
M
C
sysreset
2
CFGx
PLD0 RES SEL[1:0]
Reset Select
00: rc_in[0]
01: rc_in[1]
10: rc_in[2]
11: rc_in[3]
M
C
CFGx
PLD0 RES POL
Reset Invert
0: true
1: inverted
SSEL
routed
reset
1
M
C
0
SSEL
M
C
set
D Q
QB
res
1
0
PLD1
M
C
System
Reset
RSEL
PLD
Macrocell
M
C
M
C
M
C
DP 的集中复位模式
图 16-43 给出了工作在集中模式的 DP 复位系统。由表 16-32 可知,在此模式下,互连信号不能够成为 DP 的复位源,
只有固件控制的寄存器位作为 DP 的复位源。通过固件,可以异步清除 DP 的输出寄存器,进位和移位输出标志寄存器,
FIFO 状态寄存器,累加器和数据寄存器。注意数据寄存器 D0 和 D1 具有数据保持功能,在睡眠状态中能够维持它们各
自的状态。FIFO 中的数据是未知的,因为它们是基于随机存取存储器的。
图 16-43. DP 的集中复位模式
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
145
通用数字模块
SC 模块的集中复位模式
图 16-44 给出了工作在集中模式的状态与控制模块的复位系统,其中屏蔽/周期寄存器和辅助控制寄存器具有数据保持
功能。
图 16-44. SC 模块的集中复位模式
PLD 的分散复位模式
图 16-45 给出了工作在分散模式的 PLD 复位系统。虽然在此模式下,UDB 中各个模块可以应用不同的互连信号作为复
位源,但是其中的 2 个 PLD 必须应用同一个互连信号作为它们共同的复位源,具体选择哪个互连信号,是否做反向处
理,由 PLD0 复位系统的配置决定。
图 16-45. PLD 的分散复位模式
146
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
DP 的分散复位模式
图 16-46 给出了工作在分散模式下的 DP 复位系统。其中数据寄存器具有数据保持功能,它们不可以被互连信号复位。
图 16-46. DP 的分散复位模式
SC 模块的分散复位模式
图 16-47 给出了工作在分散模式下的状态与控制模块的复位系统。其中其中屏蔽/周期寄存器和辅助控制寄存器具有数
据保持功能具有数据保持功能,它们不可以被互连信号复位。
图 16-47. SC 模块的分散复位模式
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
147
通用数字模块
UDB 的上电复位初始化
16.2.4.3
■
寄存器的初始化状态,如表 16-24
■
表 16-24. UDB 中寄存器的上电复位初始态
寄存器
CFG 0 – 31
Ax, Dx, CTL,
ACTL, MASK
ST, MC
DP CFG RAM &
Fx (FIFOs)
PLD RAM
上电复位
初始态
0
详述
配置寄存器
累加器,数据寄存器,
控制寄存器,辅助控制
寄存器和屏蔽寄存器
状态寄存器和宏单元对
应的寄存器
动态配置寄存器和
FIFO 队列
PLD 的配置寄存器
■
■
0
■
0
■
未知
未知
UDB 中的工作寄存器有两种访问模式
■
■
UDB 所有的输出互连信号为“0”;
UDB 所有的输入互连信号为“0”。
所有的初始配置的发生无先后顺序之分,可以看出,在
初始化后,不会出现互连信号驱动冲突的情况。
UDB 中寄存器的寻址
16.2.5
系统总线的访问
16.2.6
在上电复位中,UDB 的输入输出互连信号状态如下:
■
8bit 工作寄存器 – 允许访问一个 UDB 中的单个寄
存器;
16bit 工作寄存器 –允许访问相邻的两个 UDB 中的
两个同样的寄存器,如 UDBn 中的 D0 和 UDBn+1
的 D0;
16bit 工作寄存器 –允许访问一个 UDB 中的两个不同
的寄存器,如同一个 UDB 中 A0 和 A1;
32bit 工作寄存器 – 允许访问相邻的四个 UDB 中的四
个同样的寄存器;
以上三种情况都允许访问 UDB 内部的配置寄存器。
系统总线访问模式,CPU 可以读写 UDB 的工作寄
存器
UDB 内部访问模式,UDB 执行相关操作时需要读写
内部的工作寄存器。
16.2.6.1
并发的系统总线访问
表 16-25 中详细列出了工作寄存器支持系统总线和 UDB
并发读/写的情况:
UDB 中的寄存器 A0,A1,D0,D1,F0,F1 等能够以
不同的位宽进行寻址,在系统总线上表现为不同位宽的
工作寄存器,具体如下:
表 16-25. 工作寄存器的并发读写情况统计
寄存器
UDB 写
系统总线读
UDB 读
系统总线写
UDB 读
系统总线读
结果未知
不允许系统总线直接进
行读操作 a, b
UDB 读取的是上一个
操作周期的值
二者读取的都是当前
值
先入先出队列 Fx
不支持
如果 FIFO 的状态标志位被使用,不允许 UDB 和
系统总线同时读/写 FIFO
状态寄存器 ST
不支持系统总线
的写操作
系统总线读取的是上一
个操作周期的值
控制寄存器 CTL
不支持 UDB 的写操作
计数寄存器 CNT
结果未知
累加器 Ax
数据寄存器 Dx
UDB 写
系统总线写
不支持系统总直接进行
读操作 c
辅助控制寄存器 ACTL
屏蔽寄存器 MASK
不支持
不支持 UDB 的读操作
UDB 读取的是上一个
操作周期的值
不支持 UDB 的写操作
二者读取的都是当前
值
计数周期寄存器 PER
宏单元寄存器 MC (RO)
不支持系统总线
的写操作
不允许系统总线直接进
行读操作 d
不支持系统总线的写操
作
a) 利用 FIFO 的软件捕获特性,CPU 通过系统总线可以对 Ax 进行可靠的读操作;
b) 只有通过 FIFO 才可以向数据寄存器 Dx 中写值,此时不能直接读 Dx 的值;
c) 只有计数或定时功能被禁止,计数寄存器才能被系统总线可靠的读取。如果想要动态的读计数寄存器,可以将它连
接到互连信号 SC_OUT[6:0]上,详见 16.3.3.4 章节;
d) 通过互连到状态寄存器的输入,宏单元寄存器可以被系统总线可靠的读取。
148
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
16.2.6.2
系统总线对累加器的访问
在 UDB 中,累加器是一个主要的操作数,所以系统总线
直接访问累加器作会返回不可预知的结果。但是通过
FIFO 的软件捕获模式,可以对累加器进行可靠的读操作。
在此模式中,对最低有效 UDB 中的累加器进行读操作会
触发所有级联 UDB 将累加器中的值转移到对应的 FIFO
中,详见 16.3.2.2 章节中软件捕获模式。通过寄存器配
置,可以将 FIFO 中的数据写入累加器 Ax 或者数据寄存
器 Dx。
16.3 端口适配(PA:Port
Adaptor)模块
数字互连通道(DSI)与高速 IO 矩阵通过端口适配(PA)
模块进行通信。端口适配模块的内部结构如图 16-54 所
示。端口适配模块的输入输出通过高速 I/O 矩阵中转连接
到 I/O 端口管脚。高速 I/O 矩阵使得 I/O 端口可以被不同
的功能模块复用。
图 16-54. 端口适配模块的框图
8bit 的 I/O 端口通过高速 I/O 矩阵和端口适配器与 DSI 通
信。高速 I/O 矩阵和端口适配器之间的信号连接有 8 个
GPIO 的数据输入,8 个 GPIO 的数据输出和 8 个输出
使能。
DSI 的输出信号传输到端口适配器的输出寄存器中,其
中高低半字节的四个比特分别通过 4 个 4-1MUX 输出到
输出寄存器的高低 4 位中。
16.3.1
PA 模块的时钟多路器
端口适配器中共有两个时钟多路器,一个给输入端口提
供工作时钟,一个为输出端口和输出使能端口提供工作
时钟。时钟多路器的结构如图 16-55 所示。
注意 DSI 与端口适配器的 OE 信号只有四个,需要通过
8 个 4-1MUX 将它们连接到高速 I/O 矩阵。
端口适配器共有两个可配置的时钟选择器和复位选择器,
给出的两个时钟或复位一个提供给输入端口 ,另一个提
供给输出端口和输出使能端口。
端口适配器中还有一个端口时钟多路器,通过配置它可
以选择输入端口中的一个比特作为时钟源和复位源输入
时钟选择器和复位选择器。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
149
通用数字模块
图 16-55. PA 时钟多路器的框图
16.3.2
PA 的复位多路器
复位多路器的结构如图 16-56 所示,通过配置可以将选择的复位信号同相或反相输出。
图 16-56. PA 复位多路器的框图
如图 16-57,端口适配器中共有两个复位选择器,一个给输入端口提供复位信号,一个为输出端口和输出使能端口提供
复位信号。通过配置,可以分别使能或禁止这些复位信号。
图 16-57. PA 的复位系统
150
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
16.3.3
PA 的数据输入单元
图 16-58 给出了数据输入单元的框图。输入来自高速 I/O 矩阵的各个端口。通过配置,输入信号可以选择被透传到 DSI,
或者同步一次后输出到 DSI,或者同步两次后输出到 DSI。这里的同步时钟是输入端口的工作时钟。
图 16-58. 数据输入单元的框图
16.3.4
PA 的数据输出单元
图 16-59 给出了数据输出单元的框图。端口适配模块的输出通过高速 I/O 矩阵传输到 I/O 端口。通过配置数据输入
MUX,可以将 DSI 输出高/低半字节中的任意一位传输到 I/O 端的高/低半字节的任意一位。通过配置数据输出 MUX,
可以为输出信号提供四种选择:透传输入信号,同步后的输入信号,工作时钟和反向的工作时钟。
图 16-59. 数据输出单元的框图
16.3.5
PA 的输出使能单元
图 16-60 给出了输出使能单元的框图。这个单元与输出单元共享一个时钟和一个复位。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
151
通用数字模块
图 16-60. 输出使能单元的框图
与前面两个单元不同,DSI 与端口适配器的 OE 信号只有四个,所以需要通过 8 个 4-1MUX 将它们输出到与高速 I/O 矩
阵的 8 个信号连接上,如图 16-61 所示。
图 16-61. 输出使能多路器
16.3.6
PA 的时钟输入多路器
图 16-62 给出了输入时钟多路器的逻辑电路结构。来自 8 个 IO 管脚的互连信号被输入一个多路器,通过多路器的选择,
某一个信号可以别选择为以下的用途:
■
■
■
■
PA 中的可编程时钟;
UDB 的时钟;
PA 中的可编程复位;
PA 中的时钟使能;
注意这个被选择的信号没有经过同步,在使用时需要特别小心。
152
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
通用数字模块
图 16-62. 输入时钟多路器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
153
(Timer/Counter/PWM) 模块
17 (Timer/Counter/PWM) 模块
通过四组专用计数器和相应的逻辑电路,TCPWM 模块能够实现 16-bit 定时器,计数器和脉冲宽度调制(PWM)等功
能。该模块可以被用于测量输入信号的周期或者脉冲宽度,确定一个事件的发生时间,对电机输入的相位信号进行正交
解调等。本章会介绍这个模块所有的工作模式。
17.1
■
■
■
■
■
■
■
■
■
■
154
特性
四个 16-bit 定时器/计数器/PWM
TCPWM 模块中的每个计数器均能够独立支持以下六种操作模式
❒
定时器/计数器
❒
捕获
❒
正交解调
❒
PWM
❒
带死区的 PWM(PWM-DT)
❒
伪随机 PWM
四种计数模式 - 向上计数,向下计数,向上/向下计数模式 0 和向上/向下计数模式 1
时钟预分频选项,支持的分频系数有 2,4,…,64,128
比较/捕获(CC)寄存器和周期寄存器(period)有额外的缓冲寄存器
触发中断的方式:
❒
计数终值(TC) - 当计数器的值达到计数终值(包括 period 寄存器中的值或 0),能够触发中断
❒
比较/捕获(CC) - 当计数器的值等于 CC 寄存器中的值(定时器模式中),或者计数器的值被捕获到 CC 寄存
器中(捕获模式中)时,能够触发中断
计数器的同步 - 四个计数器能够在同一时间发生重载,开始,停止和计数等事件
每组计数器的上溢,下溢,捕获/比较都可以产生 DSI 输出
每组计数器都有一对互补的 PWM 输出
14 个 DSI 输入信号,支持启动,重载,停止,计数和捕获事件,这些事件的触发条件可以使上升沿,下降沿,和
电平触发
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
17.2
模块概述
模块框图
图 17-1. TCPWM 的模块框图
CPU和存储器子系统
总线接口
系统接口
14
配置寄存器
DSI接口:
tr_in[13:0]
同步触发机制
总线接口
计数器0
计数器1
计数器2
计数器3
DSI接口:
12 underflow[3:0],
5
overflow[3:0],
cc[3:0]
该模块有以下接口:
■
总线接口:负责模块与 CPU 和存储器子系统的通信;
■
DSI 接口:负责模块与 UDB(请详见 UDB 章节)
之间的通信,具体包括 14 个输入的 DSI(Digital
system interconnect,数字互连信号,请详见 UDB
章节)触发信号,如重载,启动,停止,计数和捕
获事件,输出的上溢信号,下溢信号和比较/捕获
(CC)信号等
■
中断接口:负责传送四个计数器各自中断请求信号
和这四个中断请求的逻辑或运算的结果信号
■
系统接口:负责传送系统的复位与时钟相关的信号
通过写寄存器,TCPWM 模块中的四个计数器能够被独
立配置。更多寄存器信息请参考寄存器列表。
17.2.1 TCPWM 模块中计数器的使能与禁止
通过设置寄存器 TCPWM_CTRL 中的
COUNTER_ENABLED[3:0],可以使能或禁止计数器,
如表 17-1 所示。在配置计数器之前需要保证计数器被
禁止,在完成配置后再使能计数器。禁止计数器并不
会使计数器的值丢失,这个值会一直保持到下次计数
器被使能之前。
中断接口:
Interrupts[3:0],
Interrupt
8
DSI接口:
line_out[3:0],
line_compl_out[3:0]
举个例子,更新计数器 X 的计数值的典型流程:
1
2
3
禁止计数器 x
配 置 计 数 器 x 的 计 数 寄 存 器 ( TCPWM_CNT )
COUNTER)
使能计数器 x
表 17-1. 计数器的使能/禁止寄存器
COUNTER_ENABLED[x]
描述
0
禁止计数器 x
1
使能计数器 x
x = 0,1,2 或者 3
17.2.2 时钟
通过系统时钟,TCPWM 能够对事件进行同步。四个计
数器分别通过各自的 counter_en(TCPWM_CTRL [3:0] )
信号对系统时钟进行门控,得到各自的 counter_clock。
counter_clock 可以被预分频,分频系数包括 1, 2, 4…
64, 128,这可以通过寄存器 TCPWM_CNTx_CTRL 中
的 GENERIC [10:8]来设置,具体如表 17-2 所示。
表 17-2. 计数器时钟的预分频寄存器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
155
(Timer/Counter/PWM) 模块
GENERIC[10:8]
Description 描述
0
不分频
1
2 分频
2
4 分频
3
8 分频
4
16 分频
5
32 分频
6
64 分频
7
128 分频
注意:在 PWM-DT 和正交解调模式中,不能够进行时钟
的预分频。
17.2.3 事件的触发
■
在 TCPWM 模块中,一些事件可以通过硬件和软件的方
式来触发。硬件触发的方式包括电平触发,上升沿触发,
下降沿触发和双沿触发;软件触发方式则指的是操作寄
存器。这些事件的具体描述如下:
■
重载:初始化并启动计数器
❒
在向上计数模式中,计数寄存器
(TCPWM_CNTx_COUNTER)被初始化为 0;
❒
在向下计数模式中,计数寄存器被初始化为周期
寄存器(TCPWM_CNTx_PERIOD)中的值;
❒
在向上向下计数模式 0/1 中,计数寄存器被初始
化为 0;
❒
在正交解调模式中,重载事件被用作索引事件指
示了一次旋转的完成,它被用于同步正交解调。
■
启动:启动计数过程,常发生在一次停止计数或者
计数寄存器被重新初始化后。该事件不会对计数寄
存器做初始化。
在正交解调模式中,该事件复用为一个正交相位
(phiB)输入的事件,正交工作模式部分会详细
介绍。
计数:一次计数时间会引起计数寄存器加 1 或者
减 1,这取决于选择的计数方式。
❒
在正交解调模式中,该事件复用为另一个正交相
位(phiA)输入的事件。
停止:停止计数过程,计数寄存器不再随计数事件
的发生而改变。
❒
在 PWM 相关模式中,停止事件被复用为一个终
止事件,终止事件用于禁止 PWM 波形的输出。
捕获:当一次捕获事件被触发时,捕获寄存器
(TCPWM_CNT_CC)中的值被送到缓冲捕获寄存
器(TCPW_CNT_CC_BUFF)中,同时计数寄存
器中的值被送到捕获寄存器中。
❒
在 PWM 相关模式中,捕获事件被复用为一个切
换事件,该事件令 CC 寄存器和周期寄存器分别
与它们的缓冲寄存器进行数值切换。这个特性可
用于调制脉冲的宽度和频率。
❒
■
■
■
PSoC4 的任何一个 GPIO 都可以作为 DSI 的输入或输出
(数字互连信号,具体请见 UDB 章节)。外部信号通过
DSI 可以连接到 TCPWM 模块。其中的事件的硬件触发
信号可以来自于 14 个 DSI 信号,以及一个常 1,一个常
0 信号。通过 TCPWM_CNT_TR_CTRL0 可以选择将这
16 个信号中的一个作为某一事件(重载/启动/计数/捕获/
停止)的触发信号,如下图 2 所示。Remove this figure
通过配置寄存器 TCPWM_CNTx_TR_CTRL1,任何一个
信号沿或者电平都可以作为某一事件的硬件触发方式。
每个事件的硬件触发条件是可以单独配置的。除了硬件
触发,这些事件也能够被计数器的命令寄存器
(TCPWM_CMD)触发,如图 17-2。
图 17-2. TCPWM 事件触发条件的检测
上升沿
系统时钟
Trigger_in [13:0]
14
同步器
1
触发信号
0
4
TCPWM_CNT_TR_CTRL0
边沿检测
电路
下降沿
event
双沿
直通电平
2
软件触发命令寄存器
TCPWM_CMD
硬件触发条件选择寄存器
TCPWM_CNTx_TR_CTRL1
注意:
a. 所有的触发信号需要经过同步器,与系统时钟进行同步;
b. 如果在同一个计数器时钟周期中多个事件被触发,那么一个或者多个事件将会被忽视。这常发生在触发信号的频率
高于计数器的时钟频率的情况下。
156
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
17.2.4 输出信号
TCPWM 模块的输出信号如图 17-3 所示
图 17-3. TCPWM 的输出信号
计数器0中断 Interrupt 0
计数器1中断 Interrupt 1
计数器2中断 Interrupt 2
计数器3中断 Interrupt 3
汇聚中断 Interrupt
TCPWM模块
4
4
4
下溢 DSI: tr_unflow[3:0]
上溢 DSI: tr_overflow[3:0]
比较/捕获 DSI: tr_cc[3:0]
4
4
输出 line_out
互补输出Line_compl_out
内部事件信号
17.2.4.1
每个计数器模块都有三个 DSI 内部事件信号输出:
当计数器向上计数达到周期寄存器中的值时,输出
上溢(OV)信号;
表 17-3. 中断相关的寄存器
■
中断请求寄存器
比特位
TCPWM_CNTx _INTR
TCPWM_CNTx _INTR_MASKED
当计数器向下计数达到 “0”时,输出下溢( UN)
信号;
■
当计数器发生下述两种情况时,输出 CC 信号
❒
计数寄存器的值等于比较寄存器中的值:
❒
捕获事件被触发此时 TCPWM_CNTx_COUNTER
的值被拷贝到捕获寄存器中,捕获寄存器的值被
拷贝到缓冲捕获寄存器中。
17.2.4.2
0
1
TC
CC_MATCH
0
TC
1
CC_MATCH
0
1
0
TC
CC_MATCH
TC
1
CC_MATCH
中断
TCPWM 模块中的四个计数器分别有中断请求信号。在
TC 状态或者 CC 状态出现时,计数器产生中断请求,具
体参考表 17-3。此外模块还有一个汇聚中断,它是上述
四个中断请求信号的逻辑或运算结果。中断相关设置寄
存器如表 17-3 所示。
名称
TCPWM_CNTX _INTR_SET
TCPWM_CNTX _INTR_MASK
■
描述
当计数值达到计数终值时,置位,写“1”清零
当计数值达到 CC 寄存器中的值,置位,写“1”清零
写“1”,人为的生成一个 TC 中断请求,读取的状态反映当前中
断请求寄存器的状态
写“1”,人为的生成一个 CC_MATCH 中断请求,读取的状态
反映当前中断请求寄存器的状态
TC 中断请求的屏蔽位
CC_MATCH 中断请求的屏蔽位
TC 中断请求寄存器位与其相应屏蔽位的逻辑与运算结果
CC_MATCH 中断请求寄存器位与其相应屏蔽位的逻辑与运算
结果
输出信号
17.2.4.3
TCPWM 模块中,四个计数器分别提供 2 个输出信号:line_out[3:0] and line_compl_out[3:0] 。通过配置寄存器
TCPWM_CNTx_TR_CTRL2,每个计数器的 OV,UN 和 CC 状态可以分别以不同的形式来驱动各自的输出信号
line_out[x]和 line_compl_out[x],如表 17-4 所示。
表 17-4. 在 OV, UN, CC 条件下的输出
Field
Bit
比较/捕获(CC)
默认值 3
1:0
上溢(OV)
默认值 3
3:2
下溢(UN)
默认值 3
5:4
Value
0
1
2
3
0
1
2
3
0
1
2
3
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
Event
设 line_out 为‘1’
清 line_out 为 ‘0’
电平翻转
不变化
设 line_out 为‘1’
清 line_out 为 ‘0’
电平翻转
不变化
设 line_out 为‘1’
清 line_out 为 ‘0’
电平翻转
不变化
Description
在比较/捕获(CC)模式下配置输
出线
在上溢(OV)模式下配置输出线
在下溢(UN)模式下配置输出线
157
(Timer/Counter/PWM) 模块
17.2.5 电源模式
TCPWM 模块可以在 PSoC 4 的活动和睡眠模式下工作。该模块的供电电源为 VCCD。在深度睡眠模式中,所有配置
寄存器的值会被保留。TCPWM 模块在各电源模式下的工作情况见表 17-5。
表 17-5.各电源模式下 TCPWM 模块的状态
电源模式
TCPWM 模块状态
活动
支持所有的操作
睡眠
计数器时钟存在,但是总线接口不能被使用
深度睡眠
TCPWM 模块仍然被供电,但是计数器时钟被禁止,无法工作;但所有配置寄
存器的状态被保留。
休眠
TCPWM 模块被彻底关闭,所有的状态均被丢失。
17.3
工作模式
TCPWM 模块中的计数器可以工作在 6 种工作模式,通过配置寄存器 MODE(TCPWM_CNTx_CTRL[26:24])进行选
择,具体如表 17-6 所示。
表 17-6. 工作模式的配置
模式
MODE Field[26:24]
描述
定时器
000
在每个发生计数事件的计数器时钟周期中,计数寄存器中的值
加1或者减1
捕获
010
在每个发生计数事件的计数器时钟周期中,计数寄存器中的值
加1或者减1,当捕获事件发生时,计数寄存器中的值会被拷贝
到CC寄存器中,原CC寄存器中的值会送到缓冲CC寄存器中
正交解调
011
根据正交编码方法,计数器基于两个输入相位增加或减少
(X1,X2或者X4)
脉冲宽度调制
PWM
100
调制输出波形的占空比与周期
带死区的脉宽调制
PWM-DT
101
与上者不同是,输出波形带死区,即在某些时刻,两个互补的
PWM 都没有输出
伪随机脉宽调制
PWM-PR
110
利用线性反馈移位寄存器产生伪随机PWM序列
TCPWM 模块中的计数器有四种计数方式,通过配置寄存器 UP_DOWN_MODE(TCPWM_CNTx_CTRL[17:16])
可以选择计数方式,具体如表 17-7。
表 17-7 计数模式的配置
计数模式
UP_DOWN_MODE[17:16]
描述
向上计数模式
00
计数寄存器的值累加,当达到周期寄存器中的值时,输出 TC
状态
向下计数模式
01
计数寄存器的值递减,当达到“0”时,输出 TC 状态
向上/向下计数模式 0
10
计数寄存器的值累加,当达到周期寄存器中的值时,计数寄存器
的值递减,直到达到“0”
当计数寄存器的值达到 0 时,输出 TC 状态
UP/DOWN Counting Mode 1
向上/向下计数模式 1
158
11
计数寄存器的值累加,当达到周期寄存器中的值时,计数寄存器
的值递减,直到达到“0”
当计数寄存器的值达到周期寄存器中的值和达到 0 时,输出 TC
状态
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
下面依次介绍各种工作模式
17.3.1 定时器模式
定时器模式通常用于测定事件发生的时间,或者通过中断请求来计算两个事件之间的时间跨度。
17.3.1.1
模块框图
图 17-4. 定时器模式的模块框图
Reload
PERIOD
UN
Start
Stop
==
OV
CC
COUNTER
Count
==
TC
COMPARE
counter_clock
17.3.1.2
BUFFER
COMPARE
工作原理
■
在该模式中,计数器可以工作在任何一种计数模式,
它的运行方式可以是连续模式或者单次模式。
■
计数器可以向上计数,向下计数或者向上/向下计数
计数器当前的计数值存放在计数寄存器
(TCPWM_CNTx_COUNTER)中。注意:在计
数器运行过程中,不要向计数寄存器中写值
❒
计数器的周期存放在周期寄存器中
计数器的重载
❒
在向上计数模式中,当计数值达到周期时,计数
寄存器的值自动被重载为 0
❒
在向下计数模式中,当计数值达到 0 时,计数寄
存器的值自动被重载为周期
❒
在向上/向下计数模式中,当计数值达到 0 或者周
期时,计数寄存器的值不会被重载,但是计数器
的计数方向将会被切换
❒
■
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
当计数寄存器中的值与 CC 寄存器中的值相吻合时,
计数器将输出 CC 状态,该状态可以用于生成中断请
求。如果 AUTO_RELOAD_CC
(TCPWM_CNTx_CTRL[0]) = 1,CC 寄存器的值
将会在下一个 TC 事件发生时与 CC 缓冲寄存器的值
交换。
图 17-5 给出了定时器模式中的计数器在四种不同的计数
模式下的工作时序。假设周期为 A,那么
■
■
■
向上计数模式中,一轮计数占用 A+1 个计数时钟周
期(0 到 A);
向下计数模式中,一轮计数占用 A+1 个计数时钟周
期(A 到 0);
在两种向上/向下计数模式中,一轮计数占用 2*A 个
计数时钟周期(0 到 A;A-1 到 1)
159
(Timer/Counter/PWM) 模块
图 17-5. 定时器模式中个计数模式下的工作时序
定时器模式,下行计数
counter_clock
Period
0xFFFF
0xFFFF
0xFFFF
0xFFFE
0xFFFD
Counter
0xFFFF
0xFFFE
0xFFFE
0x0003
0xFFFD
0xFFFC
0x0002
0xFFFC
0x0001
0x0001
0x0000
OV
UN
TC
定时器模式,上行计数
counter_clock
0xFFFF
Period
0xFFFF
0xFFFF
0xFFFF
0xFFFE
0xFFFE
0x0003
Counter
0xFFFE
0x0003
0x0002
0x0002
0x0001
0x0002
0x0001
0x0001
0x0000
OV
UN
TC
定时器模式,上下行计数模式0
counter_clock
0xFFFF
Period
0xFFFF
0xFFFF
0xFFFE
0x0003
Counter
0x0002
0x0001
0xFFFF
0xFFFE
0xFFFE
0x0003
0xFFFE
0xFFFE
0x0002
0x0001 0x0001
0x0000
OV
UN
TC
160
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
定时器模式,上下行计数模式1
counter_clock
0xFFFF
Period
0xFFFF
0xFFFF
0xFFFF
0xFFFE
0xFFFE
0x0003
Counter
0xFFFE
0x0003
0xFFFD
0x0002
0xFFFC
0x0002
0x0001
0x0001
0x0000
OV
UN
TC
17.3.1.3
定时器模式的配置流程
将寄存器 COUNTER_ENABLED[x]
(TCPWM_CTRL)清零,禁止计数器
2. 将寄存器 MODE(TCPWM_CNTx_CTRL[26:24])
清零,选择定时器模式
3. 在 TCPWM_CNTx_PERIOD 中配置计数器的计数
周期
4. 配置 TCPWM_CNTx_CC 和
TCPWM_CNTx_CC_BUFF 寄存器。如果需要使能
CC 寄存器和 CC 缓冲寄存器的自动切换功能,将寄
存器 AUTO_RELOAD_CC
(TCPWM_CNTx_CTRL[0])置位
5. 配置寄存器 GENRIC
(TCPWM_CNTx_CTRL[10:8]),选择合适的预分
频比值,详见表 17-2
6. 配置寄存器 UP_DOWN_MODE
(TCPWM_CNTx_CTRL[17:16]),选择计数模式,
详见表 17-7
7. 配置寄存器 ONE_SHOT
(TCPWM_CNTx_CTRL[18]),选择计数器的运行
方式
■
8. 通过 TCPWM_CNTx_TR_CTRL0 来设置触发事件
信号源(如果是通过 TCPWM_CMD 进行软件触发
则不需要设置)。
9. 配置寄存器 TCPWM_CNTx_TR_CTRL1,选择各个
事件(包括重载,启动,停止和计数)的触发条件
10. 配置中断相关的寄存器,详见中断章节
11. 将寄存器 COUNTER_ENABLED[x]
(TCPWM_CTRL)置位,使能计数器
1.
17.3.2 捕获模式
在捕获模式中,计数寄存器的值可以被捕获到 CC 寄存
器中。触发捕获事件的方式包括通过软件将寄存器
TCPWM_CMD 合适的比特位置位,和输入触发信号。
该模式通常用于测量周期或者脉冲的宽度。
17.3.2.1
模块框图
图 17-6. 捕获方式的模块框图
Reload
PERIOD
Start
Stop
UN
==
COUNTER
Count
OV
CC
TC
Capture
CAPTURE
counter_clock
17.3.2.2
CAPTURE BUFFER
工作原理
捕获模式中的计数器可以工作在任何一种计数模式下。

当捕获事件发生时,计数寄存器的值被拷贝到寄存
器 TCPWM_CNTx_CC,该寄存器原来的值被送到
TCPWM_CNTx_CC_BUFF。

当捕获事件发生时,计数器输出 CC 状态,该状态可
以用于生成中断请求。
捕获模式中的计数器在向上计数模式下的工作时序如图
17-7 所示。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
161
(Timer/Counter/PWM) 模块
图 17-7. 捕获模式中向上计数模式下的工作时序
捕获模式,上行计数
counter_clock
0xFFFF
Period
Capture trigger
0xFFFF
0xFFFF
0xFFFF
0xFFFE
0xFFFE
0x0003
Counter
0x0003
0x0002
0x0002
0x0001
0x0001
0x0002
0x0001
0x0000
capture
0x0002
capture buffer
0xFFFE
0x0003
0x0002
0xFFFE
OV
UN
TC
CC
由图 7 我们可以观察到:
■
周期寄存器的值是计数寄存器能够达到的最大值
■
当计数寄存器中的值达到周期时,计数器会产生相
应的(OV/ TC)事件,具体取决于计数方式
■
捕获事件只能够被信号的边沿触发
■
当捕获触发信号的频率大于计数时钟频率时,同一
计数时钟周期中可能触发多次捕获事件,这时:
❒
总次数为偶数–等效于无触发事件发生
❒
总次数为奇数–等效于一次触发事件
17.3.2.3
1.
2.
3.
4.
5.
6.
162
通过 TCPWM_CNTx_TR_CTRL0 来设置触发事件
信号源(如果是通过 TCPWM_CMD 进行软件触发
则不需要设置)。
8. 配置寄存器 TCPWM_CNTx_TR_CTRL1,选择各
个事件(包括重载,启动,停止,捕获和计数)的
触发条件
9. 配置中断相关的寄存器,详见中断章节
10. 将寄存器 COUNTER_ENABLED[x](TCPWM_
CTRL)置位,使能计数器
7.
捕获模式的配置流程
将寄存器 COUNTER_ENABLED[x](TCPWM_
CTRL)清零,禁止计数器
将寄存器 MODE(TCPWM_CNTx_CTRL[26:24])
设置为“010”,选择捕获模式
在 TCPWM_CNTx_PERIOD 中配置计数器的计数
周期
配置寄存器 GENRIC(TCPWM_CNTx_CTRL[10:
8]),选择合适的预分频比值,详见表 17-2
配置寄存器 UP_DOWN_MODE(TCPWM_CNTx_
CTRL[17:16]),选择计数模式,详见表 17-7
配置寄存器 ONE_SHOT(TCPWM_CNTx_CTRL
[18]),选择计数器的运行方式
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
17.3.3 正交编码模式
正交解码器被用来确定一个旋转装置(如伺服电机,音量控制的轮子,PC 鼠标等)的速度和位置。正交编码器的信号
作为输入 phiA,phiB 的给解码器。
17.3.3.1
模块框图
图 17-8. 正交解码模式模块框图
index
0x0000
0xFFFF
PERIOD
phiA
==
Stop
CC
COUNTER
phiB
TC
CAPTURE
counter_clock
17.3.3.2
BUFFER CAPTURE
工作原理
正交解码只能工作在时钟 counter_clock。可以工作在 3
种正交编码模式,即:X1,X2,X4。通过计数器控制寄
存器(TCPW M_CNTx_CTRL)的 QUADRATURE_
MODE 的[21:20]字段可以加以配置。
■
■
正交相位信号 phiA 和 phiB: 计数方向取决于 phiA 和
phiB 的相位情况,phiA 和 piB 可以分别通过计数和
启动事件来输入。其中的事件的硬件触发信号可以来
自于 14 个 DSI 信号,以及一个常 1,一个常 0 信号。
通过 TCPWM_CNT_TR_CTRL0 可以选择将这 16 个
信号中的一个做 phiA/phiB(复用计数/启动信号)的
输入信号。
DSI 输入的重载信号可以作为正交索引事件。
如图 17-9 所示,这个事件会产生一个一个终止
计数 TC 条件。
在终止计数(TC)时,计数器被设为 0x0000(向上
计数时)或者周期值(向下计数时)。
注意:向下计数时的推荐周期值为 0x8000。
■
当计数值达到 0x0000 或者 0xFFFF 时。计数寄存器
的被设置位周期值(如图 9 的例子中是 0x8000)。
■
在终止计数(TC)或者计数匹配(CC)的情况下:
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
■
■
❒
计数值会被拷贝到捕获寄存器中
❒
捕获寄存器被拷贝到缓存捕获寄存器中
❒
可以产生中断请求
从捕获寄存器中的值可以看出具体事件:
❒
计数器下溢(值为 0)
❒
计数器上溢(值为 0xFFFF)
❒
索引/终止计数事件发生 (值不为 0 或 0xFFFF)
DOWN 比特位(TCPWM_CNTx_STATUS [0])显
示上一次计数的方向。“0”为向上计数,“1”为向下计
数。图 17-9 是 X1 编码模式
❒
当 phiB 从“0”开始时,在 phiA 的上升沿计数器加
1;在 phiB 从“1”开始时,在 piA 的上升沿计数器
减 1。
❒
在索引/重载事件时计数值会用周期值初始化。
❒
当计数器被索引事件初始化时,计数器终止计数
(TC)。这个事件同时可以产生一个中断。
❒
当计数器值达到 0xFFFF 时(最大计数寄存器
值),这个计数值可以被拷贝到捕获寄存器中
(CC),同时计数寄存器值被周期值初始化
(0x8000)。
163
(Timer/Counter/PWM) 模块
图 17-9. 正交编码 X1 模式时序图
Quadrature, X1 encoding
counter_clock
index/reload
event
phiA
phiB
Period
counter
capture
buffer capture
0x8000
0x8000
0x8001
0x8002
0x8003
0xFFFF
0x7FFF
0x8000
Y
0xFFFF
X
Y
TC
CC
正交相位信号时用 counter_clock 来检测的,所以在单个
counter_clock 周期正交相位信号只能改变一次。
正交编码模式 X2 和 X4 的计数速度分别是 X1 模式的两
倍和四倍,具体见图 17-10。
164
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
图 17-10. 正交编码 X2 和 X4 模式时序图
Quadrature, X2 encoding
counter_clock
index/reload
event
phiA
phiB
Period
counter
4
4
5
6
7
8
7
6
TC
Quadrature, X4 encoding
counter_clock
index/reload
event
phiA
phiB
Period
counter
4
4
5
6
7
8
9 10 11
12
11 10 9
8
TC
17.3.3.3
正交模式配置步骤
正交编码模式的寄存器配置方法如下:
7. 根据实际需求,配置在 TC 或者 CC 是使能中断。
8. 通 过 写 “1” 到 TCPWM_CTRL 寄 存 器 的
COUNTER_ENABLED[x]位使能相应的计数器。
1. 将 TCPWM_CTRL 寄存器的 COUNTER_ENABLED
[x]位清零,禁止相应的计数器。
2. 写“011”到 TCPWM_CNTx_CTRL 寄存器 MODE[26:
24]字段来选择正交模式。
3. TCPWM_CNTx_PERIOD 寄存器中设定 16 位的周
期值。
4. 通过 TCPWM_CNTx_CTRL 的 QUADRATURE_
MODE[21:20]字段来选择正交编码模式。
5. 通过 TCPWM_CNTx_TR_CTRL0 选择具体事件(索
引/piA/piB/停止)的触发信号。
6. 通过 TCPWM_CNTx_TR_CTRL1 寄存器来选择输入
信号触发索引/停止事件的条件(上升沿/下降沿/双
边沿)。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
165
(Timer/Counter/PWM) 模块
17.3.4 脉冲宽度调制(PWM)模式
PWM 模式用计数器产生的三角波和比较寄存器中的值比较,产生占空比和周期都可以变化的信号。周期依赖于周期寄
存器的值;占空比依赖于比较寄存器和周期寄存器的值。
PWM Period = (Period Value *1Clock frequency)
17.3.4.1
模块框图
图 17-11. PWM 模式的模块框图
UN
BUFFER PERIOD
OV
CC
reload
PERIOD
TC
start
==
stop
COUNTER
line_out
switch
PWM
count
line_out_compl
COMPARE
counter_clock
17.3.4.2
BUFFER COMPARE
工作原理
可以通过写 1 到 TCPWM_CMD[7:0]实现。上升沿/下
降沿/双沿/直通都可以触发交换事件。只要是边沿触
发模式,无论是硬件还是软件触发,在下一次的 TC
时,触发信号都会被清零。不同的是,在直通模式且
电平为高时不会清零,只要信号存在,就会一直发生
交换事件。
PWM 模式可以使用计数器的三种计数模式,即:向上、
向下、向上/向下。可以分别用来产生左对齐、右对齐、
中间对齐的 PWM 波形。
在重载事件时,计数寄存器会被初始化,然后开始按照
设置好的模式计数。每个计数值都会与比较计数器的值
比 较 , 如 果 匹 配 , PWM 输 出 信 号 就 会 翻 转 或 者 被
置为 0/1。
■
PWM 输出线由 OV,UN 或者 CC 事件控制。这些事件可 ■
以 将 PWM 输 出 电 平 翻 转 或 者 置 为 0/1 。 可 由
TCPWM_CNTx_TR_CTRL2 配置。
■
图 17-12 例举了中心对齐 PWM 的波形以及各个寄存器
值的变化
有效的交换事件触发信号和更新缓存周期/比较寄存
器的操作必须在下一个 TC 前完成,否则下一次将不
会进行交换寄存器值,如图 17-13 所示。
修改占空比:
■
更新缓存周期寄存器和缓存比较寄存器的值。
■
在终止计数时(TC),如果有一个有效的交换(switch)事件
并且 TCPWM_CNTx_CTRL 中的 AUTO_RELOAD_CC
and AUTO_RELOAD_PERIOD 位置 1 的话,周期和比
较寄存器上的值会自动与缓存周期和比较器寄存器的值
交换。如果只需要交换其中一个,则只需设置相应的
AUTO_RELOAD_CC 或 AUTO_RELOAD_PERIOD 位。
■
一个有效的交换(switch)事件,可以由硬件(DSI)
或者软件触发。事件如果由硬件(DSI)作为触发信
号,那么需要通过 TCPWM_CNT_TR_CTRL0[3:0]
设置 switch 事件触发信号源。如果由软件触发,
166
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
图 17-12. 中心对齐 PWM 时序图
PWM center aligned buffered
counter_clock
SW update of buffers
new period value B, new compare value N
reload event
period buffer
A
period
B
A
A
compare buffer
M
compare
M
B
N
B
M
N
A
N
Switch at TC condition
B
N
Counter
M
0
TC
CC
line_out
图 17-13 例举了中心对齐 PWM 以及软件产生的交换
事件
■
因为交换事件在 TC 以后才发生,所以第一个 PWM
波形的占空比没有变化。
■
注意,在硬件终止计数时会自动将交换事件清零,
除非是用直通模式且电平一直为高。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
167
(Timer/Counter/PWM) 模块
图 17-13. 中心对齐 PWM 的时序图(软件交换事件)
PWM, center aligned, buffered (software switch event)
counter_clock
Switch event
reload event
period buffer
period
A
B
A
B
A
compare buffer
N
M
compare
M
N
M
A
Switch at TC condition
B
N
Counter
M
0
TC
CC
line_out
17.3.4.3
■
■
■
其他配置
产生非对称的 PWM 应采用向上/向下计数模式 1,
TC 会发生在计数值达到 0 以及周期值时,需要将
比较寄存器的值在每个 TC 时更新,周期寄存器的
值会每隔一个 TC 时更新。
左对齐的 PWM 应用向上计数模式,在上溢(OV)
的时候将输出设为高,当计数器与比较寄存器匹配
时(CC)将输出设为低, 如表 17-4 所示。
右对齐的 PWM,应用向下计数模式,在下溢的时
候将输出设为低,当计数器与比较寄存器匹配时
(CC)将输出设为高,如表 17-4 所示。
17.3.4.4
终止(Kill)
表 17-8. 在 PWM 模式中,终止事件时配置计数器是否停止
PWM_STOP_ON_KILL
(TCPWM_CNT_CTRL[3])
0
1
Kill 停止 PWM 输出,但是计数器
仍然计数
Kill 停止 PWM 输出,计数器停止
计数
停止事件可以是同步或异步的,详细解释见下表 17-9。
表 17-9. 同步或异步的停止事件
PWM_SYNC_KILL
(TCPWM_CNT_CTRL[2])
0
在 PWM 模式中,停止(stop)事件被复用做终止(kill) 事件,
可以将一对输出线同时禁止。通过配置 TCPWM_CNTx_
CTRL 寄存器中的 PWM_STOP_ON_KILL 位,可以选择
当 Kill 事件发生时,是否停止计数器计数,如表 17-8
所示。
1
168
备注
备注
异步停止模式会始终禁止 PWM
输出。这个事件的触发信号需要
配置成直通(NO_EDGE_DET)
模式。只要 Kill 电平为高,就不
会输出 PWM。
同步停止模式会一直禁止 PWM 输
出直到下一个 TC 事件。这个事件
的触发信号必须配置成上升沿
(RISING_EDGE)触发模式。
例 外 : 在 向 上 /向 下 计 数 模式 1
时,会一直禁止 PWM 输出直到
计数器下一次到零时;到周期值
时,虽然发生了 TC, 但是仍然会
禁止 PWM 输出
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
17.3.4.5
PWM 模式的计数器配置
PWM 模式的寄存器配置步骤如下:
1. 通过写“0”到 TCPWM_CTRL 寄存器的
COUNTER_ENABLED[x]字段来禁止相应计数器。
2. 通过写“100”到 TCPWM_CNTx_CTRL 寄存器的
MODE[26:24]字段来选择 PWM 模式。
3. 通过 TCPWM_CNTx_CTRL 寄存器的 GENERIC 字
段来选择时钟分频,如表 17-3 所示。
4. 设置 16 位的 TCPWM_CNTx_PERIOD 周期寄存器,
如果需要交换值的时候,设置
TCPWM_CNTx_PERIOD_BUFF 缓存周期寄存器。
5. 设置 16 位的 TCPWM_CNTx_CC 比较值寄存器,如
果需要交换值的时候,TCPWM_CNTx_CC_BUFF
缓存比较值寄存器。
6. 通过写 TCPWM_CNTx_CTRL 寄存器的
UP_DOWN_MODE[17:16]来设置计数器的左对齐、
右对齐、中心对齐 PWM 模式,如表 17-7 所示。
7. 根据需求,配置 TCPWM_CNTx_CTRL 寄存器中的
PWM_STOP_ON_KILL 位和 PWM_SYNC_KILL 位。
详见表 17-7 和表 17-8。
8. 通过 TCPWM_CNTx_TR_CTRL0 来设置触发事件信
号源(如果是通过 TCPWM_CMD 进行软件触发则不
需要设置)。
9. 通过 TCPWM_CNTx_TR_CTRL1 来设置发生事件的
触发边沿条件。
10. 通过 TCPWM_CNTx_TR_CTRL2 寄存器来配置
PWM 输出信号(line_out 和 line _out_compl)在发
生 CC,OV, UN 时的变化情况。
11. 根据需求,设置 TC 或 CC 情况下产生中断。
12. 通过向 TCPWM_CTRL 寄存器的
COUNTER_ENABLED[x] 字段写“1”来使能相应的寄
存器。
17.3.5 带死区模式的 PWM
在 死 区 的 时 候 , PWM 的 两 个 互 补 输 出 “line_out” 和
“line_out_compl”都为低。死区可以防止两个 PWM 都为
高的情况。死区时间最大为 255 个 TCPWM 模块时钟
周期。
17.3.5.1
模块框图
图 17-14. PW-DT 模式模块框图
BUFFER PERIOD
CC
Reload
PERIOD
TC
Start
Stop
==
COUNTER
dt_line
Switch
PWM
Count
Dead Time
dt_line_compl
COMPARE
counter_clock
BUFFER COMPARE
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
169
(Timer/Counter/PWM) 模块
17.3.5.2
工作原理
■
带死区的 PWM 模式工作原理:
■
在死区时间将两路互补的输出都设为低。
■
死区时间由死区周期寄存器决定。
■
死区时间为零时,对原来的 PWM 输出没有影响。
■
当死区时间大于 PWM 脉冲的宽度时,这个脉冲就
没有了。
除了 TCPWM 模块内的时钟分频,带死区的 PWM
支持所有 PWM 模式的功能,停止模式的设置方法
也与 PWM 模式相同。在这个模式中
TCPWM_CNTx_CTRL 寄存器的 GENERIC 字段来
设置死区时间。注意,TCPWM 模块中的四个计数
器的主时钟(COUNTERx_CLOCK)都可以通过内
部主时钟(IMO)分频后得到(详见时钟章节),
所以模块内无法分频并不会影响带死区的 PWM 的
实用性。
图 17-15 列举了带死区和不带死区的两个 PWM 互补
输出
图 17-15. 带死区和不带死区的 PWM 时序图
PWM, Deadtime insertion
line_out
Dead time duration : 0
dt_line
dt_line_compl
Deadtime duration :
dt_line
dt_line_compl
17.3.5.3
配置带死区模式的 PWM
将计数器 X 配置为带死区的 PWM 模式的步骤如下:
1. 通过写“0”到 TCPWM_CTRL 寄存器的
COUNTER_ENABLED[x]字段来禁止相应计数器。
2. 通过写“101”到 TCPWM_CNTx_CTRL 寄存器的
MODE[26:24]字段来选择带死区的 PWM 模式。
3. 通过 TCPWM_CNTx_CTRL 寄存器的
GENERIC[15:8]来设置死区时间,如表 17-2 所示。
4. 设置 16 位的 TCPWM_CNTx_PERIOD 周期寄存器,
如果需要交换值的话,设置
TCPWM_CNTx_PERIOD_BUFF 缓存周期寄存器。
5. 设置 16 位的 TCPWM_CNTx_CC 比较寄存器,如果
需要交换值的话,设置 TCPWM_CNTx_CC_BUFF
缓存周期寄存器。
170
6. 通过写 TCPWM_CNTx_CTRL 寄存器的
UP_DOWN_MODE[17:16]来设置计数器的左对齐、
右对齐、中心对齐 PWM 模式,如表 17-7 所示。
7. 根据需求,配置 TCPWM_CNTx_CTRL 寄存器中的
PWM_STOP_ON_KILL 位和 PWM_SYNC_KILL 位。
8. 通过通过 TCPWM_CNTx_TR_CTRL0 来设置触发事
件信号源(如果是通过 TCPWM_CMD 进行软件触发
则不需要设置)。
9. 通过 TCPWM_CNTx_TR_CTRL1 来设置发生事件的
触发边沿条件。
10. 通过 TCPWM_CNTx_TR_CTRL2 寄存器来配置
PWM 输出信号(dt_line 和 dt_line_compl)在发生
CC,OV, UN 时的变化情况。
11. 根据需求,设置 TC 或 CC 情况下产生中断。
12. 通过向 TCPWM_CTRL 寄存器的
COUNTER_ENABLED[x] 字段写“1”来使能相应的寄
存器。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
17.3.6 PWM-伪随机模式
该模式用线性反馈移位寄存器(LFSR)来产生伪随机 PWM,LFSR 是一个输入为之前状态的线性方程的移位寄存器。
模块框图
17.3.6.1
图 17-16. PWM-PR 模式模块框图
BUFFER PERIOD
CC
reload
PERIOD
TC
start
==
stop
LFSR / COUNTER
line_out
switch
<
COMPARE
counter_clock
BUFFER COMPARE
工作原理
17.3.6.2
LFSR 采用的线性方程的多项式为:x16+x14+x13+x11+1,可以用一个计数寄存器实现,具体方法如图 17-17 所示。
它可以产生在[1, oxffff] 范围内的伪随机序列。注意,计数寄存器初始值必须是一个非零的数。
图 17-17. 用计数寄存器实现的伪随机序列
1
0
1
0
1
1
0
0
1
1
1
0
0
0
0
1
0
当计数寄存器的低15位小于比较寄存器的值时
(counter[14:0] < compare[15:0]),PWM 输出线
line_out输出为高。当比较寄存器的值大于或等于0x8000
时,PWM输出为高;当比较寄存器的值为零时,PWM
输出为低。
■
重载事件被当做开始事件,它会令计数器开始工作。
但是并不会初始化计数器。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
■
当计数器的值等于周期计数器的值时,会发生停止
计数(TC)事件。当初始值已知时,LFSR 产生的
计数器的值时可以预测的,也就是说,N 次移位后
LFSR 的计数器值时可以通过计算得到的。如果用
这个值来做周期值,那么就可以精确的控制 N 次以
后产生 TC 时间了。
171
(Timer/Counter/PWM) 模块
■
在发生 TC 的时候,一个有条件的 switch/capture
事件可以交换周期寄存器和比较寄存器以及两者相
对应的缓存寄存器中的值,这个条件取决于控制寄
存器中 AUTO_RELOAD_CC 和 AUTO_RELOAD_
PERIOD 位的值。
❒
❒
在终止计数时(TC),如果有一个有效的交换
(switch) 事件并且 TCPWM_CNTx_CTRL 中的
AUTO_RELOAD_CC 和
AUTO_RELOAD_PERIOD 位置 1 的话,周期
和比较寄存器上的值会自动与缓存周期和比较器
寄存器的值更换。如果只需要交换其中一个,则
只需设置相应的 AUTO_RELOAD_CC 或
AUTO_RELOAD_PERIOD 位。
一个有效的交换( switch)事件,可以由硬件
(DSI)或者软件触发。事件如果有由硬件(DSI)
作 为 触 发 信 号 , 那 么 需 要 通 过
TCPWM_CNT_TR_CTRL0[3:0] 设置 switch 事
■
件触发信号源。如果由软件触发,可以通过写 1
到 TCPWM_CMD[7:0]实现。
❒
上升沿/下降沿/双沿/直通都可以触发交换事件。
只要是边沿触发模式,无论是硬件还是软件触发,
在下一次的 TC 时,触发信号都会被清零。不同
的是,在直通模式时不会清零,只要信号存在,
就会一直发生交换事件。
支持终止(Kill)事件, 但是与 PWM 和 PWM_DT 模
式不同的是,PWM_PR 模式只支持异步终止(即只
要触发电平为高,就不会输出 PWM)。
■
支持单次模式(由控制寄存器中的 ONE_SHOT 位
配置):在发生 TC 时,计数器由硬件停止。
■
此模式中,没有下溢、上溢这些内部事件
■
当计数器值等于比较寄存器的值时,发生 CC 事件。
图 17-18 给出了伪随机产生的噪声图:
■
因为只有第 15 位参与比较,所以用中值 0x4000,
可以产生大致 50%占空比的伪随机 PWM
图 17-18. 伪随机 PWM 的时序图
Pseudo Random PWM
counter_clock
reload event
compare
0x4000
period
0xACE1
counter
0xACE1
0x5670
0xAB38
0x559C
0x2ACE
0x1567
line_out
17.3.6.3
配置伪随机 PWM 模式
将计数器 X 配置为伪随机的 PWM 模式的步骤如下:
1. 通过写”0”到 TCPWM_CTRL 寄存器的
COUNTER_ENABLED[x]字段来禁止相应计数器。
2. 通过写“110”到 TCPWM_CNTx_CTRL 寄存器的
MODE[26:24]字段来选择伪随机 PWM 模式。
3. 设置 16 位的 TCPWM_CNTx_PERIOD 周期寄存器,
如果需要交换值的话,设置
TCPWM_CNTx_PERIOD_BUFF 缓存周期寄存器。
4. 设置 16 位的 TCPWM_CNTx_CC 周期寄存器,如果
需要交换值的话,设置 TCPWM_CNTx_CC_BUFF
缓存周期寄存器。
5. 根据需求,配置 TCPWM_CNTx_CTRL 寄存器中的
PWM_STOP_ON_KILL 位和 PWM_SYNC_KILL 位。
6. 通过通过 TCPWM_CNTx_TR_CTRL0 来设置触发事
件信号源(如果是通过 TCPWM_CMD 进行软件触发
则不需要设置)。
172
7. 通过 TCPWM_CNTx_TR_CTRL1 来设置发生事件的
触发边沿条件。
8. 通过 TCPWM_CNTx_TR_CTRL2 寄存器来配置
PWM 输出信号(dt_line 和 dt_line_compl)在发生
CC,OV, UN 时的变化情况。
9. 根据需求,设置 TC 或 CC 情况下产生中断。
10. 通过向 TCPWM_CTRL 寄存器的
COUNTER_ENABLED[x] 字段写“1”来使能相应的寄
存器。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
(Timer/Counter/PWM) 模块
模块
17.4
TCPWM 寄存器
表 17-10. TCPWM 模块寄存器
寄存器
备注
特性
TCPWM_CTRL
TCPWM 控制寄存器
用来使能计数器模块
TCPWM_CMD
TCPWM 命令寄存器
用来产生软件事件
TCPWM_INTR_CAUSE
TCPWM 计数器中断原因寄存器
查看中断的来源
TCPWM_CNTx_CTRL
计数器控制寄存器
配置计数器,编码方式,单次模式,交换,停
止,死区,时钟分频
TCPWM_CNTx_STATUS
计数器状态寄存器
读取计数方向,死区长度,时钟分频,已经计
数器的运行状态
TCPWM_CNTx_COUNTER
计数寄存器
包括 16 位的计数器值
TCPWM_CNTx_CC
比较/捕获寄存器
捕获计数器的值或者比较值
TCPWM_CNTx_CC_BUFF
比较缓存寄存器/捕获缓存寄存器
比较缓存寄存器
TCPWM_CNTx_PERIOD
周期寄存器
周期寄存器
TCPWM_CNTx_PERIOD_BUFF
周期缓存寄存器
周期缓存寄存器,其实可以由条件的和周期寄
存器交换
TCPWM_CNTx_TR_CTRL0
计数器触发寄存器 0
选择触发某种事件的触发信号源
TCPWM_CNTx_TR_CTRL1
计数器触发寄存器 1
选择触发边沿条件
TCPWM_CNTx_TR_CTRL2
计数器触发寄存器 2
用来控制当发生 CC, LV, UN 事件时,输出的
变化情况
TCPWM_CNTx_INTR
中断请求寄存器
TC, CC 事件发生时,产生中断请求
TCPWM_CNTx_INTR_SET
中断设置寄存器
软件设置中断
TCPWM_CNTx_INTR_MASK
中断屏蔽寄存器
中断屏蔽位,写 0 屏蔽
TCPWM_CNTx_INTR_MASKED
中断屏蔽结果寄存器
中断屏蔽结果寄存器,中断屏蔽位和中断请求
位的逻辑与,若为 1,相应中断即会发生
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
173
F 部分:模拟系统
这部分包括以下章节:
■
精确基准源 第 175 页
■
SAR ADC 模块
■
低功耗比较器 第 208 页
■
CTBm 模块
■
LCD 段直接驱动
■
CapSense 模块
■
温度传感器 第 233 页
第 178 页
第 212 页
第 217 页
第 226 页
系统架构:
模拟子系统结构框图
x1
SAR
(12-bit)
SMX
CTBm
2x OpAmp
x1
LCD
Capsense
Programmable
Analog
2x LP Comparator
Peripheral Interconnect (MMIO)
PCLK
Digital System Interconnect (DSI)
High Speed I/O Matrix
36x GPIOs
IO Subsystem
174
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
18 精确基准源
对于PSoC4内部的模拟电路, 一个不依赖于输入电源电压和温度的电压/电流基准至关重要。举例来说,一个精确的偏置电压
对于很多电路来说都非常关键;在ADC中,基准电压用来量化输入电压;在一个VIDAC中,电压/电流基准定义了满幅时电压
的输出范围。
18.1
模块框图
PSoC 4 有一个精确基准源模块,为整个芯片提供多个精确的电压/电流基准,模块框图如图18-1。
这个模块由以下几个部分组成
 一个精确的能带(Bandgap)模块,可以产生精确的电压和电流基准。
 一个校正缓冲器,用于为不同的应用产生不同的输出电压基准,并将电压校正到1.024V。
 一组快速低功耗缓冲器,一组慢速低功耗缓冲器,分组不仅可以增强基准源的驱动能力,也可以隔离相互间的噪声。
 一组快速电流单元和一组慢速电流单元,可以分别在快速域和慢速域复制出多个电流基准源。
 一个V-CTAT模块,为闪存提供一个温度相关的基准电压。
 一个根据温度可调的电流源,可以为 IMO 产生不受温度影响的电流基准。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
175
精确基准源
图 18-1. 参考源模块框图
Fast Domain
Voltage
Generator
1.024V
Precision
BandGap
Slow Domain
resistor divider stack
Trim
Buffer
1.2V
LVD
CSD
Current
Generator
1.024V
POR / LVD
BOD
Vref_V-CTAT
CSD
SAR ADC
0.8V
IMO
LDO
Slow Buffers
Fast Buffers
2.4uA
2.4uA
Fast Buffer Bias
Slow Buffer Bias
…
2.4uA
IMO
Slow Leaf Cells
Fast Leaf Cells
18.2
Vref_V-CTAT from Fast Buffers
V-CTAT
FLASH
Untrimmed I-CTAT and I-PTAT
from BandGap
IMO
Reference
Generator
IMO
工作原理
上面介绍了模块框图,下面将详细介绍各个模块的工作
原理。
18.2.1 精确带隙电路 (Bandgap)
带隙(Bandgap)电路的主要结构是两组运行在不同的发
射极电流密度的以二极管形式连接的双极结型晶体管
(BJT)。通过一个与温度成正相关(PTAT)的电路来抵
消PN接的温度负相关性(CTAT),来产生一个直流电压基
本不随温度变化的基准电压源。基准电流源也用同样的方
法产生。
18.2.2 矫正缓冲器
Analog Circuit
…
9.6uA
2.4uA
MIRROR
2.4uA
MIRROR
GND
18.2.3 低功耗缓冲
作为基准源,调整缓冲器输出阻抗过高,需要通过低功耗
的缓冲器将每个输出进行阻抗变换后输出后每个模块,并
且可以隔离各个基准源。
这些低功耗的缓冲器分为快速缓冲区和慢速缓冲区,分别
在芯片的快速域和慢速域。分成两个域的原因是,如果所
有的基准源一起启动,由于负载电容过大,建立时间就不
可能很快。快速域的模块需要基准源建立的事件比较快
(如Flash, 电压监测器和电源系统),以确保系统成功启
动, 这部分的基准源由快速缓冲区提供。
相对来说,慢速域模块的基准源建立可以比较慢,比如
SAR, CSD等,这部分的基准源由慢速缓冲区提供。
校正缓冲器用来产生1.024V的基准电压和不同的输出电压
值的基准。
176
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
精确基准源
18.2.4 电流单元
除了能带(Bandgap)基准电压源,芯片还提供了二
阶曲率校正2.4uA电流源。电流基准经过电流单元产生
多个电流基准。
电流基准同样分为快速域和慢速域,如模块框图所示,
2.4uA的电流经过快速电流镜后分为四路,两路2.4uA
为缓冲偏置模块输入,通过快速与慢速的缓冲偏置模块,
分别为快速缓冲器和慢速缓冲器提供电压偏置;一路
9.6uA为IMO的电流基准,一路2.4uA再经过慢速电流
镜后为模拟电路提供电流基准。
快速域的电压和电流基准的建立时间为9uS,慢速域的
电压/电流基准建立时间为90uS(即达到与终值误差在
1%内所需的时间)。所有的电压和电流基准如表18-1
所示。
表 18-1. 电压和电流基准
电压或电流基准
精度
使用该参考的模块
1.2 V
±2%
低压检测模块
1.2 V
±2%
CapSense 基准电压
1.024 V
±1%
SAR ADC 基准电压
1.024 V
±2%
闪存 – 设置VLIM电压
1.024 V
±2%
BOD – 检测内部欠压
1.024 V
±2%
CapSense 基准电压
0.8 V
±2%
IMO - 弛缓振荡器的比较门限
0.8 V
±2%
LDO- VCCD和VCCA调压器基准
2.4 uA
±2.5%
模拟电路偏置电流
3 uA
±2.5%
闪存宏单元中的电流基准IREF
9.6 uA
±5%
可编程温度系数的IMO的电流基准(IREF)
18.2.5 V-CTAT 模块
擦除的闪存的操作发生在较高的温度下更快。为了保持闪存的可靠性,这种过度的擦除条件必须加以避免。 V-CTAT模
块生成一个与温度负相关 (CTAT) 电压基准,避免过擦除。
相对于55ºC时输出电压,-40ºC至150ºC的基准输出电压的线性变化范围是+ / -0%+/ -15%。
18.2.6 IMO 参考源电路
这个模块用来为内部主振荡器的块(IMO)提供一个独立的可调整的基准电流。利用Bandgap电路中互相抵消的温度正
相关 (PTAT) 和温度负相关 (CTAT) 电流来实现低温漂以及在整个工作温度范围内±2%的精度, 如图18-1 所示。
18.3
配置
在上电期间,精密基准模块会用默认校正设置初始化, 这些设置保存在非易失性锁存器(NVL)和SFLASH中。这些
设置会在芯片的生产过程中写入,客户不需要调整。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
177
19 SAR ADC 模块
PSoC® 4 包含了一个逐次逼近型模数转换器(SAR ADC)模块,其可满足中等分辨率、快速转换的应用需求。SAR
ADC 模块由 4 部分组成(见图 19-1):专用多路输入选择(SARMUX)模块、SARADC 模块、参考电压(SARREF)
模块和扫描序列控制(SARSEQ)模块。
注意:在本章节中,SAR ADC 指 PSoC 4 的 SAR ADC 模块;SARADC 指 SAR ADC 模块中的 ADC(见图 19-1)。
SARADC 是一个 12 位、采样速率可达 1 Msps 的 ADC,能实现快速、逐次逼近转换的功能;SARMUX 位于 SARADC
的前面,可以将外部管脚信号或来自 AMUXBUS_A/ AMUXBUS_B、CTBm 及温度传感器输出的内部信号传送给
SARADC 的 8 个内部通道;SARREF 可以为 SARADC 提供多种参考电压选择;序列控制器 SARSEQ 控制 SARMUX
和 SARADC,可在无 CPU 参与的情况下实现对所有使能通道的自动扫描,并可对输出信号进行预处理(比如
求平均等)。
SARADC 的第 9 个通道是一个由软件控制的插入通道,可以对输入信号进行间隙采样,例如对温度传感器输出信号的
采样。
SARSEQ 为每个通道的转换结果提供了双缓冲保存;通过配置,SAR ADC 在每次完成对所有通道的扫描后,会产生
一个中断信号。转换后的数据既可被 CPU 处理,也可在无 CPU 参与的情况下被发送到 UDB 做进一步的处理。序列发
生器(Sequencer)(见图 19-1)可记录溢出、冲突和饱和等错误标志;用户配置相应寄存器后,当错误标志产生时
可产生相应的中断信号。
除了通过软件配置寄存器外,用户也可通过 UDB 来控制大部分模拟开关(包括 SARMUX 中的模拟开关),来实现对
信号的采样和转换。因此,序列发生器(Seguencer)也可通过 UDB 来控制。
19.1
■
■
■
■
■
■
■
178
特性
宽电压范围:1.71V-5.5V
高达 1 Msps 的采样速率
8 个可配置通道和 1 个插入通道
每个通道具有如下功能:
❒ 输入信号来自外部管脚或 AMUXBUS/CTBm/温度传感器的内部信号
❒ 4 个不同采样时间
❒ 主分辨率:12 位 分辨率(默认);次分辨率:8 位/10 位
❒ 单端模式或差分模式
❒ 求平均
❒ 转换结果双缓冲保存
❒ 转换结果左对齐或右对齐
通道扫描可被软件、定时器、管脚或来自 UDB 的信号触发
❒ 单次、周期 或 连续模式
支持硬件求平均
❒ 转换结果累加
❒ 支持对 2n(1≤n≤8)个采样信号求平均
❒ 将转换结果进行符号扩展至 16 位后保存
可选的参考电压
❒ 内部参考电压 Vdda 或 Vdda/2
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
带有缓冲的内部参考电压 1.024V
外部参考电压
中断
❒ 扫描转换完成中断
❒ 通道饱和检测中断
❒ 通道阈值检测中断
❒ 扫描结果溢出中断
❒ 冲突检测中断
可配置的插入通道
❒ 软件触发
❒ 支持扫描追尾
❒ 可配置采样时间、分辨率、单端/差分输入模式和求平均
转换结果可送至 UDB 作进一步处理,而不需要 CPU 参与
来自 UDB 的信号可控制 SARMUX
来自 UDB 的信号可控制 SARADC
❒ 实现替代的序列发生器(sequencer)
低功耗模式
❒ 可分别设置 SARADC 和参考电压的低功耗模式
❒
❒
■
■
■
■
■
■
19.2
SAR ADC 模块框图
图 19-1. SAR ADC 模块框图
Control
Configure
registers
P2.0 - P2.7
AHB, DSI
SARSEQ
VPLUS
SARMUX
&Temp
SARADC
Data
Sequencer
VMINUS
SARREF
CTBm,
AMUXBUS
Vrefs
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
Ref-bypass
179
SAR ADC模块
19.3
SAR ADC 模块的使用
本章节主要内容如下:
 介绍各个模块:SARADC、SARMUX、SARREF 和
SARSEQ
 SAR ADC 系 统 资 源: 中 断、 低 功 耗模 式 和 SAR
ADC 状态
 系统操作模式:
❒ 寄存器模式
❒ DSI 模式
 配置示例
19.3.1 SARADC 核
PSoC 4 SARADC 是一个 12 位、逐次逼近型的 ADC。
PSoC 4200 器件在 SAR ADC 时钟为 18MHz 时,其采
样速率可达 1Msps;PSoC 4100 器件在 SAR ADC 时钟
为 14.5MHz 时,其采样速率可达 806ksps。
主要特性:





全差分架构,也支持单端模式
主分辨率:12 位分辨率;次分辨率:8 位/10 位
可配置的采样时间
可配置的低功耗模式(正常,1/2,1/4)
支持单次和连续转换模式
19.3.1.1
单端模式和差分模式
PSoC 4 SAR ADC 的工作模式包括单端模式和差分模式,
用户可通过寄存器 SAR_CHANx_CONFIG 来配置。
SAR ADC 采用了优化的全差分结构,在差分模式下可提
供完整的 12 位精度。即当差分输入范围为 –Vref ~ +Vref
时,SAR ADC 可以满量程输出(0 ~ 4095)。用户可通
过固定负端输入信号并配置寄存器
SAR_CHANx_CONFIG,将 SAR ADC 作为单端模式来
使用。
VSSA、VREF、P2.1、P2.3、P2.5 或 P2.7。当负端连
接到 P2.1/P2.3/P2.5/P2.7 时,此时的单端模式相当于差
分模式。需要注意的是当对温度传感器信号采样时,只
能使用单端模式,即 SAR_CTRL[11:9]会被设置为 0;如
使用差分模式,转换结果不正确
19.3.1.2
输入范围
所有的输入信号的电压均应在 VSSA〜VDDA 范围内。
同时,输入电压范围也受限于参考电压 Vref。如果负端
输入电压为 Vn,ADC 的参考电压为 Vref 时,则正端输
入电压范围为 Vn+ / - Vref。单端模式和差分模式均遵循
此标准。
需要注意的是,Vn+ / - Vref 应在的 VSSA~ VDDA 范围
之内。例如,如果负端连接到 VSSA,则正端电压范围
是 0 ~ Vref,而不是-Vref ~ Vref。因为该信号不能低于
VSSA。在这种情况下,ADC 只有一半的范围是可用的,
因为正端输入电压不能低于 Vss,所以转换结果只有 11
位有效值。这是一个典型的例子,在单端模式下的负端
输入为 VSSA。
19.3.1.3
转换结果数据格式
用户可从如下两个方面配置转换结果数据格式:
 有符号/无符号
 左对齐/右对齐
当转换结果是有符号的数据时,最高有效位为符号位,
并将其扩展使结果为 16 位;当转换结果是无符号的数据
时,将用 0 扩展转换结果至 16 位。用户可通过寄存器
SAR_SAMPLE_CTRL[3:2]分别为差分模式和单端模式转
换进行配置。
采样值保存在 16 位寄存器中。在默认情况下,数据是右
对齐的,即保存在低 12 位中,其余用符号位或 0 填充。
但采用低分辨率、左对齐时,转换结果的低有效位将采
用 0 填充。
当 SAR ADC 被配置为单端模式时,用户可通过配置全
局配置寄存器 SAR_CTRL 来选择 6 种不同的负端输入:
12 位 /10 位 /8 位分辨率的转换结果在寄存器中的存储格
式见下表 19-1。
180
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
Right
Unsigned
Right
Signed
Resolution
Signed /
Unsigned
Alignment
表 19-1. 转换结果数据在寄存器中的存储格式
Result register
Left
19.3.1.4
负端输入选择
不同的 SARADC 负端连接选择,会影响到电压范围、信噪比(SNR)、有效分辨率,详情见表 19-2。在单端模式下,
SARADC 的负端输入可连接至 VSSA、VREF、P2.1、P2.3、P2.5 或 P2.7
表 19-2. SARADC 的负端连接的不同选择
单端/差分模式
有符号/无符号
负端连接
正端输入电压范围
最大 SNR
结果寄存器
单端
N/A*
VSSA
+Vref
VSSA=0
0x7FF
0x000
较好
单端
无符号
Vref
+2*Vref
Vref
VSSA=0
0xFFF
0x800
0
好
单端
有符号
Vref
+2*Vref
Vref
VSSA=0
0x7FF
0x000
0x800
好
单端
无符号
Vx
Vx+Vref
Vx
Vx-Vref
0xFFF
0x800
0
最好
单端
有符号
Vx
Vx+Vref
Vx
Vx-Vref
0x7FF
0x000
0x800
最好
差分
无符号
Vx
Vx+Vref
Vx
Vx-Vref
0xFFF
0x800
0
最好
差分
有符号
Vx
Vx+Vref
Vx
Vx-Vref
0x7FF
0x000
0x800
最好
*在单端模式下,当 SARADC 负端连接到 VSSA 时,因 PSoC4 管脚上信号低于 VSSA 时无效,所以转换结果仅 11 位
有效。在此情况下,SINGLE_ENDED_SIGNED 位(SAR_SAMPLE_CTRL[2])不起作用,也就是无论选择有符号还
是无符号,结果相同(范围:0x000~0x7FF)。
若在单端转换下需要 12 位的数据,用户需要将参考电压 VREF 连接到 SARADC 的负端;此时转换结果范围是
0~2*Vref。
注意:在单端模式下,当 SARADC 负端连接到 P2.1/P2.3/P2.5/P2.7 时等效于差分模式。但是,当差分对的奇数管脚
连接到共用地时,转换结果仍然仅有 11 位有效位,因为被测信号不能低于 VSSA。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
181
SAR ADC模块
19.3.1.5
19.3.1.7
分辨率
PSoC 4 SARADC 的每个通道均支持 12 位主分辨率(默
认)和可选择的 8 位/10 位次分辨率。
分辨率不同,转换时间也不同:
转换时间(sar_clk)= 分辨率(bit)+ 2
采样和转换总时间(sar_clk)= 采样时间 + 分辨率(bit)+ 2
当配置 SARADC 为 12 位分辨率,采样时间=4(默认值)
时,总的采样转换时间需要 18 个 sar_clk。因此,当
sar_clk=18MHz 时,SAR ADC 的转换速率可达 1Msps。
如果用户选择较低的分辨率,比如 10 位/8 位分辨率,将
可以获得更高的转换率。
19.3.1.6
采样时间
采样时间指 SARADC 在采样和保持阶段所用时间。通过
配置寄存器 SAR_SAMPLE_TIME01 和 SAR_SAMPLE_
TIME23,用户可以为每个通道选择 4 种不同的采样时间
(范围:4~1024 个 SAR ADC 时钟)。
19.3.1.8
SAR ADC 时钟
PSoC 4200 器 件 SAR ADC 的 时 钟 频 率 范 围 为
1MHz~18MHz, 而 PSoC 4100 器件 SAR ADC 的时钟频
率范围为 1MHz~14.5MHz,其是通过对 IMO 分频得到的
(SAR ADC 不支持小数分频)。如需 1Msps 的采样速
率,用户需要将系统时钟(IMO)配置为 36MHz,SAR
ADC 时 钟 配 置 为 18MHz ; PSoC 4100 器 件 如 需
806ksps 的采样速率,用户需要将系统时钟(IMO)配
置为 29MHz。
在默认采样时间下(4 个 SAR ADC 时钟):
 分辨率为 12 位时,每完成一次采样需要 18 个 SAR
ADC 时钟。
 分辨率为 10 位时,每完成一次采样需要 16 个 SAR
ADC 时钟。
 分辨率为 8 位时,每完成一次采样需要 14 个 SAR
ADC 时钟。
SAR ADC 工作时序
图 19-2. SAR ADC 工作时序
SARADC CLK
DSI trigger
SOC
sample
18 sar_clk cycles
State
*
SAMPLE
G S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 F
SAMPLE
G S12 S11S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 F
SAMPLE
EOC
Next
Data
Data_out
Data
如图 19-2 所示,DSI 触发信号(DSI Trigger)被触发后,在转换开始信号(SOC)被置高之前,会延时几个 sar_clk。
在 12 位分辨率下,SARADC 转换过程需要 14 个 sar_clk,即
sar_clk *12bits + sar_clk(状态 G) + sar_clk(状态 F )= 14 sar_clk
SARADC 采样需要 4 个 sar_clk(默认);所以 SARADC 的整个采样和转换共需 18 个 sar_clk 时钟周期。
当采样完成时,SARADC 会发出一个脉冲信号 Next(或信号 dsi_sample_done),SARMUX 会将其他需要采样的信
号切换到 SARADC 的输入端进行采样和转换(在序列控制器 sequencer 的控制下,SARMUX 可以自动切换,详情请
参考 19.3.4 SARSEQ)。
182
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
❒
19.3.2 SARMUX
❒
SARMUX 是一个专用的多路模拟选择开关。
❒
SARMUX 的主要特性如下:
❒




开关导通电阻:600Ω(最大值)
连接内部温度传感器
可由 SARSEQ、UDB 或软件控制
内部电荷泵:
来自管脚(端口 2)的模拟信号
温度传感器的输出信号
经过 sarbus 0/ sarbus 1 的 CTBm 输出信号
(速度不够快,无法达到 1Msps)
AMUXBUS_A/AMUXBUS_B(速度不够快,无
法达到 1Msps)
19.3.2.1
模拟路由
SARMUX 有许多开关,可被 SARSEQ 模块中的序列控
制器 Sequencer 控制(下文简称序列控制)、软件控制
或 DSI 控制。序列控制和 DSI 控制可被看作硬件控制方
法,用户可通过配置寄存器 SAR_MUX_SWITCH_HW_
CTRL 的硬件控制位来屏蔽该方法。在不同的控制方法
下,开关具有不同的控制能力,见图 19-3。
VDDA <4.0V 时,电荷泵被打开,以减少开关
导通电阻
❒
VDDA>= 4.0V,可关闭电荷泵,在其输出端提
供 VDDA
 多路输入:
图 19-3. SARMUX 开关及不同的控制能力
CTBm
SARMUX
Port0
Firmware Only
Port1
Port2
P0[7]
P0[6]
P0[5]
P0[4]
P0[3]
P0[2]
P0[1]
P0[0]
Firmware + DSI
P1[7]
P1[6]
P1[5]
P1[4]
P1[3]
P1[2]
P1[1]
P1[0]
P2[7]
P2[6]
P2[5]
P2[4]
P2[3]
P2[2]
P2[1]
P2[0]
❒
Firmware + DSI + Seq
AMUXBUS_A
AMUXBUS_B
LPCOMP0
P4[3]
P4[2]
P4[1]
P4[0]
Port4
LPCOMP1
vplus
vminux
P3[7]
P3[6]
P3[5]
P3[4]
P3[3]
P3[2]
P3[1]
P3[0]
Port3
vplus
vminux
TEMP0
temp
Vssa_kelvin
CSD0
sarbus 0
sarbus 1
source
shield
csh
cmod
-
+
-
CSIDAC1
+
iout
OA1
CAP
SENSE
OA0
CSIDAC0
10x
~
1x
10x
~
1x
iout
SARADC0
vplus
vminus
ext_vref
SAR
序列控制:在此控制方式下,SARMUX 开关由 SARSEQ 模块中的序列控制器(sequencer)控制。每个通道的模拟路
由被配置完成后,在一个循环内,SAR ADC 可以自动扫描多个通道,而无需 CPU 的参与。需要注意的是,并不是每
个开关均可被序列控制,见图 19-3。与此控制方式相关的寄存器:SAR_CHANx_CONFIG,SAR_CTRL,
SAR_MUX_SWITCH0,SAR_MUX_SWITCH_HW_CTRL。详细配置请参考寄存器模式章节:19.3.8.1 SARMUX 模
拟路由配置。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
183
SAR ADC模块
软件控制:在此控制方式下,用户可通过配置寄存器来
直接控制 SARADC 的正端(VPLUS)/负端(VMINUS)
连接;图 19-3 中 SARMUX 的每个开关均可以被控制。
例如,在差分模式下,SARADC 的正负端输入可以来自
任何两个管脚/信号,而在序列控制方式下仅可以是相邻
的管脚对。但是,多通道的扫描切换,需要 CPU 的参与
控制。与此控制方式相关的寄存器:SAR_CTRL,
SAR_MUX_SWITCH0,
SAR_MUX_SWITCH_HW_CTRL。详细配置请参考寄存
器模式章节:19.3.8.1 SARMUX 模拟路由配置。
19.3.2.2
模拟内部互连
PSoC 4 的内部模拟互连是非常灵活的。通过 SARMUX,
可以将来自外部管脚(端口 2)和内部信号的多个输入连
接至 SARADC。例如,CTBm 输出信号经过 sarbus0 和
sarbus1 可以连接至 SARMUX;除端口 2 外其他管脚信
号经过 AMUXBUS_A/ AMUXBUS_B 也可以连接至
SARMUX;但是这样会影响到扫描性能(因为会产生更
大的寄生电容,需要更长的充放电时间)。
接下来将介绍一些使用示例,来帮助用户更好地理解模
拟互连。
DSI 控制:在此控制方式下,来自 UDB 的 DSI 信号按着
设定的逻辑来控制 SARMUX 开关。除了一些用于芯片设
计和测试的开关外,DSI 可以控制绝大多数 SARMUX 开
关。因此,DSI 控制方式与软件控制一样,可以为任何
两个输入管脚/信号进行差分测量。详细配置请参考 DSI
模式章节:19.3.9.1 SARMUX 模拟路由配置。
19.3.2.3
外部管脚输入
如图 19-4 所示,P2.0 和 P2.1 作为差分对分别连接到
SARADC 的正负端,两个开关闭合,这两个开关可以被
序列、软件或 DSI 控制(见图 19-3)。但是,如果需要
P2.1 和 P2.2 作为差分对时,仅可使用软件或 DSI 控制。
SARMUX
Port1
Port2
P2[7]
P2[6]
P2[5]
P2[4]
P2[3]
P2[2]
P2[1]
P2[0]
Port0
CTBm
P1[7]
P1[6]
P1[5]
P1[4]
P1[3]
P1[2]
P1[1]
P1[0]
图 19-4. 外部管脚输入
P0[7]
P0[6]
P0[5]
P0[4]
P0[3]
P0[2]
P0[1]
P0[0]
Switch open or don’t care
Switch Closed
AMUXBUS_A
AMUXBUS_B
LPCOMP0
P4[3]
P4[2]
P4[1]
P4[0]
Port4
LPCOMP1
vplus
vminux
P3[7]
P3[6]
P3[5]
P3[4]
P3[3]
P3[2]
P3[1]
P3[0]
Port3
vplus
vminux
TEMP0
temp
Vssa_kelvin
CSD0
sarbus 0
sarbus 1
source
shield
csh
cmod
-
+
-
CSIDAC1
+
iout
OA1
CAP
SENSE
OA0
CSIDAC0
10x
~
1x
10x
~
1x
iout
SARADC0
vplus
vminus
ext_vref
184
SAR
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
19.3.2.4
来自 AMUXBU_A/AMUXBU_B 的输入
如图 19-5 所示,P0.0 和 P0.1 作为差分对通过 AMUXBUS_A 和 AMUXBUS_B 连接到 SARADC 的正负端,并使用了
SARMUX 之外的开关。这些开关的使用会产生更大的寄生电容,需要更长的充放电时间,因此采样速率无法达到
1Msps。如果端口 2 可用,不推荐用户通过 AMUXBUS_A 和 AMUXBUS_B 来使用外部管脚。
CTBm
SARMUX
Port1
Port2
P2[7]
P2[6]
P2[5]
P2[4]
P2[3]
P2[2]
P2[1]
P2[0]
Port0
P1[7]
P1[6]
P1[5]
P1[4]
P1[3]
P1[2]
P1[1]
P1[0]
图 19-5. 来自模拟总线 AMUXBUS_A 和 AMUXBUS_B 的输入
P0[7]
P0[6]
P0[5]
P0[4]
P0[3]
P0[2]
P0[1]
P0[0]
Switch open or don’t care
Switch Closed
AMUXBUS_A
AMUXBUS_B
LPCOMP0
P4[3]
P4[2]
P4[1]
P4[0]
Port4
LPCOMP1
vplus
vminux
P3[7]
P3[6]
P3[5]
P3[4]
P3[3]
P3[2]
P3[1]
P3[0]
Port3
vplus
vminux
TEMP0
temp
Vssa_kelvin
CSD0
sarbus 0
sarbus 1
source
shield
csh
cmod
-
+
-
CSIDAC1
+
iout
OA1
CAP
SENSE
OA0
CSIDAC0
10x
~
1x
10x
~
1x
iout
SARADC0
vplus
vminus
ext_vref
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
SAR
185
SAR ADC模块
19.3.2.5
来自 CTBm 输出的输入
如图 19-3 所示,CTBm 输出通过 sarbus0/ sarbus1 可以连接至 SAR ADC。图 19-6 展示了一个运算放大器(opamp)
的输出如何通过一根 sarbus 连接到单端模式的 SAR ADC;其负端连接至 Vref。图 19-7 展示了两个 opamp 的输出如
何通过 sarbus0 和 sarbus1 连接到差分模式的 SARADC。这些连接也使用了 SARMUX 之外的开关,从而导致采样速
率无法达到 1Msps。但是片上的两个运算放大器可为许多应用提供更多便利。
CTBm
SARMUX
Port1
Port2
P2[7]
P2[6]
P2[5]
P2[4]
P2[3]
P2[2]
P2[1]
P2[0]
Port0
P1[7]
P1[6]
P1[5]
P1[4]
P1[3]
P1[2]
P1[1]
P1[0]
图 19-6. 来自 CTBm 输出的输入(仅经过一根 sarbus)
P0[7]
P0[6]
P0[5]
P0[4]
P0[3]
P0[2]
P0[1]
P0[0]
Switch open or don’t care
Switch Closed
AMUXBUS_A
AMUXBUS_B
LPCOMP0
P4[3]
P4[2]
P4[1]
P4[0]
Port4
LPCOMP1
vplus
vminux
P3[7]
P3[6]
P3[5]
P3[4]
P3[3]
P3[2]
P3[1]
P3[0]
Port3
vplus
vminux
TEMP0
temp
Vssa_kelvin
CSD0
sarbus 0
sarbus 1
source
shield
csh
cmod
-
+
-
CSIDAC1
+
iout
OA1
CAP
SENSE
OA0
CSIDAC0
10x
~
1x
10x
~
1x
iout
SARADC0
vplus
vminus
ext_vref
186
SAR
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
CTBm
SARMUX
Port1
Port2
P2[7]
P2[6]
P2[5]
P2[4]
P2[3]
P2[2]
P2[1]
P2[0]
Port0
P1[7]
P1[6]
P1[5]
P1[4]
P1[3]
P1[2]
P1[1]
P1[0]
图 19-7. 来自 CTBm 输出的输入(经过 sarbus0 和 sarbus1)
P0[7]
P0[6]
P0[5]
P0[4]
P0[3]
P0[2]
P0[1]
P0[0]
Switch open or don’t care
Switch Closed
AMUXBUS_A
AMUXBUS_B
LPCOMP0
P4[3]
P4[2]
P4[1]
P4[0]
Port4
LPCOMP1
vplus
vminux
P3[7]
P3[6]
P3[5]
P3[4]
P3[3]
P3[2]
P3[1]
P3[0]
Port3
vplus
vminux
TEMP0
temp
Vssa_kelvin
CSD0
sarbus 0
sarbus 1
source
shield
csh
cmod
-
-
+
CSIDAC1
+
iout
OA1
CAP
SENSE
OA0
CSIDAC0
10x
~
1x
10x
~
1x
iout
SARADC0
vplus
vminus
ext_vref
19.3.2.6
SAR
温度传感器输入
PSoC 4 包含一个片上温度传感器,其可用于温度传感和基于温度的校准。注意:当对温度传感器信号进行采样时,
SARADC 仅可使用单端模式(在差分模式下,转换结果不正确),内部 1.024V 提供参考电压。
如图 19-8 所示,温度传感器信号可被路由至 SARADC 的正端输入,路由开关可以通过 sequencer、软件或 DSI 控制。
注意:设置 MUX_FW_TEMP_VPLUS 位(SAR_MUX_SWITCH0[17]),可以使能温度传感器并将其输出连接到
SARADC 的正端;清除该位将通过切断偏置电流来禁止温度传感器。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
187
SAR ADC模块
CTBm
SARMUX
Port1
Port2
P2[7]
P2[6]
P2[5]
P2[4]
P2[3]
P2[2]
P2[1]
P2[0]
Port0
P1[7]
P1[6]
P1[5]
P1[4]
P1[3]
P1[2]
P1[1]
P1[0]
图 19-8. 温度传感器输入
P0[7]
P0[6]
P0[5]
P0[4]
P0[3]
P0[2]
P0[1]
P0[0]
Switch open or don’t care
Switch Closed
AMUXBUS_A
AMUXBUS_B
LPCOMP0
P4[3]
P4[2]
P4[1]
P4[0]
Port4
LPCOMP1
vplus
vminux
P3[7]
P3[6]
P3[5]
P3[4]
P3[3]
P3[2]
P3[1]
P3[0]
Port3
vplus
vminux
TEMP0
temp
Vssa_kelvin
CSD0
sarbus 0
sarbus 1
source
shield
csh
cmod
-
+
-
CSIDAC1
+
iout
OA1
CAP
SENSE
OA0
CSIDAC0
10x
~
1x
10x
~
1x
iout
SARADC0
vplus
vminus
ext_vref
SAR
19.3.3 SARREF
SARREF 模块的主要特性如下:
 参考电压选项:Vdda,Vdda /2,1.024V 带隙(Bandgap)(±1%),外部参考电压
 使用参考电压缓冲器和旁路电容,可增强内部参考电压的驱动能力
图 19-9. SARMUX 模块框图
P1.7
Vref_ext / bypass cap
Bandgap
Internal 1.024V Vref
SARREFMUX
VDD
VDD/2
Reference
buffer
Vref for SAR ADC core
SARREF
188
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
19.3.3.1
管脚 P1.7 上的电压作为参考电压时,用户可在此管脚上
连接外部电容来过滤参考信号上可能存在的噪声。
参考电压选项
SARADC 的参考电压选择电路由 SARREF 中的多路选
择器和开关组成。通过配置寄存器 SAR_CTRL[6:4],使
SARREFMUX 选择如下有效电压:




如果没有连接外部参考旁路电容,SARADC 的采样速率
最大只能达到 166Ksps。例如,当不连接旁路电容,并
使用内部参考电容 1.024V 时,SAR ADC 的最大时钟为
3MHz。当使用外部参考电压时,推荐用户连接一个外部
电容。可以通过设置 SAR_CTRL[7]来使能旁路电容。
Vdda
Vdda/2
来自带隙的内部参考电压 1.024V
连接到 P1.7 的外部参考电压
19.3.3.2
下表列出了使用 12 位分辨率、不同的参考电压模式下,
SARADC 的最高工作频率/采样率。
旁路电容
电压 1.024V、VDDA/2 和 VDDA 在作为 SARADC 的参
考电压之前,会经过缓冲器 Reference Buffer。当选择
表 19-3. 参考电压对工作频率和采样速率的影响
选择参考电压:
SAR_CTRL[6:4]
参考电压
选择旁路电容:
SAR_CTRL[7]
选择
Reference
buffer
最高工作
频率
最大采样
速率
内部参考电压 1.024V(无旁路电容)
4
0
Yes
3MHz
166Ksps
内部参考电压 1.024V(有旁路电容)
4
1
Yes
18MHz
1Msps
外部参考电压
5
0/1
NO
18MHz
1Msps
VDDA/2(无旁路电容)
6
0
Yes
3MHz
166Ksps
VDDA/2(有旁路电容)
6
1
Yes
18MHz
1Msps
VDDA
7
0/1
Yes
18MHz
1Msps
内部参考电压 1.024V 的启动时间因不同的旁路电容而不同,下表描述了在两种通用旁路电容下,内部参考电压
1.024V 的启动时间值。如果在两个扫描间改变参考电压至内部参考电压 1.024V,SARADC 开始采样前必须确保内部
参考电压 1.024V 达到稳态。
表 19-4. 内部参考电压启动时间
内部参考电压的旁路电容
内部参考电压启动时间最大值
使用外部电容(1uF)
2ms
使用外部电容(100nF)
200us
19.3.3.3
输入电压范围和参考电压
所有的输入电压应该在 VSSA ~VDDA 的范围内。输入电
压范围还受 Vref 选择限制。如果负端输入为 Vn,
SARADC 的参考电压为 Vref 时,则正端输入范围为 Vn+
/ - Vref。这个标准适用于单端和差分模式。
19.3.4 SARSEQ
SARSEQ 是一个专用序列控制器,可以自动地控制
SARMUX 依次切换输入通道,同时将转换结果保存在结
果寄存器组中。
SARSEQ 可以对 每个通道:
 自动地控制 SARMUX 的 模拟路由,而无需 CPU
干预。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
 控制 SARADC(分辨率/采样时间/参考电压等)
 接收 SARADC 转换数据,并做预前处理(求平均、
范围检测等)
 转换结果数据被双缓冲保存,可使 CPU 安全地读取
最近一次扫描完成的结果
重要功能:
 8 个通道可单独使能;在无需 CPU 参与情况下,自
动扫描使能通道
 在自动扫描过程中可对插入通道(第 9 个通道)进行
间隙采样转换。
 每通道可选择:
❒ 输入信号来自外部管脚或内部信号(AMUXBUS/
CTBm/温度传感器)
❒ 4 个可配置的采样时间
189
SAR ADC模块
主分辨率:12 位 分辨率(默认);次分辨率:
8 位/10 位
❒ 单端模式或差分模式
❒ 转换结果求平均
 扫描触发
❒ 单次模式、周期模式或连续模式
❒ 触发信号来自任何数字信号或 GPIO 管脚输入
❒ 支持由 UDB 构成的固定功能模块触发
❒ 软件触发
 硬件求平均
❒ 转换结果累加
❒ 支持对 2n(1≤n≤8)个采样信号求平均
❒ 将转换结果进行符号扩展至 16 位后保存
 对输出数据进行双缓冲保存
❒
左对齐或右对齐
转换结果保存在工作寄存器(working register)
和结果寄存器(result register)中
 中断
❒ 扫描转换完成中断
❒ 通道饱和检测中断
❒ 通道阈值检测中断(阈值可配置)
❒ 扫描结果溢出中断
❒ 冲突检测中断
 可配置的注入通道
❒ 软件触发
❒ 支持扫描追尾功能
❒ 可配置采样时间、分辨率、单端/差分输入模式和
求平均
❒
❒
图 19-10. SARSEQ 模块框图
SARSEQ
AHB BUS interface
Result Registers
CHAN_RESULT0
。。。
Configuration
Registers
CHAN_RESULT7
STATUS
VPLUS
Accumulate/Average
/Align/Sign extended
VMINUS
sarbus 0/1
19.3.4.1
求平均
SARSEQ 模块中有一个 20 位的累加、移位寄存器,可
以执行求平均运算。求平均运算是在符号扩展之后进行
的。用户可通过配置寄存器 SAR_SAMPLE_CTR 求平均。
INTR_MASK
INTR
saturate_intr
sar_dsi_data[]
P1.7
Saturation
Detect
DSI output to UDB
SARREF
DSI input from UDB
Temperature Sensor
RANGE_THRES
sar_interrupt
SARADC
RANGE_COND
<
=
>
range_intr
eos/collision/overflow_intr
AMUXBUS_A/_B
SARMUX
Sequencer logic
& state machine
。。。
PORT 2: P2.0…P2.7
INJ_CHAN_RESULT
要求平均运算。在 DSI 控制模式下,信号
dsi_cfg_average 决定是否使能求平均运算。
AVG_CNT 字段(SAR_SMAPLE_CTRL [6:4])决定了
求平均运算需要的采样次数(N)。
在寄存器控制模式下,用户可通过配置 AVG_EN 位
(SAR_CHAN_CONFIG[10]))来使能某个通道是否需
N = 2AVG_CNT+1 N = [2..256]
190
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
例如,当 AVG_CNT=3 时,则 N=16。
SAR ADC模块
当求平均运算被使能时,用户还需要设置 AVG_SHIFT
位(SAR_SAMPLE_CTRL[7]),来对结果进行移位求
平均。
如需对某个通道进行求平均运算,在每个扫描周期中,
SARSEQ 将对该通道连续执行 N 次采样,每次采样的结
果经过符号扩展后进行累加。N 个数据累加之后,通过
对结果进行移位求平均。因转换结果分辨率最大为 12 位,
N 最大值为 256,所以 20 位的累加器不会溢出。
如果 AVG_SHIFT(SAR_SAMPLE_CTRL[7])位设置为
1,硬件会对累加值右移 AVG_CNT+1 位得到平均值。
如果 AVG_SHIFT(SAR_SAMPLE_CTRL[7])=0,硬
件会对结果强制向右移位,以使结果存放到 16 位寄存器
中(右移位数为 0 和 AVG_CNT-3 中较大的值)。也就
是说,如果采样次数大于 16(AVG_CNT >3),那么累
加结果将被右移 AVG_CNT-3 位;如果 AVG_CNT<3,
则转换结果不右移。但需要注意的是,这种情况下求平
均的结果可能会比期望值大,所以建议用户将
AVG_SHIFT 位置 1。
移位后,转换结果保存在 16 位记过寄存器中。注意:
求平均时总是使用 12 位分辨率和右对齐,也就是说
RESOLUTION 位(SAR_CHANx_CONFIG [9])和
LEFT_ALIGN 位(SAR_SAMPLE_CTRL[1])不起作用。
19.3.4.2
阈值检测
SARSEQ 支持在无 CPU 参与的情况下自动对采样值与
上下限阈值比较,即阈值检测。上下限阈值分别保存在
寄存器 SAR_RANGE_THRES 的 RANGE_HIGH 字段
(SAR_RANGE_THRES[31:16])和 RANGE_LOW 字
段(SAR_RANGE_THRES[15:0])中。
当某个通道的转换结果满足一定条件时,将触发可屏蔽
的阈值检测中断(RANGE_INTR)。用户可通过对
RANGE_COND(SAR_RANGE_COND[31:30])位进行
如下配置来设置触发条件。
0: 结果值 < RANGE_LOW(小于下限阈值)
1: RANGE_LOW <=结果值< RANGE_HIGH(上下限阈
值间)
2: RANGE_HIGH <=结果值(高于上限阈值)
3: 结果值<RANGE_LOW || RANGE_HIGH <=结果值
(上下限阈值之外)
关于阈值检测中断的详细描述,请参考 19.3.5.5 阈值检
测中断章节。
19.3.4.3
register)中;一旦这次扫描完成,转换结果会被拷贝到
相应通道的结果寄存器(result register)中,以备应用
程序读取。在当前扫描完成前,软件应有足够的时间来
读取上次的转换结果,否则,上次的转换结果会被破坏。
除插入通道外,每个通道均有两个寄存器来执行双缓冲
保存;插入通道因不包含在常用的扫描序列中,不需要
对结果进行双缓冲保存。
19.3.4.4
插入通道
插入通道与其他通道类似,但不属于自动扫描的一部分。
其可对输入信号进行间隙采样、转换;例如,每 2 秒对
温度传感器进行一次采集。但是,如果 SARADC 工作于
连续模式下,使能插入通道将改变其他通道的采样速率。
插入通道仅可通过软件设置 INJ_START_EN 位
(SAR_INJ_CHAN_CONFIG[31])来触发,并且其数据
和中断均不能发送至 DSI 总线。由于软件触发是单次触
发,所以其不支持双缓冲和溢出中断。
用户可以通过寄存器 SAR_INJ_CHAN_CONFIG 来配置
插入通道,其配置方式与其他通道类似。插入通道支持
如下特性:
 管脚/信号 选择
 单端/差分模式选择
 分辨率选择:12 位 - 主分辨率; 8 位/10 位 - 次分
辨率
 4 种采样时间选择
 求平均
插入通道支持如下中断:




插入通道转换结束中断 INJ_EOC_INTR
插入通道阈值检测中断 INJ_RANGE_INTR
插入通道饱和检测中断 INJ_SATURATE_INTR
插入通道冲突检测中断 INJ_COLLISION_INTR
插入通道所对应的中断配置寄存器分别是:SAR_INJ_
CHAN_CONFIG,SAR_INJ_RESULT,SAR_INTR,
SAR_INTR_MASK,SAR_INTR_MASKED 和 SAR_
INTR_SET。
追尾功能:软件可以通过对 INJ_START_EN 位(SAR_
INJ_CHAN_CONFIG [31])置 1 来触发对插入通道的采
样、转换。如果有一个扫描正在进行,推荐通过设置 INJ_
TAILGATING(SAR_INJ_CHAN_CONFIG [30])=1 使
能追尾功能,则 INJ_START_EN 仅在当前扫描结束后才
使能插入通道来进行采样转换,而不产生任何冲突中断。
如果当前没有扫描进行(SARADC 处于空闲状态),并
使能了追尾功能,则 INJ_START_EN 将等待至下一个扫
描结束后才使能插入通道;在这种情况下,建议禁止追
尾功能。
双缓冲保存
SAR ADC 使用双缓冲保存转换结果,这样可以在执行扫
描的同时读取上次的转换结果。在扫描进行时,SAR
ADC 结果会被写入相应通道的工作寄存器(working
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
191
SAR ADC模块
当追尾功能被禁止,SARADC 处于空闲状态时,插入通
道的转换会被立即执行。当追尾功能被禁止,SARADC
正执行其他通道的扫描时,触发插入通道转换将与当前
的扫描产生冲突,并产生一个插入通道冲突检测中断
INJ_COLLISION_INTR;在这种情况下,插入通道的转
换将被推迟到扫描结束后执行。还有一种情况(追尾被
禁止),其他通道的下一个扫描可能与当前进行的插入
通道转换产生冲突,并产生一个冲突中断
FW_COLLISION_INTR 或 DSI_COLLISION_INTR;在
这种情况下,其他通道的扫描将被推迟到插入通道完成
后执行,这会对定期扫描产生一个抖动。但需要注意的
是,由连续触发或 DSI 触发(电平触发模式)激活的扫
描在任何情况下均不产生冲突中断。
图 19-11. 插入通道的追尾功能流程图
使用追尾功能时,存在一个缺点:在下一个触发前可能
需要等待较长时间。如果插入通道对其他通道扫描不会
产生冲突或引起抖动,可以禁止追尾功能。
(SAR_INTR[6])、INJ_SATURATE_INTR(SAR_INTR
[5])和 INJ_COLLISION_INTR(SAR_INTR[7])等位的
拷贝。
插入通道完成转换后,插入通道转换结束中断 INJ_EOC_
INTR 位(SAR_INTR[4])会被置 1, INJ_START_EN
位(SAR_INJ_CHAN_CONFIG [31])被清除;转换结
果会被保存在寄存器 SAR_INJ_RESULT 的位[15:0]中。
32 位寄存器 SAR_INJ_RESULT 的位[31:28]分别是 IN
J_EOC_INTR(SAR_INTR[4])、INJ_RANGE_INTR
下图描述了一个插入通道在连续模式扫描间被使能的例
子,其中通道 1、通道 3、通道 5 和通道 7 被使能,并且
插入通道的追尾功能也被使能。
192
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
图 19-12. 连续模式扫描和插入通道
Regular scan
Channel 1,3,5,7
Injection
Channel
Regular scan
Regular scan
Channel 1,3,5,7
Channel 1,3,5,7
。。。
CONTINUOUS
INJ_START_EN
INJ_TAILGATING=1
INJ_EOC_INTR=1
INJ_START_EN =0
Fill SAR_INJ_RESULT
但需要注意的是,如果已使能的 SARADC 被禁止,则使
能的插入通道的 INJ_START_EN 位
(SAR_INJ_CHAN_CONFIG [31])会被立即清除。
19.3.5 中断
接下来将介绍 SAR ADC 产生的中断信号:扫描结束中
断(EOS_INTR)、溢出中断、冲突中断、插入通道转
换结束中断、阈值检测中断及饱和检测中断。每个中断
在寄存器 SAR_INTR_MASK 中均对应一个中断屏蔽位;
如果屏蔽位设为 0,则对应的中断信号会被忽略。当屏蔽
位为 1,并且相应的中断信号处于挂起状态时,SAR
ADC 中断将会产生。
在 SAR ADC 的中断服务程序中,应用程序读取数据后,
应该向中断位写 1 来清中断。
寄存器 SAR_INTR_MASKED 中保存了中断源与中断屏
蔽位逻辑与的结果,其可用于软件识别中断源。
寄存器 SAR_INTR_SET 支持通过软件向相应位写 1 来
触发相应中断,方便软件验证和调试。
19.3.5.1
扫描结束中断(EOS_INTR)
每次扫描结束时,SARADC 将产生一个扫描结束中断
EOS_INTR。建议用户在读取数据后及时清除此中断。
用户可通过设置 EOS_DSI_OUT_EN 位
(SAR_SAMPLE_CTRL [31])来控制 EOS_INTR 是否
需要发送到 DSI 总线;如果发送,则 EOS_INTR 将在
DSI 总线上保持两个系统时钟周期。这些时钟周期与刚
扫描通道的信号 sar_dsi_data_valid 保持一致
EOS_MASK 位(SAR_INTR_MASK[0])是中断 EOS_IN
TR 的屏蔽位。EOS_MASKED 位(SAR_INTR_MASKE
D[0])保存了 EOS_INTR 与 EOS_MASK 逻辑与的结果。
用户也可以通过设置 EOS_SET 位(SAR_INTR_SET[0])
位来产生中断,而不需要 SARSEQ 和 SARADC 的参与,
方便软件验证和调试。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
19.3.5.2
溢出中断
每完成一次扫描,SARADC 将产生一个扫描结束中断
EOS_INTR,如果此时 EOS_INTR 仍然为 1,即没有被
软件及时清除,那么溢出中断 OVERFLOW_INTR 将被
产生,并且原来的数据会被覆盖。
溢出中断 OVERFLOW_INTR 可被 OVERFLOW_MASK
位(SAR_INTR_MASK[1])位屏蔽。中断 OVERFLO
W_INTR 与 OVERFLOW_MASK 位逻辑与的结果被保存
在 OVERFLOW_MASKED 位(SAR_INTR_MASKED[1])
中。通过对 OVERFLOW_SET 位(SAR_INTR_SET[1])
写 1,可软件设置中断 OVERFLOW_INTR,其可方便软
件验证和调试。
19.3.5.3
冲突中断
当 SARSEQ 正忙于扫描控制的过程中,一个新的触发
(见触发章节)发生了。那么这个新触发的扫描将在本
次扫描完成后才会有效。此时,SARADC 将产生一个冲
突中断来通知软件此触发的扫描将会被延迟执行。在非
连续触发模式下,这个新的触发可在任何时候发生。
冲突中断包括 3 种类型:软件触发冲突中断
(FW_COLLISION_INTR),DSI 触发冲突中断
(DSI_COLLISION_INTR)和插入通道冲突中断
(INJ_COLLISION_INTR)。软件可通过读取寄存器
SAR_INTR 来辨别冲突中断的类型。
注意:当 DSI 触发是电平方式触发时,将不会产生
DSI_COLLISION_INTR(见 DSI 触发配置)。
这三种冲突中断可被寄存器 SAR_INTR_MASK 中的相应
位屏蔽;其与寄存器 SAR_INTR_MASK 相应屏蔽位的逻
辑与的结果被保存在寄存器 SAR_INTR_MASKED 的相
应位中,以方便软件处理。对寄存器 SAR_INTR_SET
的相应位写 1 可产生相应的冲突中断,方便软件调试和
验证。
193
SAR ADC模块
当插入通道的转换结束时,硬件将产生一个插入通道转
换结束中断 INJ_EOC_INTR。在应用程序从寄存器
SAR_INJ_RESULT 中读取数据后,请及时清除此中断。
SATURATE_MASK 位(此位设置为 0)屏蔽。饱和检测
中断与屏蔽位 SATURATE_MASK 逻辑与的结果存放在
寄存器 SAR_SATURATE_INTR_MASKED 的相应位中。
因此,如果对应的 SATURATE_MASK 位不为 0,当饱
和检测中断发生时,发送至 NVIC 的 SARADC 中断信号
为高。
注意:如果插入通道紧随一个扫描进行,则 SARADC 在
产生中断 EOS_INTR 的同时开始对插入通道进行转换,
也就是说插入通道不是扫描的一部分。
当应用程序向寄存器 SAR_SARTURATE_INTR_SET 的
相应位写 1 时,可产生相应通道的饱和检测中断,其可
方便软件调试和验证。
中断 INJ_EOC_INTR 可被 INJ_EOC_MASK 位
(SAR_INTR_MASK[4])屏蔽。中断 INJ_EOC_INTR
与 INJ_EOC_MASK 位逻辑与的结果存放在
INJ_EOC_MASKED 位( SAR_INTR_MASKED[4] )中,
以方便软件处理。向 INJ_EOC_SET 位
(SAR_INTR_SET[4])写 1,也可触发中断
INJ_EOC_INTR,其可方便软件调试和验证。
19.3.5.7
19.3.5.4 插入通道转换结束中断
(INJ_EOC_INTR)
19.3.5.5
阈值检测中断
当对 SARADC 使能了求平均、左右对齐或符号扩展,则
阈值检测中断将在这些处理后产生,也就是说不需要等
到整个扫描结束。阈值需要与结果数据具有相同的数据
格式(见转换结果数据格式)。
阈值检测中断可以被寄存器 SAR_RANGE_INTR_MASK
相应 RANGE_MASK 位(此位设置为 0)屏蔽,其与寄
存器 SAR_RANGE_INTR_MASK 的相应位逻辑与的结
果保存在寄存器 SAR_RANGE_INTR_MASKED 的相应
位中。因此,如果对应的 RANGE_MASK 位不为 0,当
阈值检测中断发生时,发送至 NVIC 的 SARADC 中断信
号为高。
当程序向寄存器 SAR_RANGE_INTR_SET 的相应位写
1 时,可产生相应的阈值检测中断,其可方便软件调试和
验证。
每个通道均有一个阈值检测中断(RANGE_INTR 和
INJ_RANGE_INTR)。
19.3.5.6
饱和检测中断
SARADC 每完成一次转换后,会进行一次饱和检测。当
饱和检测中断发生时,表示该通道的采样值等于相应分
辨率下的下限值或上限值。软件接收到该中断后可以选
择放弃此次转换结果。
当通道选择 10 位或 8 位分辨率时,其高位将被忽略。
中断源识别
寄存器 SAR_INTR_CAUSE 中包含了 SARADC 当前挂
起的中断。中断服务程序可以通过读此寄存器来辨别产
生中断的来源。
寄存器 SAR_INTR_CAUSE 的位[7:0]的值与寄存器
SAR_INTR_MASKED 的位[7:0]相同,INTR_CAUSE
的位 [31:30] 分别是 8 个通道的阈值检测和饱和检测中断
标志位,其分别是寄存器 SAR_RANGE_INTR_MASKED
和 SAR_SATURATE_INTR_MASKED 中的 8 个通道相
应位逻辑或的值(插入通道的 INJ_RANGE_INTR 和 INJ_
SATURATE_INTR 除外)。
19.3.6 触发
只有当触发被激活时,相应的扫描才开始工作;SAR
ADC 支持 3 种触发方式:软件触发, DSI 触发和 连续触
发,详情如下:
 软件触发:当应用程序向 FW_TRIGGER 位
(SAR_START_CTRL[0])写 1 时,将激活一个软件
触发。软件触发是单次触发,可触发对使能通道的扫
描。当扫描完成时,SARSEQ 会清除
FW_TRIGGER 位并返回空闲模式,等待下一个触发。
如果 SARADC 被禁用,则 FW_TRIGGER 位会被立
刻清除。
 DSI 触发:DSI 触发是由来自 DSI 的信号 dsi_trigger
产生的触发。dsi_trigger 可以被连接到 TCPWM 的输
出,也可被连接到任意 GPIO 或 UDB。例如,UDB
执行一个状态机以响应特定事件序列,进而产生触发。
 连 续 触 发 : 通 过 软 件 设 置 CONTINUOUS 位
(SAR_SAMPLE_CTRL[16]),可以激活连续触发。
在这种触发模式下,SARSEQ 将不间断、连续地执
行扫描,一直处于忙状态。在扫描的过程中,软件触
发 和 DSI 触 发 将 不 起 作 用 , 但 是 被 置 1 的
FW_TRIGGER 位将在下一个扫描结束时被清除。
饱和检测在每次转换之后、求平均之前进行。所以饱和
中断发生时,求平均后的结果并不一定等于上限值或下
限值。
一旦采样数据饱和,SARADC 就会立即产生饱和检测中
断。每个通道的饱和检测中断均可被寄存器
SAR_SATURATE_INTR_MASK 相应的
194
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
建议用户在同一时刻,只使用一个触发方式。如果 DSI
触发和软件触发同时发生了,则将优先处理 DSI 触发而
执行一次扫描,然后再对软件触发执行一次扫描(同时
产生一个软件触发冲突中断,见冲突中断章节)。当
DSI 触发和连续触发同时发生时,两个触发将被有效地
同时处理(同时产生一个 DSI 触发的冲突中断,见冲突
中断章节)。
当软件触发或连续触发被激活时,处于空闲状态的序列
发生器将在 1 个 SARADC 时钟周期后通知 SARADC 开
始采样。当 DSI 触发被激活时,SARADC 开始采样的时
间将依赖于触发配置(见 DSI 触发配置章节)。
19.3.6.1
DSI 触发配置
DSI 同步:SARSEQ 的 DSI 接口应与 AHB 时钟同步。
如果 DSI 触发信号与 AHB 时钟不同步,则需要采用同步
触发器来实现同步(默认);如果已同步,则同步触发
器可被旁路。对于高频信号,同步是必不可少的,以避
免亚稳定性。DSI_SYNC_TRIGGER 位
(SAR_SAMPLE_CTRL[19])可控制同步触发器是否被
旁路。但是 DSI_SYNC_TRIGGER 会影响 DSI 脉冲触发
信号的触发宽度(TW)和触发间隔(TI)。
DSI 触发电平:用户可以通过 DSI_TRIGGER_LEVEL
位(SAR_SAMPLE_CTRL[18])来选择 DSI 触发为脉冲
触发还是电平触发。如果是电平触发,当 SARADC 完成
一次扫描,如果 DSI 触发信号仍为高电平,则再次开始
一个新的扫描;如果是脉冲触发,DSI 触发信号应是一
个脉冲输入,经过上升沿检测电路进而触发一次扫描。
传送时间:从 dsi_trigger 有效至 SARADC 被通知开始采
样需要一定时间,并因 DSI_SYNC_TRIGGER 位(SAR_
SAMPLE_CTRL[19])和 DSI_TRIGGER_LEVEL 位
(SAR_SAMPLE_CTRL[18])的配置不同而不同,其最
大时间间隔见下表。两次触发脉冲间的时间间隔必须大
于传送时间,否则后一个将无效。
当 SARADC 被禁用(ENABLED(SAR_CTRL[31])=0)
时,DSI 触发将不起作用。
表 19-5. 从 dsi_trigger 有效至 SARADC 被通知开始采样的传送时间
DSI_TRIGGER 的最大传送时间
旁路同步
DSI_SYNC_TRIGGER
(SAR_SAMPLE_CTRL[19])=0
使能同步
DSI_SYNC_TRIGGER
(SAR_SAMPLE_CTRL[19])=1(默认)
脉冲触发
DSI_TRIGGER_LEVEL
(SAR_SAMPLE_CTRL[18])=0(默认)
1 clk_sys*+2 clk_sar**
3 clk_sys+2 clk_sar
电平触发
DSI_TRIGGER_LEVEL
(SAR_SAMPLE_CTRL[18])=1
2 clk_sar
2 clk_sys+2 clk_sar
*clk_sys 指系统时钟周期
**clk_sar 指 SARADC 时钟周期
表 19-6. 对触发信号的要求:
触发规范
要求
触发宽度(TW)
触发宽度需要足够大,才能被检测到。
当 DSI_SYNC_TRIGGER=1 时, TW >= 2 clk_sys cycle.
当 DSI_SYNC_TRIGGER=0 时, TW >= 1 SAR clock cycle.
触发间隔(TI)
两次 DSI 脉冲触发信号的时间间隔必须大于传送时间(见上表),否则后一个将无效
19.3.7 SAR ADC 状态
应用程序可通过读取 BUSY 位(SAR_STATUS[31])
和 CUR_CHAN 字段(SAR_STATUS[4:0])获得 SARA
DC 的当前状态。当 SARADC 对某个通道进行采样或转
换时,BUSY 位被置 1;CUR_CHAN 指示当前的转换
通道。寄存器 SAR_STATUS 的 SW_VREF_NEG 位
(SAR_STATUS[31])表示负端与参考电压 VREF 的连
接状态。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
在扫描进行中,当某通道的采样完成时,寄存器 SAR_
CHAN_WORK_VALID 的相应位会被置 1;当扫描结束
时,寄存器 SAR_CHAN_RESULT_VALID 的相应位才
会被置 1。CUR_AVG_ACCU 字段(SAR_AVG_STAT
[19:0])和 CUR_AVG_CNT 字段(SAR_AVG_STAT[31:
24])分别存放当前求平均的累加器中的值及采样次数
(递减计数)。寄存器 SAR_MUX_SWITCH_STATUS
中存放寄存器 MUX_SWITCH0 相应位的状态。这些寄存
器可方便用户调试 SAR ADC。
195
SAR ADC模块
19.3.8 低功耗模式
SAR ADC 模块的电流消耗主要包括两部分:SARADC 和 SARREF。
用户可通过多种方式来降低功耗,比如关闭 SARADC 的电源和切换时钟,减少每秒的转换次数;最简单的方式是减少
触发频率,即减少每秒钟内的转换次数。
PSoC 4 也支持通过 ICONT_LV 字段(SAR_ CTRL[25:24])来设置 SARADC 的低功耗模式,见下表。
表 19-7. SARADC 低功耗模式设置
ICONT_LV
(SAR_CTRL[25:24])
SARADC 的相对功耗
最小采样时间
[时钟周期 cycles]
最大工作频率[MHz]
最大采样速率
(@ 12 位)[ksps]
0
100%
18
4
1000
1
50%
9
3
529
2
133%
18
4
1000
3
25%
4.5
2
281
此外,应用程序也可设置 SARREF 的功耗为不同的低功耗模式。当使用内部参考电压,并且没有旁路电容时,需要降
低 SARADC 时钟频率;如果使用旁路电容或使用外部参考电压,则 SARADC 最大频率仍为 18MHz。
表 19-8. SARREF 的低功耗模式设置
PWR_CTRL_VREF
(SAR_CTRL[15:14])
SARREF 的相对
功耗
无旁路电容时 SARADC 的
最大工作频率
最大采样速率
(@ 12 位)[ksps]
最小采样时间
0:NORMAL_PWR
100%
3
1
230
1:HALF_PWR
50%
1.5
1
115
2:THIRD_PWR
33%
1
1
76
3:QUARTER_PWR
25%
18*
4
1000
*在使用最低功耗模式(25%)时,必须加旁路电容。
最后,也可通过使用低分辨率来降低 SARADC 的功耗。比如使用 8 位分辨率,其转换时钟与 12 位分辨率相比减少了
4 个 SARADC 的时钟周期,其采样时间也最小。
19.3.9 系统操作
本章节主要介绍如何使用 SAR ADC。关于 SARADC、
SARMUX、SARREF、SARSEQ、中断和触发的理论,
请参考上面相关章节。
用户通过 ENABLED 位(SAR_CTRL [31])使能 SAR
ADC 模块后,可通过如下步骤来配置 SAR ADC 模块,
并通过 SARSEQ 控制 SARADC 完成数据的采样和转换。
1. 配置 SARADC 控制模式:寄存器模式或 DSI 模式
2. 配置 SARMUX(管脚/信号选择)
3. 配置 SARSEQ
196
4. 配置通道(比如管脚地址等)
5. 使能通道
6. 设置触发方式
7. 配置中断屏蔽
8. 开启触发源
9. 每个通道的转换结束中断发生后,取回数据
10. 插入通道转换(可选)
在寄存器模式下,用户可通过配置寄存器来使用 SAR
ADC 模块;在 DSI 模式下,来自 UDB 的 DSI 信号来操
作 SAR ADC 模块。两者间的不同见下表。使用寄存器模
式还是 DSI 模式,是由 DSI_MODE 位(SAR_CTRL[29])
决定的。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
表 19-9. 寄存器模式和 DSI 模式对比
配置项
DSI 模式
寄存器模式
DSI_MODE
(SAR_CTRL[29])
0
1
SARMUX 控制
序列(Sequencer)控制寄存器:
SAR_CHANx_CONFIG
SAR_MUX_SWITCH0
SAR_MUX_HW_SWITCH_CTRL
SAR_CTRL
软件控制寄存器:
SAR_MUX_SWITCH0
SAR_MUX_HW_SWITCH_CTRL
SAR_CTRL
DSI 控制信号:
dsi_out, dsi_oe, dsi_swctrl, dsi_sw_negvref
软件控制寄存器:
SAR_MUX_SWITCH0
SAR_MUX_HW_SWITCH_CTRL
SAR_CTRL
全局配置
全局配置寄存器:
SAR_CTRL, SAR_SAMPLE_CTRL,
SAR_SAMPLE01, SAR_SAMPLE23,
SAR_RANGE_THES,
SAR_RANGE_COND
全局配置寄存器:
SAR_CTRL, SAR_SAMPLE_CTRL,
SAR_SAMPLE01, SAR_SAMPLE23,
SAR_RANGE_THES, SAR_RANGE_COND
通道配置
通道配置寄存器:
SAR_CHAN_CONFIG,
SAR_CHAN_EN,
SAR_INJ_CHAN_CONFIG
DSI 信号:
dsi_cfg_st_sel
dsi_cfg_average
dsi_cfg_resolution
dsi_cfg_differential
(SAR_CHAN_CONFIG, SAR_CHAN_EN 和
SAR_INJ_CHAN_CONFIG 不可用)
触发方式
软件 触发
DSI 触发
连续触发
中断
所有中断均可被输出
DSI 输出
支持
结果数据
支持 8 个 通道结果寄存器
1 个插入通道结果寄存器
仅支持通道 0 的结果寄存器
插入通道
支持
不支持
求平均
支持对单个管脚/信号输入求平均
可支持对不同管脚/信号输入求平均
仅可将中断 EOS_INTR, RANGE_INTR 和
SATURATE_INTR 通过 DSI 输出
19.3.10 寄存器模式
在寄存器模式下,用户可以通过配置寄存器来控制 SAR ADC。关于寄存器位的定义,请参考寄存器 TRM。
19.3.10.1 SARMUX 模拟路由配置
在寄存器模式中,用户可通过两种方式来控制 SARMUX 的模拟路由:序列控制和软件控制。
序列控制:用户在使用序列控制方法时,需将寄存器 MUX_SWITCH_HW_CTRL 和 MUX_SWITCH0 中的相应位置 1,
同时必须设置 SWITCH_DISABLE(SAR_CTRL[30])= 0 来选择序列控制。
用户可通过配置 PORT_ADDR 字段(SAR_CHANx_CONFIG[6:4])和 PIN_ADDR 字段(SAR_CHANx_CONFIG[2:0])
来配置 SARMUX 的选择,进而配置每个通道需要转换的信号,见下表。其他未使用的端口管脚是为 PSoC 4 系列其他
产品保留的。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
197
SAR ADC模块
表 19-10. PORT_ADDR/PIN_ADDR 配置
PORT_ADDR
PIN_ADDR
SARADC 输入信号源
0
0..7
连接到 SARMUX 的 8 个专用管脚(P2.0-P2.7)
1
X
sarbus0*(连接到 SARADC 的正端)
1
X
sarbus1*(连接到 SARADC 的负端,仅在差分模式下有效)
7
0
温度传感器
7
2
AMUXBUS_A
7
3
AMUXBUS_B
*sarbus0 和 sarbus1 分别连接到 CTBm 模块中的运算放大器(opamp)0 和运算放大器 1 的输出,详情见 CTBm 章节。
NEG_SEL(SAR_CTRL [11:9])控制 SARADC 负端输
入信号在单端输入模式下的选择;在差分输入模式下,
其不起作用。大多数情况下忽略 NEG_SEL 字段的配置,
当选择单端模式和软件控制方法时,如果需要将负端连
接到参考电压 Vref,请设置 NEG_SEL(SAR_CTRL
[11:9])= 7。
NEG_SEL(SAR_CTRL [11:9])控制 SARADC 负端输
入信号在单端输入模式下的选择;在差分输入模式下,
其不起作用。大多数情况下忽略 NEG_SEL 字段的配置,
当选择单端模式和软件控制方法时,如果需要将负端连
接到参考电压 Vref,请设置 NEG_SEL(SAR_CTRL
[11:9])= 7。
在差分模式下,SARADC 的负端连接依赖于正端连接,
由 PORT_ADDR 和 PIN_ADDR 的值决定。当
DIFFERENTIAL_EN(SAR_CHANx_CONFIG[8])= 1
时,差分转换模式被使能,通道将对奇/偶管脚对进行差
分转换,此时 PIN_ADDR[0]值可被忽略。在序列控制下,
P2.0/P2.1, P2.2/P2.3, P2.4/P2.5 和 P2.6/P2.7 分别是有
效的差分对。当由软件或 DSI 控制,正负端的选择会更
加灵活。
不同的 SARADC 负端连接选择,会影响到电压范围、信
噪比(SNR)、有效分辨率。详情请见 19.3.1.4 负端输
入选择章节。
在单端模式下,NEG_SEL(SAR_CTRL [11:9])控制
SARADC 负端输入信号在单端输入模式下的选择;在差
分输入模式下,其不起作用。不同的 SARADC 负端连接
选择,会影响到电压范围、信噪比(SNR)、有效分辨
率。详情请见 19.3.1.4 负端输入选择章节。负端输入包
括:VSSA, Vref, or P2.1, P2.3, P2.5 和 P2.7。需要注意
的是,如果需要连接负端至 Vref,还需要设置
SAR_HW_CTRL_NEGVREF(SAR_CTRL[13])= 1。
因为寄存器 MUX_SWITCH_HW_CTRL 没有硬件控制位。
19.3.10.2 SARSEQ 全局配置
全局配置是指,其配置参数在寄存器模式和 DSI 模式下
均有效。
全局配置寄存器包括:SAR_CTRL、SAR_SAMPLE_
CTRL、SAR_SAMPLE01、SAR_SAMPLE23、SAR_
RANGE_THES 和 SAR_RANGE_COND。
在进行全局配置时,应遵循如下规则:全局配置仅可在
两个扫描之间进行,配置的修改不应影响正在进行的扫
描。否则,将导致正在进行的扫描转换结果不确定。
软件控制:默认情况下,对 SARMUX 的操作使用软件控
制方法。用户可以通过设置 SAR_MUX_SWITCH0 [29:0]
中的相应位来控制 SARADC 的正负端输入信号。同时设
置硬件开关控制寄存器的相应位为 0,即
SAR_MUX_SWITCH_HW_CTR[n] =0;否则,
SARMUX 模拟路由仍由序列控制或 DSI 控制。
SWITCH_DISABLE 位(SAR_CTRL[30])用来禁用
SARSEQ 中的 Sequencer, 从而禁用 SARMUX 中的路由
开关;但是在软件控制方法中,SWITCH_DISABLE
(SAR_CTRL[30])位对路由开关不起作用,但建议将
其设置为 1
198
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
表 19-11. 全局配置寄存器
配置
配置寄存器
参考信息
参考电压选择
SAR_CTRL[6:4]
19.3.3.1 参考电压选项
转换结果的符号配置
SAR_SAMPLE_CTRL [3:2]
19.3.1.3 转换结果数据格式
数据左右对齐
SAR_SAMPLE_CTRL [1]
19.3.1.3 转换结果数据格式
单端模式下的负端输入选择
SAR_CTRL[11:9]
19.3.1.4 负端输入选择
分辨率
SAR_SAMPLE_CTRL[0]
19.3.1.5 分辨率
采样时间
SAR_SAMPLE_TIME01 [25:0]
SAR_SAMPLE_TIME32 [25:0]
19.3.1.6 采样时间
求平均次数
SAR_SAMPLE_CTRL[7:4]
19.3.4.1 求平均
阈值检测
SAR_RANGE_THRES [31:0]
SAR_RANGE_COND [31:30]
19.3.4.2 阈值检测
否则转换结果将未知。如果使能通道的配置在扫描周期
内被修改,则将影响采样速率。禁止通道配置的修改可
在任意时刻进行,不影响正在进行的扫描;如果在扫描
周期间禁止通道被使能,其配置仍可在下一个扫描周期
开始前被修改,并在下一个扫描周期内有效。在一个扫
描中,改变使能通道,将影响其采样速率。
19.3.10.3 通道配置
通道配置包括:
 单端 /差分模式选择
 全局配置选择:采样时间、分辨率、求平均使能
 DSI 输出使能
通道配置应遵循如下规则:已加入扫描的使能通道配置
的修改仅可在两个扫描周期间进行(与全局配置相同),
有关通道配置的寄存器见下表
表 19-12. 通道配置寄存器
配置
寄存器
参考信息
单端模式/差分模式
SAR_CHANx_CONFIG [8]
19.3.1.1 单端模式和差分模式
采样时间选择
SAR_CHANx_CONFIG [13:12]
19.3.1.6 采样时间
分辨率选择
SAR_CHANx_CONFIG [9]
19.3.1.5 分辨率
求平均使能
SAR_CHANx_CONFIG [10]
19.3.4.1 求平均
DSI 输出使能
SAR_CHANx_CONFIG [30]
19.3.11.7 DSI 输出使能
SAR ADC 模块可通过配置 RESOLUTION 位(SAR_CHANx_CONFIG [9])来选择使用主分辨率 12 位(默认)还是
次分辨率 10 位/8 位。次分辨率又由 SUB_RESOLUTION 位(SAR_SAMPLE_CTRL[0])控制。详情见下表
表 19-13. 分辨率配置
RESOLUTION(SAR_CHANx_CONFIG [9])
(寄存器模式)
SUB_RESOLUTION
(SAR_SAMPLE_CTRL[0])
求平均
通道分辨率
OFF
0
1
8位
OFF
1
1
10 位
OFF
0
0
12 位
OFF
1
0
12 位
ON
X
X
19.3.10.4 通道使能
用户可通过配置寄存器 SAR_CHAN_EN 来使能每个通
道。所有使能的通道将在下一个触发条件发生时被扫描。
当扫描正在进行时,通道的使能状态可被更新,并在下
一个扫描周期扫描有效,也就是说对通道使能的修改,
不影响正在进行的扫描。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
12 位
但是当扫描正在进行时,已经在扫描周期内通道的其他
配置不应被修改,否则转换结果将不确定。
19.3.10.5 中断屏蔽
SAR ADC 支持 6 种中断,每个中断均对应一个中断屏
蔽位:
199
SAR ADC模块






扫描转换完成中断
扫描结果溢出中断
冲突检测中断
插入通道转换结束中断
通道阈值检测中断
通道饱和检测中断
在中断请求寄存器(SAR_INTR,SAR_SATURATE_INT
R 和 SAR_RANGE_INTR)、软件设置中断寄存器
(SAR_INTR_SET,SAR_SATURATE_INTR_SET,
SAR_RANGE_INTR_SET)、中断屏蔽寄存器(SAR_
INTR_MASK,SAR_SATURATE_INTR_MASK,SAR_R
ANGE_INTR_MASK)和中断屏蔽结果寄存器(SAR
_INTR_MASKED,SAR_SATURATE_INTR_MASKED,
SAR_RANGE_INTR_MASKED)中,每个中断均有对
应的位。此外,寄存器 SAR_INTR_CAUSE 中包含了 S
ARADC 当前挂起的中断。中断服务程序可以通过读此寄
存器来辨别产生中断的来源。
关于中断的详细信息,请参考 19.3.5 中断章节。
19.3.10.6 触发
在扫描过程中,当某通道的工作寄存器中的数据有效时
(此通道的采样已完成),寄存器
CHAN_WORK_VALID 中的相应位会被置 1。扫描完成
后,寄存器 CHAN_RESULT_VALD 中的相应位会被置 1;
同时,寄存器 CHAN_WORK_VALID 中相应位会被清除。
每个通道的寄存器 SAR_CHAN_WORK 的位 [31]与寄存
器 SAR_CHAN_WORK_VALID 的相应位值相同;寄存
器 SAR_CHAN_RESULT 的位[29]、位 [30]、位[31]位分
别对应寄存器 SAR_SATURATE_INTR、
SAR_RANGE_INTR 和 SAR_CHAN_RESULT_VALID
的相应位。需要注意的是此处仅与未屏蔽的中断相同。
这样寄存器不但包含转换数据,还包括数据有效状态。
当 DSI 输出被使能(DSI_OUT_EN(SAR_CHANx_
CONFIG[31])= 1)时,处理后的结果数据会和通道序
号一起通过 DSI 总线(sar_dsi_data, sar_dsi_chan_id)
被发送到 UDB 做进一步的处理,紧接着也会被存放到结
果寄存器;
这样 UDB 可对不同通道的数据做不同的处理。详情请见
19.3.11.7 DSI 输出使能章节。
SARADC 支持 3 种触发方式,来启动模数转换:
19.3.10.8 插入通道转换(可选)
 软件触发:SAR_START_CTRL [0]
 DSI 触发:dsi_trigger
 连续触发:SAR_SAMPLE_CTRL [16]
用户可以通过对 INJ_START_EN(SAR_INJ_CHAN_
CONFIG [31])位置 1 来触发对插入通道的采样、转换。
如果有一个扫描正在进行,推荐通过设置 INJ_TAILGATING
(SAR_INJ_CHAN_CONFIG [30])使能追尾功能,则
INJ_START_EN 仅在当前扫描结束后才使能插入通道来
进行采样转换,而不产生任何冲突中断。如果当前没有
扫描进行(SARADC 处于空闲状态),并使能了追尾功
能,则 INJ_START_EN 将等待至下一个扫描结束后才使
能插入通道;在这种情况下,建议禁止追尾功能。
关于触发的详细信息,请参考 19.3.6 触发章节。
19.3.10.7 数据读取
每次扫描结束后,软件需及时从结果寄存器中读取转换
结果;否则,转换结果可能被下次扫描的配置所改变。
8 个通道均使用双缓冲的 16 位寄存器来保持数据(插入
通道不支持双缓冲);双缓冲是通过工作寄存器 和结果
寄存器来实现的。每个通道完成采样后,数据被存放在
工作寄存器中;当完成对所有使能通道的扫描后,工作
寄存器中的数据会被拷贝到结果寄存器中。
关于插入通道的详细信息,请参考 19.3.4.4 插入通道
章节。
19.3.11 DSI 模式
在 DSI 模式下,对 SARADC 的配置可通过来自 UDB 的
DSI 信号完成(全局配置除外,例如,中断屏蔽、阈值
检测设置和触发配置等)。DSI 模式和寄存器模式的主
要不同是:DSI 模式允许硬件动态地控制 SARADC 的配
置。下图描述了 SAR ADC 模块与 UDB 间的输入、输出
信号。
200
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
sar_dsi_sample_done
sar_dsi_chan_id[]
sar_dsi_eos_intr
sar_dsi_data[]
SARADC
Sequencer logic &
state machine
dsi_cfg **
dsi_trigger, dsi_data_hilo_sel
Dsi_out[], dsi_oe[],
dsi_swctrl[], dsi_sw_negvef,
图 19-13. SAR ADC 模块与 UDB 间的信号
UDB
用户可以通过设置 DSI_MODE 位(SAR_CTRL[29]),来选择使用 DSI 模式还是寄存器模式。在 DSI 控制模式下,
SARSEQ 将忽略通道的所有寄存器配置,而由来自 DSI 的信号控制。来自 DSI 的信号可以配置 SAR ADC 模块,
见下表。
表 19-14. DSI 信号
信号
信号宽度
描述
sar_dsi_sample_done
1
此脉冲信号表示 SARADC 已完成对当前通道采样;SARMUX 可以切换到下一个需要采样
的信号。
sar_dsi_chan_id_valid
1
表示下面的通道序号信号有效
sar_dsi_chan_id
4
寄存器控制模式:当前正在转换的通道序号
DSI 控制模式:[0]=饱和检测中断,[1]=阈值检测中断(与输出数据同时有效)
sar_dsi_data_valid
1
表示下面的数据值信号有效
sar_dsi_data
12
对某个通道转换、求平均后的结果。内部求平均的结果是 16 位宽度。
当 dsi_data_hilo_sel=0 时,sar_dsi_data[11:0]= sar_data[11:0]。
当 dsi_data_hilo_sel=1 时,sar_dsi_data[7:0]= sar_data[15:8],sar_dsi_data[11:8]=<未
知>。
sar_dsi_eos_intr
1
扫描结束(EOS)中断信号,表示 SARSEQ 刚完成对所有使能通道的扫描
8
dsi_out[0]=1,连接 P2.0 至 SARADC
dsi_out[1]=1,连接 P2.1 至 SARADC
…
dsi_out[7]=1,连接 P2.7 至 SARADC
注意:寄存器 MUX_SWITCH0 控制管脚连接到 SARADC 的正端还是负端
dsi_oe
4
dsi_oe[0]=1,连接 AMUXBUS_A 至 SARADC
dsi_oe[1]=1,连接 AMUXBUS_B 至 SARADC
dsi_oe[2]=1,连接 opamp0 输出至 SARADC
dsi_oe[3]=1,连接 opamp1 输出至 SARADC
注意:寄存器 MUX_SWITCH0 控制这些信号连接到 SARADC 的正端还是负端
dsi_swctrl[0]
1
SARMUX 模拟开关控制信号,控制是否连接 vssa_kelvin 至 SARADC 的负端
dsi_swctrl[1]
1
SARMUX 模拟开关控制信号,控制是否连接温度传感器输出信号至 SARADC 的正端
dsi_sw_negvref
1
SARADC 内部切换控制信号,控制是否连接参考电压 VREF 至负端。
dsi_cfg_st_sel
2
DSI 控制模式下的配置控制信号:选择采样时间
dsi_cfg_average
1
DSI 控制模式下的配置控制信号:使能求平均
dsi_cfg_resolution
1
DSI 控制模式下的配置控制信号:0—主分辨率 12 位;1—次分辨率 8 位/10 位
dsi_cfg_differential
1
DSI 控制模式下的配置控制信号:0—单端模式;1—差分模式
dsi_trigger
1
启动 SARSEQ 对所有使能通道扫描的触发信号
dsi_data_hilo_sel
1
选择 sar_dsi_data[7:0]上是高 8 位还是低 8 位信号。此信号是异步信号。
dsi_out
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
201
SAR ADC模块
19.3.11.1 SARMUX 模拟路由配置
在 DSI 模式下,可以通过 DSI 信号或软件来控制模拟路由。软件控制效果与寄存器模式下相同。关于软件控制方式的
详细信息,请参考 19.3.10.1 SARMUX 模拟路由配置。
DSI 模式:在 DSI 模式下,使用来自 UDB 的 DSI 信号被用来控制 SARMUX 的开关切换。
但需要注意的是,在 DSI 控制模式下,SARSEQ 中的序列控制器对开关切换不起作用。如图 19-3 所示,除用于芯片设
计和测试的开关外,DSI 可以控制所有开关。因此,在 DSI 模式下,SARADC 的正负端可以连接到任何开关。
下表罗列了 DSI 控制信号;同时还需设置 SAR_MUX_SWITCH_HW_CTR[n] = 1 & SAR_MUX_SWITCH0[n] = 1;当
SARADC 的负端连接到 Vref 时,还需要设置 SAR_CTRL [11:9] = 7 & SAR_CTRL [13] =1。
在 DSI 控制控制模式下,DSI 信号控制方式可通过信号 dsi_swctrl[0] 和 dsi_sw_negvref 控制 SARADC 的负端输入
(在单端模式下);如需设置 NEG_SEL(SAR_CTRL[11:9]),则仅 NEG_SEL(SAR_CTRL[11:9])=7 有效。
表 19-15. DSI 信号控制
信号
信号宽度
描述
8
dsi_out[0]=1,连接 P2.0 至 SARADC
dsi_out[1]=1,连接 P2.1 至 SARADC
…
dsi_out[7]=1,连接 P2.7 至 SARADC
注意:寄存器 MUX_SWITCH0 控制管脚连接到 SARADC 的正端还是负端
dsi_oe
4
dsi_oe[0]=1,连接 AMUXBUSA 至 SARADC
dsi_oe[1]=1,连接 AMUXBUSB 至 SARADC
dsi_oe[2]=1,连接 sarbus0 输出至 SARADC
dsi_oe[3]=1,连接 sarbus1 输出至 SARADC
注意:寄存器 MUX_SWITCH0 控制这些信号连接到 SARADC 的正端还是负端
dsi_swctrl[0]
1
SARMUX 模拟开关控制信号,控制是否连接 vssa_kelvin 至 SARADC 的负端
dsi_swctrl[1]
1
SARMUX 模拟开关控制信号,控制是否连接温度传感器输出信号至 SARADC 的正端。
dsi_sw_negvref
1
SAR ADC 内部切换控制信号,控制是否连接参考电压 VREF 至负端。
dsi_out
19.3.11.2 SARSEQ 全局配置
SARSEQ 的全局配置适用于寄存器模式和 DSI 模式,请参考 19.3.10.2 SARSEQ 全局配置。
19.3.11.3 通道配置
在 DSI 控制模式下,只有通道 0 是可用的。通道 0 的配置是通过 DSI 信号来完成的,见下表。寄存器
SAR_CHAN_EN、SAR_CHAN_CONFIG 和 SAR_INJ_CHAN_CONFIG 中有关通道的配置在此模式下不起作用。
用户可通过配置 DSI_SYNC_CONFIG(SAR_CTRL[28])位来选择是否需要 dsi_cfg_*信号来同步 SAR ADC 时钟域
(主要指 clk_hf)。当 SARADC 运行于低频时,可以不用考虑同步 SARADC 时钟。
表 19-16. 配置通道 0 的 DSI 信号
信号
信号宽度
配置项
描述
dsi_cfg_st_sel
2
采样时间
DSI 控制模式下的配置控制信号:选择采样时间
dsi_cfg_average
1
使能求平均
DSI 控制模式下的配置控制信号:使能求平均
dsi_cfg_resolution
1
分辨率
DSI 控制模式下的配置控制信号:分辨率选择
0:主分辨率 12 位
1:次分辨率 8 位/10 位
dsi_cfg_differential
1
差分/单端模式
DSI 控制模式下的配置控制信号:
0:单端模式
1:差分模式
202
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
19.3.11.4 中断
中断屏蔽与在寄存器控制模式下相同。但需要注意的是,仅有中断 SATURATE_INTR, RANGE_INTR 和 EOS_INTR
会被通过 DSI 信号发出。如需 SARADC 中断的详细介绍,请参考 19.3.5 中断章节。




饱和检测中断 SATURATE_INTR 会通过信号 dsi_chan_id[0]被发出,并将寄存器 SATURATE_INTR 的位[0]置 1。
阈值检测中断 RANGE_INTR 会通过信号 dsi_chan_id[1]被发出,并将寄存器 RANGE _INTR 的位[0]置 1。
忽略通道使能,因为每次触发,仅对通道 0 进行转换。
扫描结束中断 EOS_INTR 总是通过 DSI 的信号 sar_dsi_eos_intr(dsi_data_valid 的拷贝)被发出。
通过 DSI 信号发出的中断见下表。
表 19-17. 通过 DSI 信号发出的中断
信号
信号宽度
描述
sar_dsi_chan_id
4
寄存器控制模式:当前正被转换的通道序号
DSI 控制模式:
sar_dsi_chan_id [0] = 饱和检测中断,
sar_dsi_chan_id [1]= 阈值检测中断(两个中断信号与有效数据会被一起发
出)
sar_dsi_eos_intr
1
扫描结束中断,表示 SARSEQ 刚完成对所有使能通道的扫描
19.3.11.5 触发
在 DSI 控制模式下,通常使用 DSI 触发模式,但也支持
软件触发和连续触发。触发配置与寄存器控制模式下相
同,详情请见 19.3.6 触发章节。
如果使用 DSI 触发方式,每个通道的配置信号
(dsi_cfg_*)和 SARMUX 的配置信号应该在信号
dsi_trigger 被发出前达到稳定状态,并一直保持到信号
sar_dsi_sample_done 的上升沿出现。
19.3.11.6 数据读取
SARADC 的转换结果和通道编号会通过 sar_dsi_data 被
发送出去,等效于寄存器模式下 dsi_out_en 为高的情况。
详情请参考 19.3.11.7 DSI 输出使能章节。每个通道的
转换结果均会被写入寄存器 SAR_CHAN_WORK0 和
SAR_CHAN_RESULT0。
sar_dsi_data[7:0]= sar_data[15:8];同时需要对获得的
数据进行处理才可以组成 16 位的数据。
一旦 SARADC 对某通道完成采样,通道序号就会通过信
号 sar_dsi_chan_id 被发送出去(也就是说,在转换开始
时即被发送)。这样做有利于某些特殊的应用,例如,
通道序号可以触发 UDB 来驱动一些 GPIO 管脚,这些管
脚可以依次对一些外部设备进行上电(或断电)操作;
而这些外设又依次驱动模拟输入管脚并被同一个扫描周
期内的其他通道采样、转换(此处的采样时间应较长)。
注意:数据将在转换结束一个时钟周期后被发送到 DSI
总线上。通道序号、数据及相应的有效信号将在 DSI 总
线上保持两个系统时钟周期。
DSI 输出信号见下表。
19.3.11.7 DSI 输出使能
当 DSI_OUT_EN(SAR_CHANx_CONFIG[31])= 1 时,
处理后的结果数据会和通道序号一起通过 DSI 总线
(sar_dsi_data, sar_dsi_chan_id)被发送到 UDB 做进
一步的处理,紧接着也会被存放到结果寄存器;这样
UDB 可对不同通道的数据做不同的处理。
发送到 DSI 总线上的数据与存放在结果寄存器中的数据
格式完全相同。默认情况下,仅有低 12 位数据被发送,
即 sar_dsi_data[11:0]= sar_data[11:0],因此不建议用户
使用数据左对齐。如需要结果寄存器中的 16 位数据,首
先设置 dsi_data_hilo_sel=0,获得低 12 位数据,即
sar_dsi_data[11:0]= sar_data[11:0];然后设置
dsi_data_hilo_sel=1,获得高 8 位数据,即
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
203
SAR ADC模块
表 19-18. DSI 输出信号
信号
信号宽度
描述
sar_dsi_sample_done
1
此脉冲信号表示 SARADC 采样结束。SARMUX 可以切换到下一个需要转换的信号。
sar_dsi_chan_id_valid
1
通道序号是有效信号。
sar_dsi_chan_id
4
寄存器控制模式:
指示当前正被转换的通道序号。
DSI 控制模式:
[0]:饱和检测中断
[1]:阈值检测中断
(两个中断信号与数据输出同时有效)
sar_dsi_data_valid
1
数据值信号是有效信号
sar_dsi_data
12
单个通道的转换(和求平均)结果。内部求平均的结果是 16 位宽度。
当 dsi_data_hilo_sel=0,sar_dsi_data[11:0]= sar_data[11:0]。
当 dsi_data_hilo_sel=1,sar_dsi_data[7:0]= sar_data[15:8] & sar_dsi_data[11:8]=<
未知>。
sar_dsi_eos_intr
1
扫描结束(EOS)中断信号表示 SARSEQ 刚对所有使能通道完成扫描。
dsi_data_hilo_sel
1
表示输出到 sar_dsi_data[7:0]的数据是高 8 位还是低 12 位信号。此信号是异步的(其
对 sar_dsi_data[7:0]的控制不需要时钟参与)。
19.3.12 模拟路由配置示例
下表描述了在序列控制、软件控制和 DSI 控制下配置管脚/信号的示例。
表 19-19. 管脚/信号配置示例
序列控制
P2.0
VPLUS
SARADC
VSSA
P2.0
VMINUS
VPLUS
SARADC
Vref
P2.0
VMINUS
VPLUS
SARADC
P2.1
204
VMINUS
DIFFERENTIAL_EN = 0
(CHANx_CONFIG[8])
SWITCH_DISABLE = 0(CTRL[30])
PORT_ADDR = 0
(CHANx_CONFIG[6:4])
PIN_ADDR = 0
(CHANx_CONFIG[2:0])
NEG_SEL = 0(CTRL [11:9])
MUX_SWITCH0[0] = 1
MUX_SWITCH0[16] = 1
MUX_SWITCH_HW_CTRL[0] = 1
MUX_SWITCH_HW_CTRL[16]= 1
DIFFERENTIAL_EN = 0
(CHANx_CONFIG[8])
SWITCH_DISABLE = 0(CTRL[30])
PORT_ADDR = 0
(CHANx_CONFIG[6:4])
PIN_ADDR = 0
(CHANx_CONFIG[2:0])
NEG_SEL = 7(CTRL [11:9])
MUX_SWITCH0[0] = 1
MUX_SWITCH_HW_CTRL[0]=1
HW_CTRL_NEGVREF =1
(CTRL[13])
DIFFERENTIAL_EN = 1
(CHANx_CONFIG[8])
SWITCH_DISABLE = 0(CTRL[30])
PORT_ADDR = 0
(CHANx_CONFIG[6:4])
PIN_ADDR = 0 or PIN_ADDR = 1
软件控制
DSI 控制
DIFFERENTIAL_EN = 0
(CHANx_CONFIG[8])
SWITCH_DISABLE = 1
(CTRL[30])
MUX_SWITCH0[0] = 1
MUX_SWITCH0[16] = 1
MUX_SWITCH_HW_CTRL[0] = 0
MUX_SWITCH_HW_CTRL[16] = 0
DSI_MODE = 1(CTRL[29])
dsi_cfg_differential = 0
dsi_out [0] =1
dsi_swctrl[0]=1
MUX_SWITCH0[0] = 1
MUX_SWITCH_HW_CTRL[0] = 1
MUX_SWITCH_HW_CTRL[16]=1
MUX_SWITCH0 [16] = 1
DIFFERENTIAL_EN = 0
(CHANx_CONFIG[8])
SWITCH_DISABLE = 1
(CTRL[30])
MUX_SWITCH0[0] = 1
MUX_SWITCH_HW_CTRL[0] =0
NEG_SEL = 7(CTRL [11:9])
HW_CTRL_NEGVREF =0
(CTRL[13])
DSI_MODE = 1(CTRL[29])
dsi_cfg_differential = 0
MUX_SWITCH0[0] = 1
MUX_SWITCH_HW_CTRL[0] = 1
NEG_SEL = 7(CTRL [11:9])
HW_CTRL_NEGVREF =1
(CTRL[13])
dsi_out [0] =1
dsi_sw_negvref =1
DIFFERENTIAL_EN = 1
(CHANx_CONFIG[8])
SWITCH_DISABLE = 1
(CTRL[30])
MUX_SWITCH0[0] = 1
MUX_SWITCH0[9] = 1
DSI_MODE = 1(CTRL[29])
dsi_cfg_differential = 1
dsi_out [0] =1
dsi_out [1] =1
MUX_SWITCH0[0] = 1
MUX_SWITCH_HW_CTRL[0] = 1
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
序列控制
sarbus0 VPLUS
SARADC
VSSA
VMINUS
sarbus0 VPLUS
SARADC
sarbus1
VMINUS
AMUXBUSA VPLUS
SARADC
VSSA
VMINUS
AMUXBUSA VPLUS
SARADC
AMUXBUSB
VMINUS
AMUXBUSB VPLUS
SARADC
AMUXBUSA
(CHANx_CONFIG[2:0])
MUX_SWITCH0[0] = 1
MUX_SWITCH0[9] = 1
MUX_SWITCH_HW_CTRL[0] = 1
MUX_SWITCH_HW_CTRL[1] = 1
DIFFERENTIAL_EN = 0
(CHANx_CONFIG[8])
SWITCH_DISABLE = 0(CTRL[30])
PORT_ADDR = 1
(CHANx_CONFIG[6:4])
NEG_SEL = 0(CTRL [11:9])
MUX_SWITCH0[22] = 1
MUX_SWITCH0[16] = 1
MUX_SWITCH_HW_CTRL[22] =1
MUX_SWITCH_HW_CTRL[16] =1
注意:序列控制不支持 sarbus1 与
SARADC 正端的连接
DIFFERENTIAL_EN = 1
(CHANx_CONFIG[8])
SWITCH_DISABLE = 0(CTRL[30])
PORT_ADDR = 1
(CHANx_CONFIG[6:4])
MUX_SWITCH0[22] = 1
MUX_SWITCH0[25] = 1
MUX_SWITCH_HW_CTRL[22]=1
MUX_SWITCH_HW_CTRL[23]=1
DIFFERENTIAL_EN = 0
(CHANx_CONFIG[8])
SWITCH_DISABLE = 0(CTRL[30])
PORT_ADDR = 7
(CHANx_CONFIG[6:4])
PIN_ADDR = 2
(CHANx_CONFIG[2:0])
NEG_SEL = 0(CTRL [11:9])
MUX_SWITCH0[18] = 1
MUX_SWITCH0[16] = 1
MUX_SWITCH_HW_CTRL[18]= 1
MUX_SWITCH_HW_CTRL[16]= 1
DIFFERENTIAL_EN = 1
(CHANx_CONFIG[8])
SWITCH_DISABLE = 0(CTRL[30])
PORT_ADDR = 7
(CHANx_CONFIG[6:4])
PIN_ADDR = 2
(CHANx_CONFIG[2:0])
MUX_SWITCH0[18] = 1
MUX_SWITCH0[21] = 1
MUX_SWITCH_HW_CTRL[18]= 1
MUX_SWITCH_HW_CTRL[19]= 1
不支持,在序列控制方式下,差分对是
固定的
VMINUS
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
软件控制
MUX_SWITCH_HW_CTRL[0] = 0
MUX_SWITCH_HW_CTRL[1] = 0
DSI 控制
MUX_SWITCH0 [9] = 1
MUX_SWITCH_HW_CTRL[1]=1
DIFFERENTIAL_EN = 0
(CHANx_CONFIG[8])
SWITCH_DISABLE = 1
(CTRL[30])
MUX_SWITCH0[22] = 1
MUX_SWITCH0[16] = 1
MUX_SWITCH_HW_CTRL[22] = 0
MUX_SWITCH_HW_CTRL[16] = 0
DSI_MODE = 1(CTRL[29])
dsi_cfg_differential = 0
dsi_oe [2] =1
dsi_swctrl[0]=1
MUX_SWITCH0 [16] = 1
MUX_SWITCH0[22] = 1
MUX_SWITCH_HW_CTRL[16]=1
MUX_SWITCH_HW_CTRL[22] =1
DIFFERENTIAL_EN = 1
(CHANx_CONFIG[8])
SWITCH_DISABLE = 1
(CTRL[30])
MUX_SWITCH0[22] = 1
MUX_SWITCH0[25] = 1
MUX_SWITCH_HW_CTRL[22] = 0
MUX_SWITCH_HW_CTRL[23] = 0
DSI_MODE = 1(CTRL[29])
dsi_cfg_differential = 1
dsi_oe [2] = 1
dsi_oe [3] = 1
MUX_SWITCH0[22] = 1
MUX_SWITCH0[25] = 1
MUX_SWITCH_HW_CTRL[22]=1
MUX_SWITCH_HW_CTRL[23]=1
DIFFERENTIAL_EN = 0
(CHANx_CONFIG[8])
SWITCH_DISABLE = 1
(CTRL[30])
MUX_SWITCH0[18] = 1
MUX_SWITCH0[16] = 1
MUX_SWITCH_HW_CTRL[18]= 0
MUX_SWITCH_HW_CTRL[16]= 0
DSI_MODE = 1(CTRL[29])
dsi_cfg_differential = 0
dsi_oe [0] = 1
dsi_swctrl[0]=1
MUX_SWITCH0[18] = 1
MUX_SWITCH_HW_CTRL[18]= 1
MUX_SWITCH_HW_CTRL[16]=1
MUX_SWITCH0 [16] = 1
DIFFERENTIAL_EN = 1
(CHANx_CONFIG[8])
SWITCH_DISABLE = 1
(CTRL[30])
MUX_SWITCH0[18] = 1
MUX_SWITCH0[21] = 1
MUX_SWITCH_HW_CTRL[18]= 0
MUX_SWITCH_HW_CTRL[19]= 0
DSI_MODE = 1(CTRL[29])
dsi_cfg_differential = 1
dsi_oe [0] = 1
dsi_oe [1] = 1
MUX_SWITCH0[18] = 1
MUX_SWITCH0[21] = 1
MUX_SWITCH_HW_CTRL[18]= 1
MUX_SWITCH_HW_CTRL[19]= 1
DIFFERENTIAL_EN = 1
(CHANx_CONFIG[8])
SWITCH_DISABLE = 1
(CTRL[30])
MUX_SWITCH0[19] = 1
MUX_SWITCH0[20] = 1
MUX_SWITCH_HW_CTRL[18] =0
MUX_SWITCH_HW_CTRL[19] =0
DSI_MODE = 1(CTRL[29])
dsi_cfg_differential = 1
dsi_oe [0] = 1
dsi_oe [1] = 1
MUX_SWITCH0[19] = 1
MUX_SWITCH0[20] = 1
MUX_SWITCH_HW_CTRL[18] =1
MUX_SWITCH_HW_CTRL[19] = 1
205
SAR ADC模块
19.3.13 温度传感器配置
片上温度传感器可用于温度检测和基于温度的校准应用。当选择温度传感器信号作为 SAR ADC 模块的输入信号时,仅
可使用单端模式,且参考电压应来自内部的 1.024V。
PSoC 4 支持通过 3 种控制方式将温度传感器信号切换至 SARADC 的输入端,见下表。
注意:设置 MUX_FW_TEMP_VPLUS 位(SAR_MUX_SWITCH0[17]),可以使能温度传感器并将其输出连接到
SARADC 的正端;清除该位将通过切断偏置电流来禁止温度传感器
表 19-20. 温度传感器信号输入至 SARADC 的配置
控制方式
寄存器配置
序列控制
VREF_SEL = 0(SAR_CTRL[6:4])
NEG_SEL = 0(SAR_CTRL [11:9])*
SWITCH_DISABLE = 0(SAR_CTRL[30])
PIN_ADDR = 0(SAR_CHANx_CONFIG[2:0])
PORT_ADDR = 7(SAR_CHANx_CONFIG[6:4])
DIFFERENTIAL_EN = 0(SAR_CHANx_CONFIG[8])
SAR_MUX_SWITCH0[16] = 1
SAR_MUX_SWITCH0[17] = 1
SAR_MUX_SWITCH_HW_CTRL[16]= 1
SAR_MUX_SWITCH_HW_CTRL[17]= 1
软件控制
VREF_SEL = 0(SAR_CTRL[6:4])
NEG_SEL = 0(SAR_CTRL [11:9])*
SWITCH_DISABLE = 1(SAR_CTRL[30])
DIFFERENTIAL_EN = 0(SAR_CHANx_CONFIG[8])
SAR_MUX_SWITCH0[16] = 1
SAR_MUX_SWITCH0[17] = 1
SAR_MUX_SWITCH_HW_CTRL[16]= 0
SAR_MUX_SWITCH_HW_CTRL[17]= 0
DSI 控制
VREF_SEL = 0(SAR_CTRL[6:4])
NEG_SEL = 0(SAR_CTRL [11:9])*
SWITCH_DISABLE = 1(SAR_CTRL[30])
SAR_MUX_SWITCH0[16] = 1
SAR_MUX_SWITCH0[17] = 1
SAR_MUX_SWITCH_HW_CTRL[16]= 1
SAR_MUX_SWITCH_HW_CTRL[17]= 1
设置 DSI 信号:
dsi_cfg_differential=1
dsi_swctrl[1]=1
dsi_swctrl[0]=1
*对于温度传感器输入信号:NEG_SEL(SAR_CTRL[11:9]总为 0。
206
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
SAR ADC模块
19.4
寄存器列表
偏移地址
数量
SAR_CTRL
寄存器名称
0x0000
1
32
数据位宽度
全局配置寄存器,模拟控制寄存器
SAR_SAMPLE_CTRL
0x0004
1
32
全局配置寄存器,采样控制寄存器
SAR_SAMPLE_TIME01
0x0010
1
32
全局配置寄存器,可配置采样时间 ST0 和 ST1
SAR_SAMPLE_TIME23
0x0014
1
32
全局配置寄存器,可配置采样时间 ST2 和 ST3
SAR_RANGE_THRES
0x0018
1
32
全局配置寄存器,阈值检测寄存器
SAR_RANGE_COND
0x001C
1
32
全局配置寄存器,阈值检测模式寄存器
SAR_CHAN_EN
0x0020
1
32
通道使能寄存器
SAR_START_CTRL
0x0024
1
32
开启对使能通道的扫描(由软件触发),扫描结束
后硬件将对其清除。
SAR_CHAN_CONFIG
0x0080
8
32
通道配置寄存器
SAR_CHAN_WORK
0x0100
8
32
保存相应通道采样后的数据
SAR_CHAN_RESULT
0x0180
8
32
保存相应通道转换后的数据
SAR_CHAN_WORK_VALID
0x0200
1
32
指示某通道的工作寄存器数据是否有效,也就是某
通道是否在此次扫描周期中已经完成采样
SAR_CHAN_RESULT
_VALID
0x0204
1
32
指示某通道的结果寄存器数据是否有效,也就是某
通道是否已在上个扫描周期完成处理。
SAR_STATUS
0x0208
1
32
指示 SARADC 当前的状态(用于调试)
SAR_AVG_STAT
0x020C
1
32
当前求平均的状态(用于调试)
SAR_INTR
0x0210
1
32
中断请求寄存器
SAR_INTR_SET
0x0214
1
32
中断设置请求寄存器
SAR_INTR_MASK
0x0218
1
32
中断屏蔽寄存器
SAR_INTR_MASKED
0x021C
1
32
屏蔽结果寄存器:如果此寄存器的值非 0,则发送
到 NVIC 的 SARADC 的中断信号为高。其中存放的
值为中断请求与中断屏蔽寄存器的位与逻辑值。
SAR_SATURATE_INTR
0x0220
1
32
饱和中断请求寄存器
SAR_SATURATE_INTR_SET
0x0224
1
32
饱和中断设置请求寄存器
SAR_SATURATE_INTR_MASK
0x0228
1
32
饱和中断屏蔽寄存器
SAR_SATURATE_INTR_MASKED
0x022C
1
32
饱和中断屏蔽结果寄存器
SAR_RANGE_INTR
0x0230
1
32
阈值检测中断请求寄存器
SAR_RANGE_INTR_SET
0x0234
1
32
阈值检测中断请求设置寄存器
SAR_RANGE_INTR_MASK
0x0238
1
32
阈值检测中断屏蔽寄存器
SAR_RANGE_INTR_MASKED
0x023C
1
32
阈值检测中断屏蔽结果寄存器
SASR_INTR_CAUSE
0x0240
1
32
中断源寄存器
SAR_INJ_CHAN_CONFIG
0x0280
1
32
插入通道配置寄存器
SAR_INJ_RESULT
0x0290
1
32
插入通道结果寄存器
SAR_MUX_SWITCH0
0x0300
1
32
SARMUX 软件控制开关寄存器
SAR_MUX_SWITCH_CLEAR0
0x0304
1
32
清除 SARMUX 软件控制开关寄存器
SAR_MUX_SWITCH_HW
_CTRL
0x0340
1
32
SARMUX 硬件控制开关寄存器
SAR_MUX_SWITCH_STATUS
0x0348
1
32
SARMUX 开关状态寄存器
SAR_PUMP_CTRL
0x0380
1
32
电荷泵控制寄存器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本 *A
描述
207
低功耗比较器
20 低功耗比较器
PSoC® 4 的数字/休眠电源域(Digital/Hibernate power domain)中有两个低功耗比较器(Low Power Comparator)。
在低功耗模式下,当模拟系统被关闭时,比较器仍可提供快速检测输入信号的能力。比较器的正负输入端可以分别连接
到专用 GPIO 或 AMUXBUS_A/AMUXBUS_B;对低功耗比较器的输出信号可做如下处理:
 CPU 读取并做进一步处理
 作为中断/唤醒信号(在活动/睡眠/深度睡眠/休眠模式下)
 送至 DSI 做进一步处理
20.1
特性
PSoC® 4 低功耗比较器具有如下特性:






208
输入连接可配置
电源和速度可配置
支持 3 种低功耗模式(快速模式、低速模式和超低功耗模式)
可选的 10 mV 输入迟滞
较低的输入失调电压(校正后输入失调电压<4 mV)
比较器输出可作为唤醒信号(在睡眠/深度睡眠/休眠模式下)
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
低功耗比较器
低功耗比较器框图
20.2
图 20-1. PSoC 4 低功耗比较器框图
AHB IF
AHB
MMIO Registers
CLK_ahb
Active power domain
Edge detector
intr_comp1
intr_comp2
Software‐set Interrupt 1
Comparator 0
Software‐set Interrupt 2
I/0 pad
P0.0
Intr_clr
Falling, Rising, both
Not part of Low power comparator
It is in GPIO block
Each GPIO connects to AMUXBUS_A/_B
dsi_comp1
I/0 pad
P0.1
comp_intr
I/0 pad
P0.2
Comparator 1
dsi_comp2
Edge detector
I/0 pad
P0.3
20.3
AMUXBUS_B
AMUXBUS_A
Hibernate power domain
低功耗比较器的使用
下面将从输入配置、电源和速度模式、输出和中断配置、
迟滞、休眠唤醒、比较器时钟和失调电压校正等方面介
绍如何使用 PSoC 4 低功耗比较器。
20.3.1
输入配置
如下信号可以分别连接到低功耗比较器的正负输入端:
 两个外部管脚的输入电压
 一个外部管脚的输入电压和一个来自 AMUXBUS_A/
AMUXBUS_B 的内部信号。这两个输入信号均可以
连接到低功耗比较器的正端或负端。
 两个来自 AMUXBUS-A/AMUXBUS-B 的内部信号
如图 20-1 所示,管脚 P0.0/P0.1/P0.2/P0.3 均可以直接
连接到低功耗比较器的输入端。如果低功耗比较器的输
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
入端通过 AMUXBUS 连接到其他管脚,则相应的管脚
P0.0/P0.1/P0.2/P0.3 仍然会被占用,不可用作其他功能。
如何配置 GPIO 连接到 AMUXBUS_A/AMUXBUS_B,
请参考输入/输出系统章节。
20.3.2
电源模式和速度配置
2 个低功耗比较器均可以在 3 种电源模式下工作:快速模
式、低速模式和超低功耗模式。用户可以通过 MODE1
位(LPCOMP_CONFIG[1:0])和 MODE2 位(LPCOMP_
CONFIG[9:8])来分别配置低功耗比较器 0 和低功耗比
较器 1 的电源模式。但是,在电源模式改变的瞬间,比
较器的输出可能会有毛刺。
不同电源模式,具有不同的反应时间和功耗。其中,快
速模式的功耗最大,超低功耗模式最小。如需详细的功
耗及反应时间值,请参考数据手册。
209
低功耗比较器
20.3.3
输出和中断配置
低功耗比较器 0 和低功耗比较器 1 的输出值保存在
OUT1 位(LPCOMP_CONFIG[6])和 OUT2
(LPCOMP_CONFIG[14])。如图 20-1 所示,比较器的
输出经过边沿检测电路和逻辑处理,形成了 3 个信号:
dsi_comp1、dsi_comp2 和 comp_intr。用户可通过寄存
器 LPCOMP_CONFIG 的 INTTYPE 位来配置中断触发
方式(禁止/上升沿/下降沿/上升沿和下降沿触发)。
当 PSoC4 处于活动模式或睡眠模式时,信号
dsi_comp1/dsi_comp2 可通过 UDB 中的 DSI 被路由至
GPIO 或其他模块,DSI 输出可以选择是否使用同步器。
例如在 PWM 的控制应用中,用户可以使用
dsi_comp1/dsi_comp2 来关断 PWM 模块的输出信号,
是否同步可在 UDB 中选择。如果信号
dsi_comp1/dsi_comp2 被路由至 UDB 作进一步处理,则
所需时间将因用户的算法及同步器的选择不同而不同。
当 PSoC4 处于在深度睡眠或休眠模式时,因 UDB 电源
被关闭,信号 dsi_comp1/dsi_comp2 不能被路由。
两个低功耗比较器输出的信号(intr_comp1 / intr_comp2)
相或后成为中断信号 comp_intr,该信号与 CLK_ahb 同
步;比较器的清中断信号(Intr_clr)是异步的(见图 201)。寄存器 LPCOMP_INTR 的 COMP1 和 COMP2 位
分别 是低功耗比较器 1 和低功耗比较器 2 的中断请求标
志位;用户可通过寄存器 LPCOMP_INTR_SET 的
COMP1 和 COMP2 位对中断进行软件调试。
在低功耗模式下,比较器的输出翻转事件可激活中断唤
醒控制器(WIC),进而唤醒 CPU。因此,即使在低功
耗模式下,用户仍可用低功耗比较器来监控一些特殊
信号。
20.3.4
迟滞
在比较器的应用中,两个输入信号大小可能比较接近,
此时如果有噪声,易引起比较器的输出翻转。采用迟滞
可以很好的避免此现象。
用户可以通过设置迟滞使能位 HYST1 位(LPCOMP_
CONFIG[2])和 HYST2 位(LPCOMP_CONFIG[10])
来分别使能低功耗比较器 0 和低功耗比较器 1 的迟滞
(10mV)。
20.3.5
休眠唤醒
低功耗比较器可以在睡眠、深度睡眠和休眠等低功耗模
式下运行,其输出的中断信号可将器件从睡眠、深度睡
眠或休眠等低功耗模式下唤醒,不需要专门的设置。在
深度睡眠或休眠模式下,比较器 0 或比较器 1 的输出经
边沿检测电路可产生中断;但触发方式与寄存器
LPCOMP_CONFIG 的 INTTYPE 位无关。
210
20.3.6
比较器时钟
如图 20-1 所示,比较器使用系统主时钟 CLK_ahb 作为
中断的同步信号。
20.3.7
失调电压校正
在出厂时,低功耗比较器的输入失调电压已经被校正到
小于 4 mV。比较器的输入失调电压依赖于共模输入电压。
对失调电压的校正分为两步:首先在共模输入电压为
0.1V 时校正;其次在共模输入电压位 Vdd - 0.1 V 时校
正。小于 10.0mV 的输入失调电压远远小于 0.1V~Vdd0.1V 的输入电压工作范围。因此在正常的应用中,用户
一般无需考虑校正。
PSoC 4 支持用户在一个特定的共模输入电压下对失调
电压进行校正。用户可通过配置如下寄存器来校正失调
电压:
 寄存器 LPCOMP_TRIM1 和 LPCOMP_TRIM2 用来
校正低功耗比较器 0 的失调电压
 寄存器 LPCOMP_TRIM3 和 LPCOMP_TRIM4 用来
校正低功耗比较器 1 的失调电压。
如果期望较小的输入失调电压,可借助 CAL_EN 位
(LPCOMP_DFT[0])来完成。
用户校正比较器输入失调电压的方法如下(以低功耗比
较器 0 为例,将失调电压调制为小于 1mV):
1. 配置 CAL_EN 位(LPCOMP_DFT[0])来短接比较器
的正负输入端
2. 分别设置与低功耗比较器相连接的两个输入管脚至期
望值。
3. 更改寄存器 LPCOMP_TRIM1 的设置:
a. 根据测量的失调电压极性,设置或清除
LPCOMP_TRIM1[4]
b. 增加 LPCOMP_TRIM1[3:0]的值,直至测量的偏
置小于 1 mV。
4. 如果测量的失调电压极性已经改变,但是失调电压仍
然大于 1 mV,请使用 LPCOMP_TRIM2[3:0]来微调
失调电压值。这种调试方式仅对比较器在低速模式下
有效。
5. 如果 LPCOMP_TRIM1[3:0]的值是 0Fh,测量的失调电
压值仍然大于 1 mV,请根据测量的失调电压极性设
置或清除 LPCOMP_TRIM2[3],并增加
LPCOMP_TRIM2[2:0]的值,直至测量的失调电压小
于 1 mV。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
低功耗比较器
20.4
寄存器列表
寄存器
描述
LPCOMP_ID
LPCOMP_ID 寄存器包括了低功耗比较器的 ID 及修订编号等信息
LPCOMP_CONFIG
低功耗比较器的配置寄存器
LPCOMP_INTR
低功耗比较器的中断配置寄存器
LPCOMP_INTR_SET
低功耗比较器的中断设置寄存器(可用于软件调试)
LPCOMP_DFT
低功耗比较器的 DFT 寄存器
LPCOMP_TRIM1
比较器 1 校正字段
LPCOMP_TRIM2
比较器 1 校正字段
LPCOMP_TRIM3
比较器 2 校正字段
LPCOMP_TRIM4
比较器 2 校正字段
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
211
21 CTBm
CTBm(mini Continuous-Time Block)是 PSoC 4 提供的一个模拟功能模块,它包含了一个开关矩阵、两个相同的运算放
大器(可配置为比较器)和一个数字接口,其中每个运算放大器中都集成了一个电荷泵。与 CTB(Continuous-Time
Block)相比,CTBm 简化了一些内置电阻与开关。
21.1
特性
■
高度可配置的运算放大器:可配置速度,功耗,驱动能力和补偿;
■
通过内部开关,每个运算放大器可被配置为一个电压跟随器;
■
每个运算放大器可配置为比较器,带 10mV 的迟滞
■
最大驱动能力为 10 mA
■
容性负载为 20pF 时,增益带宽为 4MHz
■
失调电压可被调整到 1mV 以下
■
轨到轨的输入输出动态范围
■
❒
驱动 1mA 的负载时,动态范围为 Vss+0.2V 到 Vdda-0.2V;
❒
驱动 10mA 的负载时,动态范围为 Vss+0.5V 到 Vdda-0.5V;
容性负载为 50pF 时,输出摆率为 4V/us
212
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
CTBm
模块框图
21.2
P1.2
多路
器
MUX
10X
Ctbm_dsi_comp0
P1.0
Clk_comp
P1.6
模拟总线 AMUXBUSA
运算放大器
OPAMP 0
Ctbm_comp0_out
同步
单元
边沿检测单元
中断请求
Interrupt Request
P1.1
驱动输出开关
1X
SW1
sarbus0
P1.3
多路
器
MUX
10X
Ctbm_dsi_comp1
P1.5
Clk_comp
P1.7
模拟总线 AMUXBUSB
同步
单元
运算放大器
OPAMP 1
边沿检测单元
中断请求
Interrupt Request
Ctbm_comp1_out
P1.4
驱动输出开关
1X
SW2
sarbus0
sarbus1
SW3
仅被CTBm相关寄存器控制的开关
被CTBm和SARADC相关寄存器和DSI互连控制的开关
注意:同一时间,一个运放后两个驱动器(一个驱动能力为10mA;另一个为1mA)仅有一个可被使能。
21.3
工作原理
如模块框图所示,CTBm 主要有两个相同的运算放大器
和一个开关矩阵组成。每个运算放大器有 1 个输入级和
3 个输出级,同一时刻,只有一个输出级能够工作。通过
选择不同输出级,运算放大器可以工作为一个 A 类运算
放大器,AB 类运算放大器或者比较器。CTBm 其它可配
置的属性还包括功耗,速度,补偿和开关矩阵控制。
在使用 CTBm 模块时,首先需要安装好必需的外围器件,
如电阻。通过将寄存器 CTBm_CTRL[31]置位,可以使
能 CTBm 模块。为了获得轨到轨的输入输出动态范围,
并保证运算放大器的线性工作特性,需要将运算放大器
内部的电荷泵使能。具体的寄存器操作是将 CTBm_OA_
RES0_CTRL[11]和 CTBm_OA_RES1_CTRL[11]置位,
分别将运算放大器 0 和运算放大器 1 中的电荷泵使能。
4. 配 置 输 出 开 关 , 尤 其 当 运 放 的 输 出 需 要 被 连 接 到
SARADC 时;
5. 如果需要,将运放配置为比较器的工作模式。
21.3.1 电源模式配置
通过减小进入运算放大器的参考电流,CTBm 可以降低
功耗。通过配置寄存器 CTBM_OA_RESx_CTRL[1:0]可
以选择运放的电源模式,共低、中、高三种电源模式可
供选择。在低电源模式中,运放有最低的功耗,但输出
摆率和工作带宽等特性也较差;在高电源模式中,则相
反。电源模式的选择会对运算放大器的输出驱动能力有
影响,详见表 21-1。器件手册具体给出了不同电源模式
下,器件的功 耗、输出摆率、工作带宽等
特性。
完成上述的使能后,遵循下列步骤完成所有的配置:
1. 配置电源模式;
2. 配置输出的驱动能力;
3. 配置输入开关;
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
213
CTBm
于驱动较大的片外负载。如模块框图所示,1X 输出级连
接到 sarbus0 和 sarbus1,用于驱动 SARADC 的输入级;
10X 输出级连接到了芯片的管脚上,用于驱动片外负载。
每个输出级在不同电源模式下的驱动能力有所变化,具
体请参见表 21-1。
21.3.2 驱动能力配置
每个运算放大器的输出级均可配置为内部驱动输出级(A
类/1X)或者外部驱动输出级(AB 类/10X)。同一个时
刻,一个运算放大器只有一个输出级能够被使能。1X 输
出级适合用于驱动较小的片上负载;10X 输出级适合用
表 21-1. 电源模式与驱动能力的关系
电源模式
CTBm_OA_RESx_CTRL[1:0]
00 (禁止)
01 (低)
10 (中)
11 (高)
外部驱动输出级 (10X )
关闭
10mA
10mA
10mA
内部驱动输出级 (1X)
关闭
100uA
400uA
1mA
通过配置寄存器 OAx_DRIVE_STR_SEL(CTB_OA_
RESx_CTRL[2]),可以选择哪一个驱动器被使能。如
果在一些特殊的应用场合,需要 1mA 的驱动器驱动片外
负载,或者 10mA 驱动器驱动片内负载,则需要额外将
寄存器 CTBM_OAx_SW [21]置位,使驱动输出开关闭合。
此时,整个模块的性能会有所下降。
每个运算放大器有一个可编程控制的补偿电容。
当负载发生改变时,可以通过调整补偿电容来
优化运算放大器的性能。补偿电容的配置寄存器为
CTBm_OAx_COMP_TRIM(x= 0 或 1),具体如
表 21-2 所示。注意,datasheet 中增益带宽和输出摆率
在任何一种补偿电容调整的情况下均能够达到。
表 21-2. 补偿电容的配置寄存器
CTBm_OAx_COMP_TRIM[1:0]
描述
00
最小补偿,高速,低稳定性
01
中度补偿,平衡的速度和稳定性
11
最大补偿,低速,高稳定性
21.3.3.1
21.3.3 开关配置
通过控制开关,运放的正负输入端能够被连接到芯片的
管脚。另外每个运放的正输入端还能够通过开关直接连
接到芯片内部的模拟总线,其中运放 Opamp0 的正输入
端可直接连到 AMUXBUS A;运放 Opamp1 的正输入端
可直接连到 AMUXBUS B。
如模块框图所示,CTBm 中集成了很多开关,其中大部
分的开关通过 CTBm 的相关寄存器(CTBM_OA0_SW,
CTBM_OA1_SW )配置。但是有三个开关(输出开关
SW1、SW2 和 SW3)的配置不仅取决于 CTBm 的相关
寄存器,还取决于 SARADC 的相关寄存器和 DSI 的互连。
注意:在使用中应当确保同一时刻下,一个运放输入端
的多个开关中只有一个被闭合,否则同时被闭合的开关
连接的输入源将被短路。
将寄存器 CTBM_OAx_SW 置位,能够将相应的开关配
置为闭合状态。将寄存器 CTBM_OAx_SW_CLEAR 置
位令寄存器 CTBM_OAx_SW 被清零,从而将相应的开
关配置为断开状态。
■
输入开关控制
正输入端
运放Opamp0和Opamp1的正输入端通过开关可以分别连接到三个输入源,如表 21-3所示。
表 21-3
正向输入
■
■
■
■
■
■
运放
Opamp0
运放
Opamp1
214
开关控制位
开关状态
■
AMUXBUSA
■
CTBM_OA0_SW [0]
■
0: 断开 1: 闭合
■
P1.0
■
CTBM_OA0_SW [2]
■
0: 断开 1: 闭合
■
P1.6
■
CTBM_OA0_SW [3]
■
0: 断开 1: 闭合
■
AMUXBUSB
■
CTBM_OA1_SW [0]
■
0: 断开 1: 闭合
■
P1. 5
■
CTBM_OA1_SW [1]
■
0: 断开 1: 闭合
■
P1.7
■
CTBM_OA1_SW [4]
■
0: 断开 1: 闭合
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
CTBm
■
负输入端
运放 Opamp0 和 Opamp1 的负输入端通过开关可以分别连接到两个输入源,当连接到运放的输出时,为运放提供了一
个反馈回路,如表 21-4 所示。
表 21-4
负向输入
开关控制位
开关状态
P1.1
■
CTBM_OA0_SW [8]
■
0: 断开 1: 闭合
■
■
运放
Opamp0
■
■
1mA 驱动器的输出
■
CTBM_OA0_SW [14]
■
0: 断开 1: 闭合
■
■
运放
Opamp1
■
P1.4
■
CTBM_OA1_SW [8]
■
0: 断开 1: 闭合
■
1mA 驱动器的输出
■
CTBM_OA1_SW [14]
■
0: 断开 1: 闭合
21.3.3.2
输出开关控制
运放的输出通过 10mA 驱动器直接被连接到固定的管脚
(Opamp0:P1.2;Opamp1:P1.3),这不需要任何配
置。通过配置开关 SW1、SW2 和 SW3,运放的输出还
可以被连接到 SARADC 的模拟输入总线 sarbus0 或者
sarbus1,如模块框图所示。这三个开关的配置取决于
CTBm 相关寄存器、SARADC 相关寄存器和 DSI 互连,
具体控制逻辑如下表所示,其中 PORT_ADDR,
PIN_ADDR 和 DIFFERENTIAL_EN 分别来自于
SAR_CHANx_CONFIG [6:4],SAR_CHANx_CONFIG
[2:0]和 SAR_CHANx_CONFIG [8],它们中任何一个被
设置为 0 都会使相应的开关被断开;当使用 SARADC 相
关寄存器或 DSI 互连来配置开关时,
CTB_SW_HW_CTRL bit [2]或 CTB_SW_HW_CTRL bit
[3]必须被置位;CTB_OAx_SW[18]或 CTB_OAx_SW[19]
可以屏蔽其他其他寄存器位的控制;SW1、SW2 和
SW3 分别是 CTBM_SW_STATUS [30:28]中的三位,它
们记录了对应开关的当前状态,0 表示断开,1 表示闭合。
表 21-5 开关 SW1 控制逻辑的真值表
PORT_ADDR
PIN_ADDR
CTB_SW_HW_CTRL[2]
dsi_out[2]
CTB_OA0_SW[18]
SW1
X
X
X
X
0
0
X
0
1
0
1
0
0
X
1
0
1
0
X
X
X
1
1
1
X
X
0
X
1
1
1
2
X
X
1
1
表 21-6 开关 SW2 控制逻辑的真值表
DIFFERENTIAL_EN
PORT_ADDR
PIN_ADDR
X
X
X
X
X
0
X
0
1
CTB_SW_HW_CTRL[3]
dsi_out[3]
CTB_OA1_SW[18]
SW2
X
X
0
0
1
0
1
0
X
1
0
1
0
X
X
X
0
1
0
X
X
X
0
X
1
1
X
X
X
X
X
1
1
0
1
3
X
X
1
1
表 21-7 开关 SW3 控制逻辑的真值表
DIFFERENTIAL_EN
PORT_ADDR
PIN_ADDR
CTB_SW_HW_CTRL[3]
dsi_out[3]
CTB_OA1_SW[19]
SW3
X
X
X
X
X
0
0
X
X
0
1
0
1
0
X
0
X
1
0
1
0
0
X
X
X
0
1
0
X
X
X
0
X
1
1
X
X
X
X
X
1
1
1
1
2
X
X
1
1
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
215
CTBm
21.3.4 比较器工作模式
比较器的当前状态被存储在寄存器
CTBM_COMP_STAT 中。
通过将寄存器 CTBM_OA_RESx_CTRL[4]置位,可以配
置相应的运放工作在比较器模式。在这种模式下,有如
下特性:
21.3.4.2
■
10mV 的迟滞范围,可选
■
三种电源模式可供选择
■
比较器的输出连接到 DSI,可被同步
■
失调电压可被调整到 1mV 以下
■
多种中断触发方式
21.3.4.1
比较器的配置
将寄存器 CTBM_OA_RESx_CTRL[5]置位能够使能比较
器的 10mV 迟滞特性。比较器共有三种电源模式,包括
低、中和高。通过配置寄存器 CTBM_OA_RESx_CTRL
[1:0],可以选择具体工作在何种电源模式。在不同的电
源模式中,比较器的动态响应、功耗等互不相同,具体
请参考相应的器件手册。
如模块框图所示,比较器的输出连接到 DSI,可以被系
统时钟同步,是否进行同步可以通过寄存器
CTBM_OA_RESx_CTRL[6]设置。
21.4
比较器的中断
比较器有四种中断触发模式:禁止、上升沿、下降沿和
双沿,通过配置寄存器 CTBM_OA_RESx_CTRL[9:8],
可以选择具体的中断触发方式。一旦某个比较器触发了
中断,寄存器 CTBM_INTR 中相应的位会被置位,记录
此中断请求。
将寄存器 CTBM_INTR_MASK 的某一位清零,相应的中
断请求被屏蔽,则该请求不会被发送至嵌套向量中断控
制器(NVIC: Nested Vectored Interrupt Controller)。
为方便软件设计,CTBM_INTR 和 CTBM_INTR_MASK
的位与结果被记录在寄存器 CTBM_INTR_MASKED 中,
如果其中某位为 1,说明相应的比较器触发了中断,并且
该中断未被屏蔽,会被发送到 NVIC 进行处理。
通过软件向寄存器 CTBM_INTR 的某一位写 1,可以清
除相应的中断请求。
另外为方便调试,CTBm 还提供了一个寄存器
CTBM_INTR_SET,通过软件人为的将该寄存器中的某
位置位,可以人为的使相应的比较器触发中断。
寄存器列表
表 21-8
偏移地址
比特数
名称
描述
0x0000
32
CTBm_CTRL
CTBm 模块的全局控制寄存器
0x0004
32
CTBm_OA_RES0_CTRL
运放 Opamp0 的控制寄存器
0x0008
32
CTBm_OA_RES1_CTRL
运放 Opamp1 的控制寄存器
0x000C
32
CTBm_COMP_STAT
比较器的状态寄存器
0x0020
32
CTBm_INTR
中断请求寄存器
0x0024
32
CTBm_INTR_SET
中断请求置位寄存器
0x0028
32
CTBm_INTR_MASK
中断请求屏蔽寄存器
0x002C
32
CTBm_INTR_MASKED
中断请求屏蔽结果寄存器
0x0030
32
CTBm_DFT_CTRL
模拟可测试性设计(DFT: Design For Test)控制寄存器
0x0080
32
CTBm_OA0_SW
运放 Opamp0 的开关控制寄存器
0x0084
32
CTBm_OA0_SW_CLEAR
运放 Opamp0 的开关控制清零寄存器
0x0088
32
CTBm_OA1_SW
运放 Opamp1 的开关控制寄存器
0x008C
32
CTBm_OA1_SW_CLEAR
运放 Opamp1 的开关控制清零寄存器
0x00C0
32
CTBm_SW_HW_CTRL
CTBm 模块硬件控制使能寄存器
0x00C4
32
CTBm_SW_STATUS
CTBm 模块总线开关控制寄存器
0x0F00
32
CTBm_OA0_OFFSET_TRIM
运放 Opamp0 的失调电压调整寄存器
0x0F04
32
CTBm_OA0_SLOPE_OFFSET_TRIM
运放 Opamp0 的调整控制寄存器
0x0F08
32
CTBm_OA0_COMP_TRIM
运放 Opamp0 的调整控制寄存器
0x0F0C
32
CTBm_OA1_OFFSET_TRIM
运放 Opamp1 的失调电压调整寄存器
0x0F10
32
CTBm_OA1_SLOPE_OFFSET_TRIM
运放 Opamp1 的调整控制寄存器
0x0F14
32
CTBm_OA1_COMP_TRIM
运放 Opamp1 的调整控制寄存器
216
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
LCD 段直接驱动
22 LCD 段直接驱动
PSoC4 的液晶显示 (LCD) 模块可以直接支持 STN, TN 类型的段 LCD。
22.1
特性
LCD 段直接驱动模块具有以下特性:
■
可支持 4 个公共端
■
支持 Type A (标准型) 和 Type B(低功耗型)驱动波形
■
任何一个 GPIO 都可以作公共端或者段
■
支持三种驱动模式
❒
数字相关型
❒
PWM 1/3 偏置
❒
PWM1/2 偏置
■
在数字相关模式时,可以用 1.8V 的 VDD 来驱动 3V 的显示屏
■
可以工作在活动、睡眠和深度睡眠模式
■
数字对比度控制
22.2
LCD 段驱动概述
分段的液晶显示面板夹在两个电极(端和段)和各种偏振层和反射层之间。上下两个电极构成一个电极对,每对最多只
能连到液晶屏的一个段。两个电极,其中一个叫端电极(COM)或者背板,另一个叫段电极(SEG)。从电路的角度
来看,LCD 段可以看做一个非线性的电容负载,而公共端/段电极可以看做组成矩阵的行和列。LCD 段的不透明度取决
于加在公共端和段之间的有效电压值(RMS)。
本章介绍 LCD 时会使用如下术语:
■
VLO:驱动电路产生的将段关闭的电压。
■
VHI:驱动电路产生的将段选通的电压。
■
区分度:VHI and VLo 的比值。这取决于驱动电路的能力和驱动波形。比值越高,对比度越高。
液晶不能忍受长时间的直流电压。因此,任何驱动波形的直流分量必须为零(开和关时)。通常情况下,驱动到公共端
和段的波形都会有多个电压变化。定义驱动波形会用到如下的术语:
■
占空比:如果有 M 个公共端(COM),那这个驱动就被认为是 1/Mth 的占空比。每个公共端在 1/Mth 的时间内有效。
■
偏置:如果驱动电压波形变化步长为用到(1/B)*VDRV 的,那就认为这个驱动采用 1/Bth 偏置。其中,VDRV 是系统中
最高的驱动电压(在 PSoC4A 中是 Vddd)。
■
帧(Frame):每个帧的长度是选中所有段所需的时间。每个帧中,按段的顺序扫描所有公共端。在整个帧的尺度
上看,所有段上的电压时直流分量为 0V 。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
217
LCD 段直接驱动
PSoC 4 支持两种驱动波形,如下:
■
■
Type-A 波形:在这种波形中,如果有 M 是公共端,
那么就将帧分成 M 个子帧。一个公共端,只会被选
中一次。比如 COM[i] 会在子帧 i 中被选中。
22.2.1
驱动模式
PSoC4A 支持一下的驱动模式:
Type-B 波形:一个帧被分成 2M 个子帧。每个公
共端在一个帧中会被选中两次。比如,COM [i] 会
在 i 和 M+i 中被选中。Type-B 波形的能耗通常会比
较低,因为它的电压变化比较小。
■
PWM 驱动
❒
1/3rdbias1/3rd 偏置
❒
1/2ndbias1/2nd 偏置
❒
数字校正
22.2.1.1
PWM 驱动
在 PWM 驱动模式中,多种驱动电压是有 PWMLCD 屏
内在的电阻和电容产生的,如图 22-1 所示。
图 22-1:PWM 驱动(1/3 偏置)
GPIO Output Impedance
LCD Segment
Capacitance
ITO Panel Resistance
PWM Generator
COM
V1
V2
PWM Generator
SEG
V1
Vddd
0
V2
t
Vddd
2/3 Vddd
1/3 Vddd
0
t
驱动电路输出的是 PWM 波形。PWM 经过用 ITO(铟锡氧化物)的面板间电阻值和段电容的滤波,LCD 段两端的电压
是一个平滑的模拟电压,如图 22-1 所示。
PWM 的波形可以由内部低速时钟 ILO 或者内部高速时钟 IMO 产生。驱动段码式 LCD 的模拟电压频率通常很低
(~50Hz)。
图 22-2 和图 22-3 显示了 1/2rd 的偏 置和 1/4th 占空比的 COM 和 SEG 波 形 (Type-A/Type-B)。 图中 只显示了
COM0/COM1 和 SEG0/SEG。
218
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
LCD 段直接驱动
图 22-2. PWM1/2nd Type-A 波形
One ‘Frame’ of Type A Waveform
Resulting voltage across segments
(addresses all segments once)
(VDC = 0)
VDD
VDD
COM0
COM0 -SEG0
1/2 VDD
-VDD
0
VDD
VDD
COM1
COM0 -SEG1
1/2 VDD
0
Segment Off:
VRMS = 0.433 VDD
-VDD
0
VDD
VDD
SEG0
Segment On:
VRMS = 0.661 VDD
0
COM1 -SEG0
1/2 VDD
0
VDD
VDD
SEG1 1/2 V
DD
COM1 -SEG1
Segment On:
VRMS = 0.661 VDD
0
-VDD
Segment Off:
VRMS = 0.433 VDD
0
-VDD
0
t0
t1
t2
t0
t3
t1
t2
t3
One Frame
Segment is On
Discrimination ratio:
D = 0.661/0.433 = 1.527
COM / SEG is selected
Segment is Off
COM / SEG is not selected
图 22-3. PWM1/2nd Type-B 波形实例
One ‘Frame’ of Type B Waveform
Resulting voltage across segments
(addresses all segments twice)
(VDC = 0)
VDD
VDD
COM0
COM0 -SEG0
1/2 VDD
-VDD
0
VDD
VDD
COM1
COM0 -SEG1
1/2 VDD
Segment Off:
VRMS = 0.433 VDD
VDD
VDD
COM1 -SEG0
1/2 VDD
Segment On:
VRMS = 0.661 VDD
0
-VDD
0
VDD
VDD
SEG1
0
-VDD
0
SEG0
Segment On:
VRMS = 0.661 VDD
0
COM1 -SEG1
1/2 VDD
Segment Off:
VRMS = 0.433 VDD
0
-VDD
0
t0
t1
t2
t3
t0
t1
t2
One Frame
Segment is On
t3
Discrimination ratio:
D = 0.661/0.433 = 1.527
COM / SEG is selected
Segment is Off
COM / SEG is not selected
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
219
LCD 段直接驱动
图 22-4. PWM1/3rdType-A 波形实例
One ‘Frame’ of Type A Waveform
Resulting voltage across segments
(addresses all segments once)
(VDC = 0)
VDD
VDD
COM0
2/3 VDD
COM0 -SEG0
1/3 VDD
-VDD
0
VDD
VDD
COM1
Segment On:
VRMS = 0.577 VDD
0
2/3 VDD
COM0 -SEG1
0
Segment Off:
VRMS = 0.333 VDD
1/3 VDD
-VDD
0
VDD
VDD
SEG0
2/3 VDD
COM1 -SEG0
1/3 VDD
Segment On:
VRMS = 0.577 VDD
0
-VDD
0
VDD
VDD
SEG1 2/3 VDD
1/3 VDD
COM1 -SEG1
0
Segment Off:
VRMS = 0.333 VDD
-VDD
0
t0
t1
t2
t0
t3
t1
t2
t3
One Frame
Discrimination ratio:
D = 0.577/0.333 = 1.732
Segment is On
COM / SEG is selected
Segment is Off
COM / SEG is not selected
图 22-5. PWM1/3rdType-B 波形实例
One ‘Frame’ of Type B Waveform
Resulting voltage across segments
(addresses all segments twice)
(VDC = 0)
VDD
VDD
COM0
2/3 VDD
COM0 -SEG0
Segment On:
VRMS = 0.577 VDD
0
1/3 VDD
-VDD
0
VDD
VDD
COM1
2/3 VDD
COM0 -SEG1
0
Segment Off:
VRMS = 0.333 VDD
1/3 VDD
-VDD
0
VDD
VDD
SEG0
2/3 VDD
COM1 -SEG0
1/3 VDD
Segment On:
VRMS = 0.577 VDD
0
-VDD
0
VDD
VDD
SEG1 2/3 VDD
1/3 VDD
COM1 -SEG1
Segment Off:
VRMS = 0.333 VDD
0
-VDD
0
t0
t1
t2
t3
t0
t1
t2
One Frame
Segment is On
t3
Discrimination ratio:
D = 0.577/0.333 = 1.732
COM / SEG is selected
Segment is Off
COM / SEG is not selected
220
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
LCD 段直接驱动
使用如下这些方程式可以计算开通和关闭时电压的有效
值(RMS):
B 是偏置,M 是占空比。对于大多数应用,建议采用
1/3rd 的偏置。
当 LCD 工作在低速模式时,PWM 信号来自于 32KHz 的
ILO(内部低速振荡器)。因为显示屏电容值很小,为了
使纹波和上升/下降时间在可接受的范围,使用 32 kHz
的 PWM 时,有必要一个额外地串联 100K-1M 欧姆外部
电阻。当 PWM 频率大于 1M 时,不需要外加电阻。最佳
的 PWM 频率取决于屏的电容和 ITO 的电阻。
如图 22-2 和 22-3 所示,1/2ndPWM 的优势是 PWM 只需
要加在 COM 端,SEG 端的信号只需要是或高或低的逻
辑电平即可。因此如图的例子,1/2nd 偏置的 PWM 只需
要四个外部电阻即可。
22.2.1.2
数字相关
数字相关模式不需要在两个电极上产生偏置电压,而是
利用 LCD 的对比度取决于段上的电压有效值的特性,直
接用逻辑电平来驱动 COM 和 SEG。利用 COM 和 SEG
的不同相位关系对应的两种差的不同有效值来决定 LCD
开通或关闭。
因此通过将 COM 信号在无效子帧时基础频率加倍,
COM 和 SEG 驱动信号的相位关系可以被改变,两者的
差的有效值也随之改变,从而开通或关闭 LCD 段。
工作的基本原理如图 22-6 和 22-7 所示。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
221
LCD 段直接驱动
图 22-6. 数字关联 type-A 波形实例
One ‘Frame’ of Type A Waveform
Resulting voltage across segments
(addresses all segments once)
(VDC = 0)
VDD
VDD
COM0
COM0 -SEG0
Segment On:
VRMS = 0.791 VDD
0
-VDD
0
VDD
VDD
COM0 -SEG1
COM1
0
Segment Off:
VRMS = 0.612 VDD
-VDD
0
VDD
VDD
COM1 -SEG0
SEG0
Segment On:
VRMS = 0.791 VDD
0
-VDD
0
VDD
VDD
SEG1
COM1 -SEG1
Segment Off:
VRMS = 0.612 VDD
0
-VDD
0
t0
t1
t2
t0
t3
t1
t2
t3
One Frame
Discrimination ratio:
D = 0.791/0.612 = 1.291
Segment is On
COM / SEG is selected
Segment is Off
COM / SEG is not selected
图 22-7. 数字相关模式 Type-B 波形实例
One ‘Frame’ of Type B Waveform
Resulting voltage across segments
(addresses all segments twice)
(VDC = 0)
VDD
VDD
COM0
COM0 -SEG0
Segment On:
VRMS = 0.791 VDD
0
-VDD
0
VDD
VDD
COM0 -SEG1
COM1
0
Segment Off:
VRMS = 0.612 VDD
-VDD
0
VDD
VDD
COM1 -SEG0
SEG0
0
-VDD
VDD
VDD
SEG1
COM1 -SEG1
Segment On:
VRMS = 0.791 VDD
0
Segment Off:
VRMS = 0.612 VDD
0
-VDD
0
t0
t1
t2
t3
t0
t1
t2
One Frame
Segment is On
t3
Discrimination ratio:
D = 0.791/0.612 = 1.291
COM / SEG is selected
Segment is Off
COM / SEG is not selected
222
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
LCD 段直接驱动
开通和关闭时段上的电压有效值如下公式:
22.2.2
推荐的驱动模式
PWM 驱动模式的对比度高于数字相关模式,详情请见
22.2.1.1PWM 驱动和 22.2.1.2 数字相关。在活动模式或
者睡眠模式时,采用 PWM 模式以获得更好的对比度。
在深度睡眠模式时,可采用数字相关模式来达到低功耗。
模式的切换,需要重新配置寄存器。
可以计算出,4 个 COM 时的区分度是 1.291。数字相关
模式的对比度比 PWM 模式的要低。但是数字相关模式
的功耗比较低,因为其波形变化的频率很低。数字相关
模式用在 TN 显示器上可以看到降低但可以接受的对比度,
但是在高对比度的 STN 屏上看不到明显的差异。
数字相关模式用在 TN 屏上,虽然对比度降低,但是可以
接受。用在自身对比度较高的 STN 屏上,对比度和可视
角无明显差异。
每种驱动模式都有其优缺点,在不同情况下的推荐模式
如表 22-1。
数字相关模式可以用 1.8V 的 Vdd 来驱动 3V 的显示屏。
表 22-1. 推荐使用模式
显示器类型
深度睡眠模式
TN Glass
数字相关
STN Glass
数字相关
活动/睡眠模式
PWM 1/3 偏置
备注
切换到深度睡眠或中唤醒,需要软件切换 LCD 驱动模式
在 STN 显示屏上,PWM 驱动没有对比度优势
数字对比度控制
22.2.3
在所有驱动模式中,数字对比度控制可以用来改变段的对比度。这个方法通过在每帧后插入“死区时间”来减少驱动时
间,以来减小对比度。在死区阶段,所有的 COM 和 SEG 都被驱动到高电平。图 22-8 显示了 1/3 偏置和 1/4 占空比
PWM 驱动的死区对比度控制方法。
图 22-8. “死区”对比度控制
Two Frames of of Type A Waveform with Dead-time
(Example for 1/4th Duty and 1/3rd bias)
VDD
COM0
2/3 VDD
1/3 VDD
0
VDD
COM1
2/3 VDD
1/3 VDD
0
VDD
SEG0
2/3 VDD
1/3 VDD
0
VDD
SEG1 2/3 VDD
1/3 VDD
0
t0
t1
t2
t3
dt
t0
t1
t2
t3
dt
Dead-Time
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
223
LCD 段直接驱动
22.3
LCD 模块介绍
图 22-9. LCD 直接驱动模块
22.3.1 工作原理
LCD 控制器有两个驱动信号源,一个来自有于内部主要
时钟源(IMO)的高速时钟,另一个来自于内部低速时钟源
(ILO,32KHz)的低速时钟。如图 22-11,它们分别被
称作高速 LCD 驱动信号发生器和低速 LCD 驱动信号发
生器,它们共用相同的配置寄存器。两个驱动信号发生
器都支持 PWM 和数字关联驱动方式。如 22.2.1.1PWM
驱动模式所描述,低速 PWM 驱动模式需要外部电阻。
根据软件的配置,多路转换器选择这两个发生器输出的
其中一个来驱动 LCD。LCD 管脚逻辑模块再将这个输出
路由到相应的 I/O 管脚上。任何一个 GPIO 都可以用作
COM 或者 SEG,这可以由 GPIO 矩阵来实现,可以通
过 GPIO 配置寄存器来选择,详情请见 GPIO 章节。
眠电源域,低速驱动信号发生器工作在深度睡眠电源域。
两者共用一组配置寄存器。
寄存器 LCD_CONTROL 可以配置如下参数:
■
Type A 或 Type B 驱动波形选择,LCD_MODE 位
(寄存器 LCD_CONTROL [3])。
■
公共端个数选择,可选值为 2,3,4,COM_NUM
字段(寄存器 LCD_CONTROL[11:8])。
■
工作模式选择:
LCD 控制器可以工作在三种电源模式:活动、睡眠和深
度睡眠。高速工作只支持活动或睡眠模式,低速工作则可
以三种模式都支持。在休眠状态下,LCD 控制器不可用。
高速和低速驱动信号发生器
除了高速驱动信号发生器有较大的分频器以外,其余部
分和低速驱动信号发生器比较相似。因为产生高速信号
的的 IMO 的时钟频率一般是产生低速信号的 ILO (32
KHz)的 30-100 倍。高速驱动信号发生器工作在活动/睡
224
数 字 关 联 模 式 , OP_MODE 位 ( 寄 存 器
LCD_CONTROL[4])
❒
PWM 模式(两种模式二选一),BIAS 位(寄存
器 LCD_CONTROL[6:5])
❒
PWM 1/2 偏置
PWM 1/3 偏置
❒
■
22.3.2
❒
停 止 : 高 速 驱 动 信 号 发 生 器 HS_EN 位 ( 寄 存 器
LCD_CONTROL [1] ) ;低 速 LS_EN 位 (寄 存器
LCD_CONTROL[0])。通常其中一个停止。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
LCD 段直接驱动
■
■
一个计数器用来产生子帧的时间:SUBFR_DIV 字段
(寄存器 LCD_DIVIDER[15:0])。如果写入的值位
C,那么子帧周期即为 4*(C+1)个时钟周期。低速信
号发生器有 8 位(16 位的低 8 位)的计数器,对于
32KHz 的 ILO 时钟,可以产生最大 8ms 的 1/4 子帧
时间。高速驱动信号发生器有 16 位的计数器。
死区时间计数器:DEAD_DIV 字段(寄存器
LCD_DIVIDER[31:16])用来配置死区时间。和子帧
时间计数器的位数一样。
多路复用器和 LCD 引脚逻辑
22.3.3
LCD_CONTROL [1:0] 寄存器中的可以分别用来使能或
禁止低速和高速驱动信号发生器。高速或者低速信号发
生器产生的信号经过 LCD 引脚逻辑模块,连接到高速 IO
矩阵(HSIO Matrix)。
22.3.4
显示数据寄存器
任何一个 GPIO 都可以通过寄存器
HSIOM4A_PORT_SEL0...4 配置成 COM 或者 SEG。每
个管脚在寄存器 LCD_DATA0 中有相应的四个比特位
(即比特位 [4i+3:4i] 对应管脚[i]),对应这个管脚在在
子帧(0-3)中的选中情况。一共有 8 个 LCD_DATA0 寄
存器,对应不同的端口的管脚。但是同一子帧中只能有
一个 COM 被选中,SEG 则可以任意选择。如果管脚的
COM 和 SEG 在子帧中被同时选中,则这个 LCD 段就会
选通。所有子帧中选通的 LCD 段就是这一帧的选通段,
在 LCD 上可以显示出来。
如果有四个 COM,其在每个子帧中的数据如下:
COM 0 – 1, 0, 0, 0
COM 1 – 0, 1, 0, 0
COM 2 – 0, 0, 1, 0
COM 3 – 0, 0, 0, 1
22.4
寄存器表
表 22-2. 直接驱动 LCD 寄存器列表
Description
寄存器名
LCD_DIVIDER
控制子帧和死区时间寄存器
LCD_CONTROL
配置驱动信号寄存器
LCD_DATA0
LCD 显示数据寄存器,即 COMx 和 SEGx
LCD_DATA1
LCD 引脚数据寄存器
LCD_DATA2
LCD 引脚数据寄存器
LCD_DATA3
LCD 引脚数据寄存器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
225
CapSense
23 CapSense
CapSense 电容感应技术允许用户应用手指的电容效应来控制按键、滑条和轮盘,此外触摸板和触摸屏也是常见的应
用。PSoC 4 使用的电容感应技术是 CSD(CapSense Sigma Delta),它能够提供业界一流的信号噪声比。CSD 电
容感应包括了硬件和软件技术。
23.1
特性
PSoC 4 CSD 模块有如下特性:
■
鲁棒的感应技术;
■
业界一流的信号噪声比;
■
支持多种覆盖物;
■
SmartSense™ 智能感应技术;
■
最多支持 35 个电容感应按键;
■
灵敏的接近式感应;
■
防水性能;
■
低功耗;
■
双 IDAC 的结构能够有效的提高扫描速度和信噪比;
■
任何一个管脚均可用于连接感应传感器(调制电容专用管脚除外);
■
伪随机序列的时钟源,有效的降低电磁干扰;
■
GPIO 单元预充电模式,提高模块的初始化速度;
23.2
模块框图
图 23-1 显示了 CSD 感应方法的示意图。
图 23-1. CSD 感应方法的示意图
GPIO Pin
Sensor 1
Capacitance to
current converter
IS1
CS1
GPIO Pin
Sensor 2
Capacitance to
current converter
IS2
Capacitance to
current converter
ISN
Analog
Multiplexer
CS2
Current to digital
converter (sigma
delta)
raw count
Firmware
processing
touch status
GPIO Pin
Sensor N
CSN
226
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
CapSense
工作原理
23.3
当感应传感器连接到管脚上,PSoC 4 内部 GPIO 单元的开关电容电路将感应传感器的电容量转换为一个等效的电流值。
通过一个模拟的多路器,某一路的电流值被送到电流-数字转换器,该电流-数字转换器类似于一个 Delta-Sigma 架构的
模数转换器。
电流-数字转换器的输出被称为初始计数值(raw count),该数值与传感器的电容值成正比,如式 23-1 所示。
raw count = GC CS
(23 − 1)
GC 是 CSD 模块的电容-数字的转换增益。
当有手指靠近或者接触传感器时,电容值会增大,初始计数值也会相应的增大。当计数值的变化超过一个阈值时,软件
就可以判定手指的存在。
23.3.1 CSD 感应原理
图 23-2 给出 PSoC 4 的 CSD 模块框图。
图 23-2. CSD 模块框图
AMUXBUS A forms an analog
multiplexer for the sensors
Current to Digital Sigma-Delta Converter
IO Cells configured as switched
capacitance circuits for capacitance
to current conversion
GPIO Pin
Sensor 1
Compensation
IDAC
IDAC2
7 Bit
GPIO
Cell
CS1
GPIO Pin
Sensor 2
Main
IDAC
IDAC1
8 Bit
GPIO
Cell
CS2
IDAC
control
GPIO Pin
Sensor N
GPIO
Cell
Sigma-Delta
Converter
CSN
VREF
(1.2V)
CMOD Pin
Raw
counts
Converter Clock
Modulation Clock Divider
Integrating capacitor for
Sigma-Delta Converter
CMOD
High
Frequency
Clock
(HFCLK)
FSW
Switching Clock Generator
Switching clock for GPIO
switched capacitance circuits
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
227
CapSense
23.3.1.1
GPIO 单元的电容-电流转换器
当一个管脚被配置为 CSD 的用途时,GPIO 单元的开关电容电路可以将传感器的电容量转换为等效的电流值。图 23-3
给出了 GPIO 单元中开关电容电路的简化框图。
图 23-3. 开关电容简化框图
AMUXBUS AMUXBUS
A
B
VDDD
SW2
SW3
GPIO
Pin
SW4
SW1
PSoC 4 有两条模拟总线:AMUXBUS A 被用于连接 CSD 应用中的传感器;AMUXBUS B 被用于连接 CSD 应用中的
屏蔽电极(详见章节 23.3.2)。GPIO 单元的开关电容电路有两种工作模式:向 AMUXBUS A 输出拉电流(简称拉电
流模式);从 AMUXBUS A 接受灌电流(简称灌电流模式)。
图 23-4 给出了开关电容拉电流工作模式下的电路图。
图 23-4. 开关电容拉电流模式
AMUXBUS A
VDDD
ISW
VDDD
ISW
SW2
AMUXBUS A
RS
SW3
CS
ISW
开关电容电路有两个开关:SW2 和 SW 3,两个同频率的互补的方波分别用于控制这两个开关,被称为开关时钟,它的
频率为 FSW。通过开关电容电路,传感器的电容可以被等效为一个电阻 RS,如式 23-3 所示。
RS =
1
CS FSW
(23 − 2)
这里 CS 是传感器的电容,FSW 是方波的频率。
228
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
CapSense
Sigma-Delta 转换器将 AMUXBUS A 的电压维持在 VREF 附近(详见章节 23.3.1.3)。图 23-5 给出了开关电容拉电流模
式下,传感器(电容 CS)上的波形。
图 23-5. 开关电容拉电流模式中 CS 上的波形
V
SW2 CLOSED
SW3 OPEN
VDDD
SW2 OPEN
SW3 CLOSED
VREF
(1.2V)
t
0
TSW = 1/FSW
式 23-3 给出了开关电容向 AMUXBUS A 输出的拉电流的平均值
ICS = CS FSW (VDDD − V
REF
)
(23 − 3)
图 23-6 给出了开关电容电路灌电流工作模式下的电路图。图 23-7 给出了开关电容灌电流模式下,传感器(电容 CS)
上的波形。
图 23-6. 开关电容灌电流模式
ISW
AMUXBUS A
AMUXBUS A
SW3
RS
SW1
CS
ISW
ISW
图 23-7. 开关电容灌电流模式中 CS 上的波形
V
VREF
(1.2V)
SW1 OPEN
SW3 CLOSED
SW1 CLOSED
SW3 OPEN
0
t
TSW = 1/FSW
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
229
CapSense
式 23-4 给出了开关电容从 AMUXBUS A 接收的灌电流的平均值
ICS = CS FSW VREF
23.3.1.2
(23 − 4)
开关时钟发生器
如图 23-2 所示,CSD 模块的开关时钟发生器将 PSoC 4 高频时钟(HFCLK)分频,得到 CSD 模块的开关时钟,该开
关时钟用于控制开关电容电路的开关。开关时钟发生器一共有三个工作模式:固定频率,8 比特伪随机序列,12 比特
伪随机序列。通过配置发生器中分频器的分频比(Analog Switch Divider),能够得到不同频率(FSW)的开关时钟。
具体的配置公式见式 23-5。
FSW =
HFCLK
2 Analog Switch Divider
(23 − 5)
当时钟发生器工作在固定频率模式时,输出的开关时钟频率为固定的 FSW。当时钟发生器工作在伪随机序列的模式下,
输出的开关时钟频率会在一个范围内变化。式 23-6 和式 23-7 给出了频率变化范围的上限与下限。
FSW (maximum) =
HFCLK
Analog Switch Divider
(23 − 6)
FSW (minimum) =
HFCLK
m Analog Switch Divider
(23 − 7)
m 是伪随机序列的分辨率。
23.3.1.3
电流-数字转换器
电流-数字转换器 Sigma Delta 转换器将输入电流转化为数字值。它由一个 Sigma Delta 转换器,一个时钟分频器和两
个电流型数模转换器(IDAC)组成,如图 23-2 所示。其中, IDAC1 的分辨率为 8 位,称为主 IDAC;IDAC2 的分辨
率为 7 位,称为补偿 IDAC。IDAC2 能够提高 CSD 模块的性能,但在基础的操作中,它不是必须的。CSD 模块的正常
工作还需要外接一个积分电容,称为 CMOD,推荐值为 2.2nF。
在工作过程中,Sigma Delta 转换器将连接 CMOD 的模拟总线 AMUXBUS A 上的电压保持在 VREF 左右,具体如下:


IDAC 拉电流模式:当开关电容从 AMUXBUS A 接受灌电流时,IDAC 向 AMUXBUS A 输出拉电流。当二者达
到动态平衡时,总线上的电压被维持在 VREF 附近。
IDAC 灌电流模式:当开关电容向 AMUXBUS A 输出拉电流时,IDAC 从 AMUXBUS A 接受灌电流。当二者达
到动态平衡时,总线上的电压被维持在 VREF 附近。
Sigma Delta 转换器的分辨率可配置,配置范围从 8 比特到 16 比特。当 IDAC2 未被使用时,初始计数值与传感器电容
成正比。在 IDAC 拉电流模式下,初始计数值的计算公式如式 23-8 所示。
raw count = 2N
VREF FSW
CS
IDAC1
(23 − 8)
类似,IDAC 灌电流模式下,初始计算值的计算公式如实 23-9 所示。
raw count = 2N
(VDD − VREF ) FSW
CS
IDAC1
(23 − 9)
在使用 IDAC2 后,IDAC 拉电流模式下的初始计数值计算公式如式 23-10 所示。
raw count = 2N
VREF FSW
IDAC2
CS − 2N
IDAC1
IDAC1
(23 − 10)
在使用 IDAC2 后,IDAC 灌电流模式下的初始计数值计算公式如式 23-11 所示。
raw count = 2N
(VDD − VREF ) FSW
IDAC2
CS − 2N
IDAC1
IDAC1
(3 − 10)
这里,N 是 Sigma Delta 转换器的分辨率,IDAC1 是 IDAC1 的电流值,IDAC2 是 IDAC2 的电流值。
230
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
CapSense
23.3.1.4
模拟多路器
在同一时刻,Sigma Delta 转换器只能够扫描一个传感器。通过一个模拟的多路器,某个 GPIO 单元上的传感器被连接
到 Sigma Delta 转换器的输入,如图 23-1 所示。模拟总线 AMUXBUS A 和 GPIO 单元的开关(如图 23-3 中的 SW 3)
共同组成了这个模拟多路器。
23.3.2 屏蔽电极
PSoC4 的 CapSense 支持屏蔽电极,以完成防水和接近式感应的设计。在防水设计中,屏蔽电极与传感器保持相同的
电势。PSoC 4 的 CapSense 通过向屏蔽电极和传感器驱动相同的开关信号,以消除二者之间的电势差。
在感应传感器电路中,Sigma Delta 转换器将模拟总线 AMUXBUS A 上的电压维持在 VREF 附近。GPIO 单元通过切换
开关将传感器周期性的连接到 AMUXBUS A 和电源轨上(VDD 或者地,取决于开关电容工作在拉电流模式或者灌电流
模式)。屏蔽电路工作情况类似,此时用到的模拟总线为 AMUXBUS B。
针对不同电容值的屏蔽电极应用,为了将 AMUXBUS B 的电压保持在 VREF 附近,有两种不同的配置方法。
当屏蔽电极的电容值小于 200pF 时,一个 VREF 电压缓冲器用于驱动 AMUXBUS B,如图 23-8 所示。当屏蔽电极的电
容 CSHIELD 为 60pF 左右时,外接积分电容 CSH_TANK 的推荐值为 2.2nF。
图 23-8. VREF 电压缓冲器驱动 AMUXBUS B
Shield Tank
Capacitor
(optional)
GPIO Pin
VREF
CSH_TANK
(1.2V)
GPIO Pin
VREF Buffer
GPIO
Cell
Shield
electrode
capacitance
AMUXBUS B
(Always kept at VREF)
CSHIELD
Shield Electrode
当 CSHIELD 的电容值超过 200pF 时,连接 CSH_TANK 的 GPIO 单元被用于驱动 AMUXBUS B,如图 23-9 所示。PSoC 4
中只有某些固定 GPIO 单元有这样的驱动能力,详细信息请参见 PSoC 4 数据手册中的管脚分布。
图 23-9. GPIO 单元驱动 AMUXBUS B
GPIO cell precharge
CSH_TANK Pin
Shield Tank
Capacitor
CSH_TANK
GPIO Pin
GPIO
Cell
Shield
electrode
capacitance
AMUXBUS B
(Always kept at VREF)
CSHIELD
Shield Electrode
23.3.3 CMOD 的预充电
当 CSD 模块第一次被使能时,CMOD 上的电压初始值为 0。在工作过程中,CMOD 的电压会被缓慢的充到 VREF,充电电
流来自于 IDAC 或者开关电容电路。该充电过程很缓慢,因为 CMOD 是一个较大的电容。
为了加快 CSD 模块的初始化,可以对 CMOD 进行预充电,令它的电压迅速达到 VREF。预充电的方法共有两种:
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
231
CapSense


232
利用 VREF 电压缓冲器预充电:CMOD 首先被连接到 VREF 电压缓冲器上进行预充电,预充电结束后,CMOD 被断
开。当屏蔽电极被使能时,CMOD 通过 AMUXBUS B 连接到 VREF 电压缓冲器上进行预充电;当屏蔽电极被禁
止时,CMOD 通过 AMUXBUS A 连接到 VREF 电压缓冲器上进行预充电。
利用 GPIO 单元预充电:此时连接 CMOD 的 GPIO 单元被用于为 CMOD 充电,这种方法的充电速度更快。PSoC
4 中只有某些固定 GPIO 单元有这样的驱动能力,详细信息请参见 PSoC 4 数据手册中的管脚分布。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
CapSense
24 温度传感器
PSoC4有一个片上的温度传感器,用于测量芯片内部温度。这个温度传感器是一个三级管,配置成二极管模式。其基
本原理是利用基极结电压(Vbe)的温度依赖性来测量温度。
24.1
特性
这个温度传感器具有以下特性:
■
■
■
-40ºC to +100ºC 范围内有± 5 ºC 精度
0.5 ºC/LSB 分辨率
10 µS 的稳定时间
24.2
工作原理
图 24-1. 温度传感器工作机制
Ibias = 2.5 µA
Vb
Vplus
SAR-MUX
Vminus
POS
SAR-ADC
NEG
CPU
REF
vssa_kelvin
Vref=1.024 V
温度传感器
在一个集电极电流恒定和集电极 - 基极电压为零时,双极结型晶体管(BJT)的基极 - 发射极电压(Vbe)具有很强
的温度依赖性,且温度和 Vbe 的关系基本呈线性。这样用 SAR ADC 的单端,无符号模式读出 Vbe 后,用如下的一个
简单的线性公式就可以计算出温度,如图 24-2 所示。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
233
温度传感器
图 24-2 温度传感器工作机制
Bandgap
Current
Ibias = 2.5 µA
Control signal 1
Vb (Vc)
POS
Vplus
SARMUX
Temperature
Sensor
SARADC
NEG
Vminus
CPU
REF
Control signal 2
Vref=1.024 V
vssa_kelvin
Legend:
Control Signal 1 : sarmux_temp_vplus
Control Signal 2: sarmux_vssa_kelvin_vminus
读到 SAR ADC 的输出并在软件中进行校正后,可以通过以下线性公式得到温度。
Temp = A × Vbe + B
注意:A 和 B 是在出厂的时候存在闪存中的 16 位常数。用户不能改变它们的值。
■
“A”的值取决于 PSoC 4 系列特性,对于所有该系列的芯片都是都一个恒定的常数。储存在 PSoC creator 定义的寄
存器 CYREG_SFLASH_SAR_TEMP_MULTIPLIER 中(内存地址:0x0FFFF164)。两个十六位的定点数(A 与 Vbe
数模转换结果)相乘,乘积是一个 32 位的定点数(16.16)。
■
“B”的值取决于每块芯片的生产流程中各种变量和实际的偏置电流,所以每块芯片都会不同。储存在 PSoC creator
定义的寄存器 CYREG_SFLASH_SAR_TEMP_OFFSET 中(内存地址:0x0FFFF166)。B 将被乘以 1024 得到一个
32 位定点数的乘积(16.16)。
■
“Temp”(温度)以 32 位的定点数(16.16)表示,高 16 位是温度的整数部分,低 16 位是小数部分。32 位的温度
值右移后可得到温度的整数值。例如,0x1E5DFC 表示 30.36713ºC;0xFFFD09D2 表示-2.96164ºC。
24.3
温度传感器配置
SAR MUX 中的开关不仅可以将 SAR ADC 的输入选择为温度传感器的输入,而且选中的同时将会使能温度传感器,这
是通过偏置电流来实现的。如图 24-3 所示,通过 SAR ADC 定序器(sequencer),软件(firmware),数字互联信号
(DSI)都可以将温度传感器的输出连到 SAR ADC 的正端输入。详情请见:19.3.13 温度传感器配置。
234
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
温度传感器
图 24-3. 温度传感器输出连接到 SARADC
S
A
R
M
U
X
SW17
SW16
注意:温度传感器不适用于 SAR ADC 的差分模式(转换结果不确定),只能用单端模式。SAR ADC 的参考源只能从
内部的 1.024V 来。
24.4
算法
1. 使能 SARMUX 和 SARADC。
2. 将 SARADC 配置成单端模式,SARADC 的负端接地(强制)。配置 SARADC 电压参考为内部精确参考电压
1.024V。SARADC 的输出范围为 0 到 2048(12-bit 分辨率)。
3. 配置 SARMUX 使 SARADC 的输入来自温度传感器,正确配置的同时,温度传感器会自动使能。
4. 读取 SARADC 的输出值。
5. 从 CYREG_SFLASH_SAR_TEMP_MULTIPLIER 中获取 A 的值,从 CYREG_SFLASH_SAR_TEMP_OFFSET 中
获取 B 的值。
6. 利用公式:Temp = A × Vbe + B 计算温度
■
例如:A = 0xBC4B,B = 0x65B4
■
假设 SARADC (Vbe) 输出是 0x595
■
用软件做如下计算:
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
235
温度传感器
A 乘以 Vbe
1.
■
0xBC4B × 0x595 = (-17333)10 × (1429)10 = (-24768857)10
2. B 乘以 1024
■
0x65B4× 0x400 = (26036)10 × (1024)10 = (26660864)10
3. 将第一步和第二部的结果相加
4. (-24768857)10 + (26660864)10 = (1892007)10 = 0x1CDEA7
5. 温度整数值(高 16 位)= 0x001C = (28)10
6. 温度小数值(低 16 位)= 0xDEA7 = ( 0.86974)10
7. 结合第 4,第 5 步,Temp = 28.86974°C
236
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
G 部分:编程和调试
这部分包括以下章节:
■
编程和调试接口 第 238 页
■
非易失性存储器编程 第 244 页
系统架构:
编程和调试系统框图
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
237
25 编程和调试接口
PSoC4 可以通过外部设备进行编程/调试,这个设备可以是 Cypress 提供的编程/调试器,或者是第三方支持 PSoC4 编
程/调试的工具。PSoC4 的编程/调试采用标准的串行线调试(SWD)接口。
25.1
■
■
■
特性
通过 SWD 支持编程、调试
调试支持四个硬件断点(breakpoint)和两个数据观察点(watchpoint)
调试中可以访问到系统中所有的存储器、外设寄存器和 CPU 内部寄存器,包括 CPU 内核
25.2
功能介绍
图 25-1 显示了 PSoC4 编程/调试接口的系统框图。Cortex M0 的调试和访问端口(DAP)可以认为是 PSOC 4 的编程
和调试接口。外部的编程器或调试器(以下引用为主机)通过两线的 SWD 接口与 DAP 通讯 - 包括一个双向数据线
(SWDIO)和一个时钟线(SWDCK)。SWD 接口通过高速 IO 矩阵开关(HSIOM)与 PSoC4(以下引用为目标器件)
内部的 DAP 通讯。HSIOM 是一些多路复用开关,通过 HSIOM,任何 GPIO 引脚都可以复用多种功能,即将 GPIO 与
不同的模块相连,比如 LCD,CapSense 等等。
图 25-1. 编程/调试接口
PSoC 4
ARM Cortex-M0 subsystem
SWDCK
SWDIO
Cortex-M0 DAP
HSIOM
Host Device
SWD
Debug Port (DP)
Cortex-M0 CPU
AP Access
AHB
DAP
AHB
Access Port (AP)
AHB
Flash
238
SPC Interface
AHB
SROM
SRAM
Peripheral
Modules
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
编程和调试接口
DAP 通过 AHB 与 Cortex M0 CPU 通讯。AHB 是 PSoC4
内部的系统互连协议。通过它,AHB 主机可以访问存储
器、外设寄存器。PSoC4 内部有两个 AHB 主机 - 一个
是 ARM cortex M0 CPU 内核,另一个就是 DAP。所以,
通过 DAP 外部设备可以很容易的控制整个芯片来进行编
程和调试操作。
25.3
串行线调试(SWD)接口
■
主机数据包请求 - 编程器(主机)发出一个请求到
器件:PSoC 4 芯片
■
器件应答响应(ACK)- PSoC4 发出一个应答到
主机
■
数据传输阶段 - 主机和从机的双向数据传输
当 SWDIO 数据线的主机变化时,有一个过渡期(Trn),
在此器件数据线浮空呈现高阻态。这个周期大概是 1/2
或者 1 ½个时钟周期,取决于不同的主机过渡情况。
Cortex M0 支持通过 SWD 接口进行编程和调试。SWD
协议是一个基于数据包的串行协议。从引脚上看,包括
一 个 双 向 数 据 引 脚 ( SWDIO ) 和 一 个 单 相 时 钟 引 脚
(SWDCK)。时钟总是由编程器驱动,而数据可以由编
程器或者 PSoC4 驱动。一个完整的数据传输(一个
SWD 包)包括 46 个时钟,有三个阶段:
SWD 读写数据包的时序图如图 25-2 所示。
图 25-2. SWD 读写数据包的时序图
Host Packet Request Phase
ACK[0:2]
Target ACK Phase
...
Parity
0
wdata[1]
0
wdata[0]
1
Trn (Hi-Z)
Trn (Hi-Z)
Park (1)
Stop (0)
A[2:3]
Parity
...
RnW (0)
SWDIO
APnDP
...
Start (1)
SWDCK
wdata[31]
SWD Write Packet
Host Data Transfer Phase
Host Packet Request Phase
...
Trn (Hi-Z)
ACK[0:2]
0
Parity
0
rdata[1]
1
rdata[0]
Trn (Hi-Z)
Park (1)
Stop (0)
A[2:3]
Parity
...
RnW (1)
SWDIO
APnDP
...
Start (1)
SWDCK
rdata[31]
SWD Read Packet
Target ACK and Data Transfer Phases
SWD 数据包传输过程如下:
注:地址位从低位开始传。
1. 主机数据包请求:主机驱动 SWDIO
E. 奇偶校验位用来校验 APnDP 位、RnW 位以及
ADDR 位的奇偶。如果这几位中有奇数位为 1,那
么奇偶校验位为 1,否则为 0。
A. 开始位是一次传输的开始,始终为 1。
B. APnDP 位决定了这此的传输是属于 AP 的访问
(1b1)还是 DP 的访问(1b0)。
C. 读写 RnW 位,1b1 为读 PSoC4,1b0 为写
PSoC4。
D. ADDR 位([3:2])是访问端口 (AP)或者调试
端口(DP)的寄存器选择位。具体寄存器定义见
表 25-4、表 25-5。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
如果奇偶校验失败,那么 PSoC4 就会忽略头文件;
也就不会应答(ACK = 3b111)。主机将会取消编
程操作,重启一次再试。
F. 停止位永远是 0。
G. Park 位一直 1 是。
2. ACK 位是芯片到主机的响应:目标器件(PSoC4)
驱动 SWDIO
239
编程和调试接口
ACK[2:0] 位代表目标器件给主机的相应,表示了上一
次传输的状态。详细的定义见表 25-1。
注:ACK 的传输从最低位开始。
表 25-1. SWD 传输的 ACK 响应
ACK[2:0]
SWD
OK
001
WAIT
010
FAULT
100
NO ACK
111
为高,SWD 接口会被重置。如果要回到闲置状态,
SWDIO 需要置低。
SWD 时序
当主机驱动 SWDIO 线时,新的一位在时钟 SWDCK 下
降沿的时候被写入,在时钟上升沿的时候数据被 PSoC4
(目标器件)读取。当 PSoC4 驱动 SWDIO 线的时候,
新的一位数据在时钟上升沿的时写入,主机在时钟下降
沿的时候读取数据。
SWDIO 数据的读写可见表 25-2 和图 25-2。
注意,当前的 ACK 位表示上一次传输的状态。正确
(OK)说明上一个数据包是成功的。等待(WAIT)
说明还需要一个数据阶段(详细说明如下)。错误
(FAULT)状态说明编程操作应该停止。No ACK 即
无应答。
■
■
对于一个等待响应,如果是个读操作,那么主机
会忽略在这个数据阶段读到的数据。芯片不会驱
动数据线,主机也不必检查奇偶校验位。
对于一个等待响应,如果是个写操作,那么这个
数据阶段会被 PSoC4 忽略。但是主句还是会发
出写的数据以及数据的奇偶校验位以完成这个数
据包。
表 25-2. SWDIO 位读写时序
SWDCK 边沿
SWD 数据包阶段
主机数据包请求
主机传输数据
目标器件(PSoC4)应答
目标器件(PSoC4)数据传输
上升沿
下降沿
主机写
目标器件读
主机读
目标器件写
ACK 细节:
当前的 ACK 位表示上一次传输的状态。正确(OK)
说明上一个数据包是成功的。等待(WAIT)说明还需要
一个数据阶段(详细说明如下)。错误(FAULT)状态
说明编程操作应该停止。No ACK 即无应答。具体见
表 25-3。
表 25-3. SWD 传输的 ACK 响应
ACK[2:0]
等待响应意味着 PSoC4 正在处理上一次的传输。
主机最多可以尝试 4 次。如果 4 次以后仍然不能收到
正确(OK) 响应,那么这次编程操作应停止,重新
再试。
■
错误(FAULT)状态说明编程操作应该停止,通
过重启再次尝试通讯。
3b001
WAIT
3b010
FAULT
3b100
NO ACK
3b111
■
对于一个等待响应,如果是个读操作,那么主机会忽
略在这个数据阶段读到的数据。芯片不会驱动数据线,
主机也不必检查奇偶校验位。
■
对于一个等待响应,如果是个写操作,那么这个数据
阶段会被 PSoC4 忽略。但是主机还是会发出写的数
据以及数据的奇偶校验位以完成这个数据包。
■
等待响应意味着 PSoC4 正在处理上一次的传输。
主机最多可以尝试 4 次。如果 4 次以后仍然不能收到
正确(OK) 响应,那么这次编程操作应停止,重新
再试。
■
错误(FAULT)状态说明编程操作应该停止,通过重
启再次尝试通讯。
3. 数据传输阶段:SWDIO 由主机或这目标器件驱动
A. 读写数据,低位优先
B. 数据阶段包括奇偶校验,如果有奇数个 1,结果为
1,否则结果为零。
■
对于一个读数据包,如果主机检查到有奇偶检验
错误,那么编程终止,重新通讯。
■
对于一个写数据包,如果 PSoC 4 检查到主机发
出的数据有奇偶检验错误,那么它会在下一个数
据包产生一个错误响应(FAULT)。
根据 SWD 协议,主机可以在两个数据包中间间隔任
意数量的 SWD 时钟周期(SWDIO 为低)。如果时钟
不是在闲置状态的话,推荐间隔三个或更多的时钟周
期。如果 SWDIO 在连续的五十个 SWDLK 时钟周期
240
SWD
OK
过渡(TrN)阶段:
在数据包请求阶段和接收应答响应阶段之间,有一个过
渡阶段(即第一个 TrN 周期值),它同样存在于写操作
的接收应答阶段和数据阶段之间(即第二个 TrN 周期),
如图 25-2 所示。在 SWD 协议中,TrN 阶段用于主机和
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
编程和调试接口
芯片在 SWDIO 线上改变驱动模式。在数据包请求后的
第一个 TrN 阶段时,芯片开始在 SWDIO 线上输出应答
信号(ACK)。这样保证了主机可以在下一个下降沿收
到应答信号(ACK)。第一个 TrN 阶段值只有½ 时钟周
期。第二个 TrN 阶段周期长度为 1½ 时钟周期,在 TrN
这阶段主机和 PSoC4 都不能驱动 SWDIO 线(为高阻态,
如图 25-2 所示,标记为 z)。
置寄存器、DAP 标识代码等等。访问端口包括了让外部
工具访问 Cortex M0DAP-AHB 接口的寄存器。一般来说,
DP 中的寄存器用来做一次性的配置或者错误识别(详细
说明如下),而 AP 的寄存器会在编程、调试操作中使用。
完整的调试接口架构介绍请见 ARM® Debug Interface
v5 Architecture Specification。
调试端口寄存器
25.4.1
25.4 Cortex M0 调试和访问端口
(DAP)
Cortex M0 编程和调试接口 DAP 包括一个调试端口(DP)
和一个访问端口(AP)。调试端口实现了与外部主机通
讯的 SWD 接口协议的状态机。它也包括了访问端口的配
用来编程/调试的 Cortex M0 DP 寄存器以及相应的 SWD
地址位如表 25-4 所示。在 DP 的访问时,APnDP 位始
终为 0。两个地址位用来选择不同的 DP 寄存器。注意,
对于同一个地址位,读和写访问不同的寄存器。DP 寄存
器 的更 加详 细信息 请参见 ARM® Debug Interface v5
Architecture Specification。
表 25-4. 主要调试端口(DP)寄存器
APnDP
(1-bit)
寄存器
地址
A[3:2]
访问
(R/W)
全称
寄存器功能
ABORT
0(DP)
2’b00
0(W)
AP 停止寄存器
这个寄存器用来强制 DAP 停止,同样也用来清除错
误和一些标志位。
IDCODE
0(DP)
2’b00
1(R)
识别代码寄存器
这个寄存器存放 Cortex M0 CPU 的 SWD 识别号:
0x0BB11477。
CTRL/STAT
0(DP)
2’b01
X(R/W)
控制和状态寄存器
这个寄存器可以控制 DP 也可以查看 DP 的状态
SELECT
0(DP)
2’b10
0(W)
AP 选择寄存器
这个寄存器可以用来选择现在的访问端口(AP)。
在 PSoC4 中,只有一个访问端口可以和 DAP AHB
通讯。
RDBUFF
0(DP)
2’b11
1(R)
读缓冲寄存器
这个寄存器存放了最后一个 AP 读操作的结果。
25.4.2
访问接口寄存器
用于编程/调试的几个主要 Cortex M0 AP 寄存器以及相应的 SWD 地址位如表 25-5 所示。在 AP 访问时 APnDP 位在此
时始终为 1。两个地址位用来选择不同的 AP 寄存器。
表 25-5. 主要访问端口寄存器
寄存器
APnDP
(1-bit)
地址
A[3:2]
访问
(R/W)
全称
寄存器功能
CSW
1(AP)
2’b00
X(R/W)
控制和状态/字寄存器
这个寄存器配置和控制 PSoC4 内存系统的访问
TAR
1(AP)
2’b01
X(R/W)
传输地址寄存器
这个寄存器存放了需要访问的 32 位内存地址
DRW
1(AP)
2’b11
X(R/W)
数据读/写寄存器
这个寄存器保留了在 TAR 寄存器中指定的地址的
读写数据。
25.5
PSoC4 的编程
对 PSoC4 编程步骤如下:
1. 外部工具获取 SWD 接口
2. 进入编程模式
3. 执行编程流程:比如说芯片 ID 检测、闪存编程、
闪存验证和数据校验
下文会有简单的介绍。详细的内容,比如编程算法、时
序规范以及编程的硬件连接,请参看 PSoC 4 Device
Programming Specifications
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
25.5.3
端口获取
25.5.3.1
主/次 SWD 端口
器件编程的第一步是获取 PSoC4 的 SWD 端口。PSoC4
有两组引脚都可以做 SWD 接口 -P3[2]( SWDIO),
P3[3] ( SWDCK ) 和 P3[6] ( SWDIO ) , P3[7]
(SWDCK)。P3[2],P3[3] 为主 SWD 接口,P3[6],
P3[7]为次 SWD 接口。主 SWD 接口在所有的 PSoC4 封
装中都有,而次 SWD 接口只有在较大的封装中有。具体
引脚信息请参见 PSoC 4 芯片手册。
241
编程和调试接口
特权寄存器的 SWD_CONFIG 寄存器用来选择哪个接口
做实际的编程/调试接口。注意,任意编程/调试过程中,
只能有一个 SWD 接口。默认出厂配置编程接口是选择主
25.5.3.2
SWD 接口。所以,如果要选择次 SWD 接口,那么必须
用主 SWD 接口先做一个编程,使能次 SWD 接口,此后
就可以用次 SWD 接口进行编程和调试。
端口获取过程
每次编程时,编程工具会先通过外部重置引脚(XRES)做一次系统重置。然后,编程器会在这个端口获取阶段发出一
个 SWD 连接序列,来连接 DAP 中的 SWD 接口。该序列的伪代码如下:
代码 1 SWD 端口获取伪代码
ToggleXRES(); // Toggle XRES pin to reset device
//Execute ARM’s connection sequence to acquire SWD-port
do
{
SWD_LineReset(); //perform a line reset (50+SWDCK clocks with SWDIO high)
ack = Read_DAP ( IDCODE, out ID); //Read the IDCODE DP register
}while ((ack != OK) &&time_elapsed< 1.5 ms);
//retry connection until OK ACK or timeout
if (time_elapsed>= 1.5 ms) return FAIL; //check for acquire time out
if (ID != CM0_ID) return FAIL; //confirm SWD ID of Cortex-M0 CPU. (0x0BB11477)
在上面的伪代码中,SWD_LineReset()是一个标准的
重置调试端口的 ARM 命令,需要至少 50 个 SWDCK 周
期(SWDIO 为高)。结束重置过程必须通过维持至少一
个 SWDCK 周期的 SWDIO 为低。这个过程同步了编程
器和芯片。Read_DAP()是指读 IDCODE 寄存器。重
置和读 IDCODE 这个过程会一直持续,直到收到 OK
ACK 或者发生超时(1.5ms)。一旦在规定时间内收到
OK ACK 并且读取到的 IDCODE 与 Cortex M0 DAP 中的
值相匹配,即认为 SWD 端口获取成功。
25.5.4
进入 SWD 编程模式
一旦获取了 SWD 端口,编程器就必须在一定时间内进入
器件编程模式,这可以通过在 TEST_MODE 寄存器中设
置 TEST_MODE 位来完成。在器件进入编程模式时,需
要配置好调试端口。进入编程模式的伪代码和时序要求
请参见:PSoC4 device programming specification。
25.5.5
执行 SWD 编程模式
芯片一旦进入编程模式,外部编程器就可以开始发送
SWD 数据包序列,进行编程操作,如闪存擦除、闪存编
程、数据校验等等。这个编程例行过程会在另一章节
Non Volatile Memory Programming 中 阐 述 。 PSoC4
device programming specifications 中会阐述如何产生这
些例行过程。
242
25.6
PSoC4 SWD 调试接口
PSoC4 调试接口的特性可以分为两类:侵入型调试和非
侵入型调试。侵入性调试包括停止、单步、断点和数据
观察点。非侵入型的调试包括指令地址分析、器件存储
器(闪存、SRAM、其他外设存储器)访问。
PSoC4 中有三种主要的调试子系统,如下:
1. 调试控制和配置寄存器
2. 断点单元(BPU)- 提供了断点支持
3. 调试观察点和跟踪(DWT)- Cortex M0 仅支持数
据观察点,不支持跟踪。
外部调试器通过 DAP 与 PSoC4 通讯,而 DAP 则通过
AHB 访问以上几个调试子系统中的寄存器。
不同的调试子系统下面会解释,如需完整的调试架构介
绍,请参见 ARMv6-M Architecture Reference Manual。
25.6.1 调试控制和配置寄存器
调试控制和配置寄存器用来执行固件的调试。几个重要
的控制、配置、状态寄存器和它们的关键功能如下,完
整 的 寄 存 器 位 定 义 请 参 见 : ARMv6-M Architecture
Reference Manual。
■
调试停止寄存器和状态寄存器(DHCSR)- 这个寄
存器包括了很多操作的控制位,比如使能调试,停止
CPU,进行单步操作等等,以及处理器的调试状态位。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
编程和调试接口
■
错误状态寄存器(DFSR)- 这个寄存器提供了顶层
的调试事件发生的原因。这包括由于 CPU 停止、断
点事件、观察点事件而引起的调试事件。
■
内核寄存器选择寄存器(DCRSR)- 这个寄存器选
择了编程器选择 Cortex M0 CPU 里的哪个通用寄存
器做读写操作。
■
内核寄存器数据寄存器(DCRDR)- 这个寄存器存
储了在 DCRSR 中选择的寄存器读出或者写入的数据。
■
调试异常和监督控制寄存器(DEMCR)- 这个寄存
器包括全局调试观察点(DWT)模块的使能位、重
置向量捕捉和错误异常硬捕捉使能位。
25.6.2
断点单元
断点单元(BPU)提供了断点功能。除了 4 个硬件断点,
还可以用 Cortex M0 的 BKPT 指令生成任意个软件断点。
BPU 中有两种寄存器。
■
断点控制寄存器 BP_CTRL:用来使能 BPU,同时存
储着调试系统支持的硬件断点的个数(对于 CM0
CPU 来说是 4 个)
■
断点比较寄存器(BP_COMPx):每个硬件断点都
有一个断点比较寄存器,包括了这个断点的使能位、
比较地址值、以及触发调试断点发生的匹配条件。典
型应用是,当指令运行地址与比较地址值匹配时,处
理器停止,产生调试断点。
25.6.3
25.6.4
调试 PSoC4
外部的调试器通过访问调试控制和配置寄存器、BPU 中
的寄存器以及 DWT 中的寄存器来调试 PSoC4。所有的
访问都是通过 SWD 接口来进行的, CM0 DAP 中的
SWD 的调试 端口( SW-DP)通过 DAP-AHB 接 口将
SWD 数据包转化成合适的寄存器访问。
调试的第一步是获取 SWD 端口,获取的过程包括一次
SWD 的重启和通过 SWD 接口进行的 DAP SWDID 的读
取。当读到正确的 DAP SWDID 信号时,就可认为成功
获取了 SWD 端口。为了顺利地调试,相应的引脚不能被
其他任务占用。PORT_SEL3 寄存器可以将这些引脚设
为 SWD 接口专用或者其他用途如 LCD,GPIO。如果需
要调试,这些引脚必须设置成 SWD 专用;如果仅仅需要
编程,那么他们可以被重新设置成其他用途,因为编程
和代码执行不会同时进行。
一旦获取到 SWD 端口,外部的调试器会置位 DHCSR
寄存器中的 C_DEBUGEN 位来使能调试。然后,通过写
入调试系统中的相应位来进行不同调试操作,如单步调
试、停止、断点配置、观察点配置。
调试操作同时取决于整体的器件保护设置,只有开放模
式支持调试,在器件保护这个章节中会详述。
在休眠或者停止模式中,外部调试器将失去与器件的连
接。一旦器件重新进入到活动模式,就会重新建立连接。
器件从活动模式进入到睡眠或者深度睡眠时,调试器不
会断开连接。
数据观察点和跟踪(DWT)
观察点(Watchpoint)支持访问数据地址和 PC 指令地
址。PSoC4 CM0 核心不支持跟踪(Trace)。DWT 支
持两个观察点;PC 采样寄存器可采样当前程序指针的值,
提供了一种粗略地了解代码执行情况的方法。DWT 中重
要的寄存器如下所示。
■
数据观察点比较寄存器 DWT_COMPx 用于储存产生
观察点的比较器所需要的比较值。每个观察点都有相
对应的 DWT_COMPx 寄存器。
■
数据观察点屏蔽寄存器 DWT_MASKx 用于储存被屏
蔽的地址范围的大小,这些地址不会产生观察点。
■
数据观察点功能寄存器 DWT_FUNCTIONx 用于存储
实际触发观察点产生的原因。一个观察点可能是一个
程序指针 PC)观察点或者数据地址读写访问观察点。
这个寄存器还有一个位会标记是否有观察点产生,如
产生时就会被置位。
■
数据观察点比较器 PC 采样寄存器 DWT_PCSR 用来
采样当前程序指针的值,通过这个寄存器可以大致了
解代码的执行情况。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
243
非易失性存储器编
程
26 非易失性存储器编程
非易失性存储器编程是指对 PSoC 4 中闪存(Flash)的编程。本章节介绍了器件编程的部分功能,如擦除、写入、编程
和校验等。用户可借助 Cypress 公司提供的编程器或其他第三方编程器,使用这些功能将十六进制的应用程序写入
PSoC 4 器件中。此外,在执行加载引导程序(bootloader)时,用户也可使用这些功能来更新部分闪存。
26.1
特性
 支持通过调试访问端口(DAP)和 Cortex-M0 CPU 进行编程
 支持通过 Cortex-M0 CPU 对闪存进行阻塞和非阻塞的擦除和编程操作
26.2
功能介绍
编程相关的所有操作均是通过调用“System Call”函数来实现的;存储在 SROM 中的 System Call 函数仅可在特权模式下
才可被执行。用户没有权限对 SROM 代码进行读取或修改。System Call 的一个重要功能是对闪存进行编程,即 SROM 中
的部分 System Call 函数与系统性能控制器(SPC)接口相互通讯来完成对闪存的编程操作。调试访问端口或 Cortex-M0
CPU 调用 System Call,是通过向相应寄存器写函数操作码和参数并请求 SROM 执行相应函数来实现的。SROM 中的代码
会根据不同的函数操作码来执行相应的 System Call,并将函数执行结果写入一个寄存器。调试访问端口或 CPU 必须读
取这个寄存器来判断 System Call 函数执行的结果是成功的还是失败的。
PSoC 4 支持通过调试访问端口(DAP)和 Cortex-M0 CPU 两种方式对闪存进行编程。外部编程器可通过向调试访问端口
(DAP)发送命令来对 PSoC 4 中的闪存进行编程,其间的通讯是基于串行调试(SWD)协议。用户使用外部编程器对
PSoC4 进行编程的步骤请见 PSoC 4 Device Programming Specifications 文档。Cortex-M0 CPU 通过 AHB 接口访问相关寄存
器也可对闪存进行编程;这种编程方式经常用于通过引导加载程序(bootloader)来更新部分闪存或在应用程序中完成
其他应用需求,如更新存储在闪存中的查找表。对闪存的所有写操作,无论是来自调试访问端口还是 CPU,均是通过系
统性能控制器(SPC)接口来完成的。
26.3
System Call 的实现
每个 System Call 函数均包含如下部分:
 操作码:唯一的 8 位函数操作码
 参数:每个 System Call 函数均包含 key1 和 key2 两个字节参数:
key1 = 0xB6
key2 = 0xD3 + 函数操作码
传递这两个参数是为了确保用户代码准确调用相应的 System Call 函数。如果参数 key1 和 key2 不正确,则 SROM 不
执行任何函数,并返回一个错误码。除了上面的两个参数,部分 System Call 函数还需要其他参数。
 返回值:部分 System Call 函数在被执行完成时会返回一个值,比如执行芯片信息(Silicon ID)或校验等 System Call
函数。
 完成状态:每个 System Call 被调用完成后,其执行状态会被存放在一个寄存器中。CPU 或调试访问端口必须读取该
状态值来判断该函数是否被成功执行,如果失败,可用于分析失败原因。
244
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
非易失性存储器编程
26.4
阻塞和非阻塞 System Call
当通过调试访问端口调用 System Call 时,器件处于编程
模式,CPU 处于停止状态。当通过 CPU 调用 System Call
函数时,基于函数执行的特点,可将其分为阻塞
(Blocking System Call)和非阻塞(Non-blocking System
Call)两种。
 当 调 用 阻 塞 的 System Call 时 , CPU 除 了 执 行 此
System Call 外,不能并行地执行其他任何任务。当一
个 System Call 函数被一个进程或线程调用时,CPU 的
执行会跳转到 SROM 中 System Call 相应代码处执行;
一旦执行结束,原来的线程将恢复并继续执行。
 非阻塞 System Call 是指那些允许 CPU 并行执行一些
其他的代码;System Call 执行完成后将通过一个中断
告知 CPU。
这里仅有三个非阻塞的 System Call 函数:非阻塞写行
(Non-Blocking Write Row)、非阻塞编程行(Non-Blocking
Program Row)和重新执行非阻塞(Resume NonBlocking)。其他 System Call 函数均为阻塞函数。
因此,在写和编程闪存时,如还需要执行其他代码,可
以使用这些非阻塞 System Call 函数。当对闪存进行擦除
或编程操作时,CPU 不能运行闪存中的代码,因此,只
有运行在 SRAM 中的代码才可以调用非阻塞函数。如果
非阻塞函数被运行于闪存中的代码调用,运行结果不确
定;当执行闪存取代码操作时,可能会返回一个总线错
误,并触发一个 HardFault 异常。
系统性能控制器(SPC)是 PSoC 4 的一个重要模块,其可
产生为闪存进行擦除和编程操作所需的有序高电压脉冲。
当 SRAM 中的代码调用非阻塞写和非阻塞编程函数时,
一旦写或编程的某个子操作完成后,系统性能控制器的
定时器将产生一个中断。系统性能控制器中断服务程序
调用重新执行非阻塞函数来完成 System Call 中的后续步
骤。由于在执行非阻塞写或非阻塞编程函数时,CPU 仅
可在 SRAM 中执行代码,所以系统性能控制器的中断服
务程序必须放在 SRAM 中运行。在调用非阻塞编程函数
时,系统性能控制器中断会被触发 1 次,从而调用 1 次
重新执行非阻塞函数;而在调用非阻塞写函数时,系统
性能控制器中断会被触发 3 次,从而调用 3 次重新执行
非阻塞函数。
使用非阻塞写函数的伪示例代码,请见非阻塞 System
Call 伪代码章节。
26.4.1 调用 System Call 的步骤
调用 System Call 的步骤如下:
1. 写函数参数:下面给出了两种写函数参数(KEY1,
KEY2,其它参数)的方法:
CPUSS_SYSARG 中参数的字节顺序必须符合相应函
数的要求(见相关 System Call 函数表)。
b.) 向静态随机存储器(SRAM)中写入函数参数:
此方法被用于将参数存放在 SRAM 中的 System
Call 函数。首先,用户将参数按函数要求依次写
入 SRAM 中指定的连续存储单元;然后,将 SRAM
中参数的起始地址,即函数的第一个参数地址,
写入寄存器 CPUSS_SYSARG。这个起始地址必须是
字对齐的(32 位);SROM 使用这个地址来读取
函数的参数。
2. 写函数操作码并启动 System Call:
用户将 8 位函数操作码写入 SYSCALL_COMMAND(CP
USS_SYSREQ[15:0])的低 8 位;其高 8 位为 0。同时
将 SYSCALL_REQ 位(CPUSS_SYSREG[31])置 1,触发
NMI 中断,来启动 SROM 中的 System Call 函数。
3. 等待 System Call 执行完成
当 SROM 开始执行 System Call 时,它会将 PRIVILEGED
位(CPUSS_SYSREQ[28])置 1;此位仅可由 SROM 中
的代码设置。当 System Call 被执行完成时,
SYSCALL_REQ 位(CPUSS_SYSREG[31])和 PRIVILEGED
位(CPUSS_SYSREQ[28])会被清除。因此,如果用户
使用调试访问端口编程,其会不停地轮询这两个位的
状态,来判断 System Call 是否已经执行完成。最大轮
询时间为 1 秒;在这个时间内,如果这两个位没有被
清零,则认为操作失败,并中止其他步骤的执行。
注意:在 system call 被执行的过程中,CPU 的应用程
序不能查询这两个位,因为此时 CPU 正在执行 SROM
中代码;应用程序仅可检查 system call 执行完成的结
果,即从 SROM 中返回的 system call 执行的结果。
4. 判断完成状态
一旦 System Call 被执行完成,SYSCALL_REQ 位
(CPUSS_SYSREG[31])和 PRIVILEGED 位
(CPUSS_SYSREQ[28])会被清除;寄存器
CPUSS_SYSARG 必须被读取,以判断 System Call 被执
行的结果是成功还是失败。从寄存器 CPUSS_SYSARG
读取的数值有如下两种:
 0xAXXXXXXX:表示 System Call 被成功执行,其中
X 表示无关值
 0xF00000YY:表示执行 System Call 失败,其中 YY
表示失败的原因,详情见表 2。
5. 读取返回信息值
部分 System Call 函数会返回一些值,如芯片信息,校
验等;CPU 或调试访问端口可从寄存器
CPUSS_SYSREG 和 CPUSS_SYSARG 中读取这些值。
a.) 向寄存器 CPUSS_SYSARG 写入函数参数:
此方法被用于将参数存放在寄存器 CPUSS_SYSARG
的 System Call 函数。写入 32 位寄存器
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
245
非易失性存储器编
程
26.5
被详细讲解,调用这些函数的步骤请参考“调用 System
Call 的步骤”。
System Call 函数
表 26-1 列出了 PSoC4 支持的 System Call 及其在不同器件
保护模式下的访问权限。如需详细了解器件保护模式,
请参考器件安全章节。每个 System Call 的信息将在表后
表 26-1. System Call 函数
注意:一些 System Call 函数不能通过 CPU 调用(见表
26-1,无“”表示不支持)。
调试访问端口的访问权限
System Call 函数
■
描述
开放
(Open)
保护
(Protected)

■
终极保护
(Kill)
CPU 访
问权限
芯片信息(Silicon ID) ■
返回器件的芯片编号、系列编号和修订编号

■
加载闪存字节(Load
Flash Bytes)
将数据加载到页锁存缓冲器中,以备后续编程进入
闪存行,最小单位为 1 个字节,最大为闪存行的大
小(128 个字节)。


■
写行(Write Row)
先擦除,然后用页锁存缓冲器中的数据对闪存的某
行进行编程


■
编程行(Program Row)■
用页锁存缓冲器中的数据对闪存的某行进行编程


■
擦除所有(Erase All)
擦除闪存阵列中所有用户代码和特权闪存(sFlash)
中闪存行级保护数据

■
校验(Checksum)
校验整个闪存(用户区和 sFlash)或校验闪存行


■
写保护(Write
Protection)
此功能可将闪存行级保护设置和芯片级保护设置编
程到 sFlash 的第 0 行中。


非阻塞写行(NonBlocking Write Row)
擦除,然后用页锁存缓冲器中的数据对闪存的某行
进行编程。在编程和擦除脉冲进行时,用户可从
SRAM 执行代码。此功能只可通过 CPU 访问。

非阻塞编程行(NonBlocking Program Row)
用页锁存缓冲器中的数据对闪存的某行进行编程。
在编程和擦除脉冲进行时,用户可从 SRAM 执行代
码。此功能只可通过 CPU 访问。

重新执行非阻塞
(Resume Non-Blocking)
重新执行一个非阻塞写行或非阻塞编程行。此功能
只可通过 CPU 访问。

■
■


26.5.1 芯片信息
在调用芯片信息(Silicon ID)函数时,要将其参数写入寄存器 CPUSS_SYSARG,而非 SRAM。这个函数被成功调用后将返
回 12 位的系列编号、16 位芯片编号、8 位修订编号及当前器件的保护模式;这些值分别会被写入到寄存器
CPUSS_SYSARG 和 CPUSS_SYSREQ 中。
参数:
地址
写入值
描述
寄存器 CPUSS_SYSARG
位 [7:0]
0xB6
Key1
位[15:8]
0xD3
Key2
位[31:16]
0x0000
保留
位 [15:0]
0x0000
“Silicon ID” 操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSREQ
246
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
非易失性存储器编程
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [7:0]
Silicon ID 低 8 位
位 [15:8]
Silicon ID 高 8 位
位 [19:16]
次修订编号
位 [23:20]
主修订编号
位 [27:24]
0xXX
保留
位 [31:28]
0xA
成功状态码
位 [11:0]
系列编号
PSoC 4 的系列编号(Family ID)是 0x093
位 [15:12]
芯片保护
请参考器件安全章节
位 [31:16]
0xXXXX
保留
关于 Silicon ID 值,请参考芯片手册
修改编号值请参考器件编程规范
寄存器 CPUSS_SYSREQ
26.5.2 加载闪存字节
通过调用加载闪存字节(Load Flash Bytes)函数,可将数据加载到页锁存缓冲区;然后,再通过调用其他函数将该数据
编程至闪存行。加载的最小值为 1 个字节,最大值为闪存行的最大字节数(128 个字节)。加载到页锁存缓冲器的数据
从输入参数“字节地址(Byte Addr)”所指定的位置处开始存放。该数据在页锁存缓冲器中会被保存,直到一个编程操作
被执行(编程操作会清除页锁存器中的内容)。加载闪存字节函数的参数及将被加载到页锁存缓冲器的数据,均会被写
到 SRAM 中;而在 SRAM 中的起始地址数据会被写入寄存器 CPUSS_SYSARG。
注意:参数起始地址应该是一个字对齐的地址。
参数:
地址
写入值
描述
SRAM 地址- 32’hYY (32 位、字对齐的 SRAM 地址)
位 [7:0]
0xB6
Key1
位 [15:8]
0xD7
Key2
位 [23:16]
字节地址(Byte Addr)
页锁存缓冲器中写入数据的起始地址
0x00 – 锁存器的第 0 字节
0x7F – 锁存器的第 127 字节
闪存宏(Flash Macro)选择
0x00 – 闪存宏 0
0x01 – 闪存宏 1
注意:PSoC 4 仅包含 1 个闪存宏,即闪存宏 0;每个闪存
行大小为 128 个字节。
位 [7:0]
加载大小
写到页锁存缓冲器中的字节大小
0x00 – 1 个字节
0x7F – 128 个字节
位 [15:8]
0xXX
保留
位 [23:16]
0xXX
保留
位 [31:24]
0xXX
保留
位 [31:24]
SRAM 地址- 32’hYY + 0x04
SRAM 地址- 从 (32’hYY + 0x08) 至 (32’hYY + 0x08 + 加载大小)
字节 0
数据字节[0]
加载的第一个数据字节
.
.
.
.
.
.
字节(加载大小-1)
数据字节[加载大小-1]
加载的最后一个字节
32’hYY
SRAM 的 32 位字对齐地址,其保存了函数的第一个参数
(Key 1)
寄存器 CPUSS_SYSARG
位 [31:0]
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
247
非易失性存储器编
程
地址
写入值
描述
寄存器 CPUSS_SYSREQ
位 [15:0]
0x0004
“加载闪存字节”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:0]
0xXXXXXXX
保留
26.5.3 写行
写行(Write Row)函数会擦除、并用页锁存缓冲器中的数据对指定的闪存行进行编程。如果页锁存缓冲器中的所有数
据都是 0,则跳过编程。此函数的参数保存在 SRAM 中,其起始地址会被写入寄存器 CPUSS_SYSARG 中。闪存行被编程
后,此函数将清除页锁存缓冲区中的内容。
使用要求:在使用这个函数之前,用户必须先调用加载闪存字节函数。此函数仅可对非保护状态的指定闪存行执行写
操作。
参数:
地址
写入值
描述
SRAM 地址: 32’hYY(32 位、字对齐的 SRAM 地址)
位 [7:0]
0xB6
Key1
位 [15:8]
0xD8
Key2
位 [31:16]
行编号
被写入的行编号
0x0000 – 第 0 行
32’hYY
SRAM 的 32 位字对齐地址,其保存了第一个
函数参数(Key 1)
位 [15:0]
0x0005
“写行”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSARG
位 [31:0]
寄存器 CPUSS_SYSREQ
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:0]
0xXXXXXXX
保留
26.5.4 编程行
编程行(Program Row)函数用页锁存缓冲器中的数据对指定的闪存行进行编程。如果页锁存缓冲器中的所有数据都是
0,则跳过编程。闪存行被编程后,此函数将清除页锁存缓冲区中的内容。在调用这个函数之前,该闪存行必须处于擦
除状态。
使用要求:在使用这个函数前,用户必须先调用加载闪存字节函数,并且指定的闪存行必须处于擦除状态。此函数仅可
对非保护状态的指定闪存行执行编程操作。
248
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
非易失性存储器编程
参数:
地址
写入值
描述
SRAM 地址: 32’hYY (32 位、字对齐的 SRAM 地址)
位 [7:0]
0xB6
Key1
位 [15:8]
0xD9
Key2
位 [31:16]
Row ID
编程闪存行的编号.
0x0000 – 第 0 行
32’hYY
SRAM 的 32 位字对齐地址,其保存了第一个函数参
数(Key 1)
位 [15:0]
0x0006
“编程行”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSARG
位 [31:0]
寄存器 CPUSS_SYSREQ
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:0]
0xXXXXXXX
保留
26.5.5 擦除所有
擦除所有(Erase All)函数会擦除闪存主阵列中的所有用户代码,以及每个闪存宏的特权闪存区第 0 行中的行级保护
数据。
使用要求:擦除所有函数仅可通过处于编程模式的调试访问端口被调用,并且芯片处于开放(Open)模式。如果芯片处于
保护(Protected)模式,用户只有通过调试访问端口调用写保护函数,将芯片的保护模式改为开放模式,才可完成擦
除所有的功能(在将芯片的保护设置从保护改为开放时,会自动执行擦除所有操作)。
参数:
地址
写入值
描述
SRAM 地址: 32’hYY (32 位、字对齐的 SRAM 地址)
位 [7:0]
0xB6
Key1
位 [15:8]
0xDD
Key2
位 [31:16]
0xXXXX
保留
32’hYY
SRAM 的 32 位字对齐地址,其保存了函数的第一个
参数(Key 1)
位 [15:0]
0x000A
“擦除所有”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSARG
位 [31:0]
寄存器 CPUSS_SYSREQ
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:0]
0xXXXXXXX
保留
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
249
非易失性存储器编
程
26.5.6 校验
校验(Checksum)函数读取整个闪存或某个闪存行,并返回读取的所有字节的算术总和(24 位)。当对整个闪存进行
校验时,校验区域其包括用户代码和 sFlash;当仅对某个闪存行进行校验时,闪存行编号将作为参数被传递。
参数:
地址
写入值
描述
寄存器 CPUSS_SYSARG
位 [7:0]
0xB6
Key1
位 [15:8]
0xDE
Key2
位 [31:16]
Row ID
选择需要校验的闪存行编号:
行编号 – 16 位闪存行编号
0x8000 – 对整个闪存进行校验
位 [15:0]
0x000B
“校验”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSREQ
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:24]
0xX
保留
位 [23:0]
校验值
对选择的闪存区校验的 24 位校验值
26.5.7 写保护
写保护(Write Protection)函数会对 sFlash 中的闪存行级
保护和芯片级保护字节进行编程。
如果闪存包含多个闪存宏,则需要对每个闪存宏中的闪
存行级保护字节分别编程。每个保护位对应一个闪存行,
每个闪存宏中行级保护字节的大小等于此闪存宏中用户
代码闪存行的数量除以 8。
芯片级保护字节(1 个字节)存储在闪存宏 0 的 sFlash 的
第 0 行的最后一个字节中。sFlash 的行与用户代码闪存区
行大小相同。
在调用写保护函数前,用户必须先调用“加载闪存字节”
函数将闪存宏的闪存行级保护字节加载到此闪存宏对应
的页锁存缓冲器中。加载闪存字节函数的参数中的起始
地址必须是 0,闪存宏编号对应需要编程的闪存宏,加载
字节的大小为此闪存宏中闪存行级保护字节的数量。然
后,调用“写保护”函数将页锁存缓冲器中的闪存行级
保护字节写入相应闪存宏的 sFlash 中。对于闪存宏 0,芯
片级保护设置将作为寄存器 CPUSS_SYSARG 的参数被编程。
参数:
地址
写入值
描述
寄存器 CPUSS_SYSARG
位 [7:0]
0xB6
Key1
位 [15:8]
0xE0
Key2
位 [23:16]
芯片保护设置值
此参数仅对闪存宏 0 有效
0x01 – 开放模式
0x02 – 保护模式
0x04 – 终极保护模式
位 [31:24]
闪存宏选择
0x00 – 闪存宏 0
0x01 – 闪存宏 1
位 [15:0]
0x000D
“写保护”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSREQ
250
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
非易失性存储器编程
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:0]
0xXXXXXXX
保留
26.5.8 非阻塞写行
非阻塞写行(Non-Blocking Write Row)函数可被 Cortex-M0 CPU 调用以非阻塞方式写某个闪存行;同时 CPU 还可在
SRAM 中执行其他代码。非阻塞 System Call 的详细介绍请见阻塞和非阻塞 System Call 章节。
非阻塞写行函数的执行 包括 3 个阶段:预编程操作、擦除和编程。预编程操会将闪存行的所有位写成‘1’,为擦除操
作做准备。擦除阶段将闪存行的每位写成‘0’。在编程阶段将写的数据写到相应闪存行。在这些操作被执行的过程中,
CPU 还可在 SRAM 中执行其他代码。
非阻塞写行函数被调用后,用户不能调用除重新执行非阻塞(Resume Non-Blocking)函数之外的任何 System Call 函数;
调用重新执行非阻塞函数是完成非阻塞写操作的必要条件。每完成一个阶段,系统性能控制器会触发一个中断来调用重
新执行非阻塞函数。因此,在非阻塞写行函数执行的过程中,重新执行非阻塞函数会被调用 3 次。
使用要求:在调用此函数之前,用户必须先调用加载闪存字节函数,将要编程的数据加载到页锁存缓冲器中。此外,非
阻塞写行函数仅可在 SRAM 中被调用。因为,Cortex-M0 CPU 在执行擦除、编程操作时不能在闪存中执行代码。如果这
个函数在闪存中被调用,则运行结果不确定;当从闪存中取指令时,可能会返回一个总线错误,并触发一个 hardfault
异常。
参数:
地址
写入值
描述
SRAM 地址:32’hYY (32 位、字对齐的 SRAM 地址)
位 [7:0]
0xB6
Key1
位 [15:8]
0xDA
Key2
位 [31:16]
Row ID
被写入的行编号.
0x0000 – 第 0 行
32’hYY
SRAM 的 32 位字对齐地址,其保存了函数的第一个
参数(Key 1)
位 [15:0]
0x0007
“非阻塞写行”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSARG
位 [31:0]
寄存器 CPUSS_SYSREQ
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:0]
0xXXXXXXX
保留
26.5.9 非阻塞编程行
非阻塞编程行(Non-Blocking Program Row)函数可被 Cortex-M0 CPU 调用以非阻塞方式对某个闪存行进行编程;同时
CPU 还可在 SRAM 中执行其他代码。非阻塞 System Call 的详细介绍请见阻塞和非阻塞 System Call 章节。
在这个编程操作被执行的过程中,CPU 仍可在 SRAM 中执行其他代码。非阻塞编程行函数被调用后,用户不能调用除重
新执行非阻塞函数 函数之外的其他任何 System Call 函数;调用重新执行非阻塞函数是完成非阻塞编程操作的必要条件。
与非阻塞写行不同,非阻塞编程行仅有 1 个阶段:编程。执行完编程阶段,系统性能控制器会触发一个中断来调用重
新执行非阻塞函数。因此,在非阻塞写行函数执行的过程中,重新执行非阻塞函数仅会被调用 1 次。
使用要求:在调用此函数之前,用户必须先调用加载闪存字节函数,将要编程的数据加载到页锁存缓冲器中。此外,非
阻塞编程行函数仅可在 SRAM 中被调用。这是由于 Cortex-M0 CPU 在执行编程操作时不能在闪存中执行代码。如果这个
函数是在闪存中被调用,则运行结果不确定;当从闪存中取指令时,可能会返回一个总线错误,并触发一个 hardfault
异常。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
251
非易失性存储器编
程
参数:
地址
写入值
描述
SRAM 地址: 32’hYY (32 位、字对齐的 SRAM 地址)
位 [7:0]
0xB6
Key1
位 [15:8]
0xDB
Key2
位 [31:16]
Row ID
写入行编号
0x0000 – 第 0 行
32’hYY
SRAM 的 32 位字对齐地址,其保存了第一个函数参
数(Key 1)
位 [15:0]
0x0008
“非阻塞编程行”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSARG
位 [31:0]
寄存器 CPUSS_SYSREQ
返回值:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:0]
0xXXXXXXX
保留
26.5.10 重新执行非阻塞
重新执行非阻塞(Resume Non-Blocking)函数可分别完成非阻塞写行和非阻塞编程行函数的擦除和编程阶段。如果调用
非阻塞写行函数,则随后会执行 3 次重新执行非阻塞函数;如果调用非阻塞编程行,则随后会执行 1 次重新执行非阻
塞函数。重新执行非阻塞函数是在系统性能控制器中断服务程序中被调用的。在编程或擦除操作的所有阶段被完成前,
CPU 无法执行其他任何 System Call。关于非阻塞函数的详细使用步骤见阻塞和非阻塞 System Call 章节。
参数:
地址
写入值
描述
SRAM 地址: 32’hYY (32 位、字对齐的 SRAM 地址)
位 [7:0]
0xB6
Key1
位 [15:8]
0xDC
Key2
位 [31:16]
0xXXXX
保留
32’hYY
SRAM 的 32 位字对齐地址,其保存了第一个函数参
数(Key 1)
位 [15:0]
0x0009
“重新执行非阻塞”操作码
位 [31:16]
0x8000
设置 SYSCALL_REQ 位
寄存器 CPUSS_SYSARG
位 [31:0]
寄存器 CPUSS_SYSREQ
返回:
地址
返回值
描述
寄存器 CPUSS_SYSARG
位 [31:28]
0xA
成功状态码
位 [27:0]
0xXXXXXXX
保留
252
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
非易失性存储器编程
26.6
System Call 返回状态值
每个 System Call 被调用结束后,一个状态码会被写入到寄存器 CPUSS_SYSARG 中:
 0xAXXXXXXX 表示成功状态(X 表示无关值;但在部分 System Call 中,其表示有意义返回值)
 0xF00000XX 表示失败状态(XX 表示故障码)
表 2. System Call 返回状态码
状态码
(保存在寄存器 CPUSS_SYSARG 中
的 32 位值)
描述
AXXXXXXXh
表示成功。“X”有两种意义:
 无关值。
 如果该 System Call 函数需要返回值,则表示有意义的返回值
F0000001h
该 System Call 函数在当前芯片保护模式下不可用
F0000003h
页锁存缓冲区中的地址出界,页锁存地址无效
F0000004h
无效地址,提供的行编号或字节地址在可用内存之外
F0000005h
指定的行处于保护状态
F0000007h
所有非阻塞 System Call 函数都已经完成。
注意:在下一个非阻塞 System Call 函数被调用之前,不能调用重新执行非阻塞函数
F0000008h
一个非阻塞 System Call 函数已经被调用,并且必须通过调用重新执行非阻塞函数来完成;在
完成之前,不可调用其他 System Call 函数
F0000009h
一个重新执行非阻塞函数或非阻塞写/编程行函数仍在进行中。SPC 中断服务程序会被再次执
行,来调用下一个重新执行非阻塞函数
F000000Ah
校验零失败,校验和不为零
F000000Bh
操作码无效,操作码与 System Call 函数的操作码不匹配
F000000Ch
Key1 或 Key2 操作码不匹配
F000000Eh
起始地址无效
26.7
非阻塞 System Call 伪代码
下面使用非阻塞写行函数的伪代码来说明如何使用非阻塞 System Call,并在对闪存编程的同时在 SRAM 中执行代码。
#define REG(addr)
#define CM0_ISER_REG
(*((volatile uint32 *) (addr)))
REG( 0xE000E100 )
#define CPUSS_CONFIG_REG
#define CPUSS_SYSREQ_REG
#define CPUSS_SYSARG_REG
REG( 0x40000000 )
REG( 0x40000004 )
REG( 0x40000008 )
#define ROW_SIZE
128
//Variable to keep track of how many times SPC ISR is triggered
__ram int iStatusInt = 0x00;
__flash int main(void)
{
DoUserStuff();
//CM0 interrupt enable bit for spc interrupt enable
CM0_ISER_REG |= 0x00000040;
//Set CPUSS_CONFIG.VECS_IN_RAM since SPC ISR should be in SRAM
CPUSS_CONFIG_REG |= 0x00000001;
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
253
非易失性存储器编
程
//Call non-blocking write row API
NonBlockingWriteRow();
//End Program
while(1);
}
__sram void SpcIntHandler(void)
{
/* Call Resume API */
// Write key1, key2 parameters to SRAM
REG( 0x20000000 ) = 0x0000DCB6;
//Write the address of key1 to the CPUSS_SYSARG reg
CPUSS_SYSARG_REG = 0x20000000;
//Write the API opcode = 0x09 to the CPUSS_SYSREQ.COMMAND
//register and assert the sysreq bit
CPUSS_SYSREQ_REG = 0x80000009;
iStatusInt ++; // Number of times the ISR has triggered
}
__sram void NonBlockingWriteRow(void)
{
int iter;
/*Load the Flash page latch with data to write*/
//Write key1, key2, byte address,
//and macro sel parameters to SRAM
REG( 0x20000000 ) = 0x0000D7B6;
//Write load size param (128 bytes) to SRAM
REG( 0x20000004 ) = 0x0000007F;
for(i = 0; i < ROW_SIZE/4; i += 1);
{
REG( 0x20000008 + i*4 ) = 0xDADADADA;
}
//Write the address of the key1 param to CPUSS_SYSARG reg
CPUSS_SYSARG_REG = 0x20000000;
//Write the API opcode = 0x04 to CPUSS_SYSREQ.COMMAND
//register and assert the sysreq bit
CPUSS_SYSREQ_REG = 0x80000004;
/*Perform Non-Blocking Write Row on Row 200 as an example */
//Write key1, key2, row id to SRAM
//row id = 0xC8 -> which is row 200
REG( 0x20000000 ) = 0x00C8DAB6;
//Write the address of the key1 param to CPUSS_SYSARG reg
CPUSS_SYSARG_REG = 0x20000000;
//Write the API opcode = 0x07 to CPUSS_SYSREQ.COMMAND
254
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
非易失性存储器编程
//register and assert the sysreq bit
CPUSS_SYSREQ_REG = 0x80000007;
//Execute user code till iStatusInt equals 3 to signify
//3 SPC interrupts have happened. This should be 1 in case
// of non-blocking program System Call
while( iStatusInt != 0x03 )
{
DoOtherUserStuff();
}
//Get the success or failure status of System Call
syscall_status = CPUSS_SYSARG_REG;
}
在上面的代码中,通过向寄存器 CPUSS_CONFIG 写 0x01,设置 Cortex-M0 从 SRAM 中读取异常向量表。SRAM 的异常向
量表中应有系统性能控制器中断的向量地址,其保存着在 SRAM 中定义的 SpcIntHandler() 函数地址。执行非阻塞编程行
函数的伪代码与上面的类似,仅函数操作码、参数及应查询变量 iStatusInt 值(iStatusInt 是否等于 0x01)不同。因为在
执行非阻塞编程 System Call 时,系统性能控制器中断仅被触发 1 次。
PSoC 4 架构技术参考手册,文档编号 001-86886,版本*A
255