C/T 都是
寄存器在检测到下跳沿(1→0)时加一,保证给出的外部输入信号在变化前至少被采样一次。
上图:C/T 决定是计数还是定时,控制信号决定是否开启。
加一计数器是 16 位,有两个 8 位寄存器 THx 和 TLx 组成。(TxL,TxH 也行)
定时器工作方式控制寄存器 TMOD ,定时器控制寄存器 TCON ,辅助寄存器 AUXR ,中断和时钟输出寄存器 INT_CLKO ,定时器3和定时器4 的工作方式寄存器 T4T3M。
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
TMOD | 89H | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 | 00000000B |
TCON | 88H | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | 00000000B |
AUXR | 8EH | T0x12 | T1x12 | UART_M0x6 | TR2 | T2_C/T | T2x12 | EXTRAM | S1ST2 | 00000000B |
INT_CLKO | 8FH | - | EX4 | EX3 | EX2 | - | T2CLKO | T1CLKO | T0CLKO | X000X000B |
T4T3M | D1H | TR4 | T4_C/T | T4x12 | T4CLKO | TR3 | T3_C/T | T3x12 | T3CLKO | 00000000B |
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
TMOD | 89H | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 | 00000000B |
D3~D0 为 T0 的控制字段。D7~D4 为 T1 的控制字段。
① GATE:选通控制。
② C/T:功能选择位。
③ M1/M0:方式选择位。
M1 | M0 | 工作方式 | 功能说明 |
---|---|---|---|
0 | 0 | 0 | 16位自动装载的定时器/计数器 |
0 | 1 | 1 | 16位定时器/计数器 |
1 | 0 | 2 | 可自动装入的8位计数器 |
1 | 1 | 3 | T1:停止计数,T0:不可屏蔽中断的16位自动装载的定时/计数器(不需要EA,只需要ET0=1,就能打开中断) |
注意:
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
TCON | 88H | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | 00000000B |
① TF1/0:T1/0 溢出标志位。
② TR1/0:T1/0 运行控制位。TRx=1 启动计数器,TRx=0 关闭。
其余0~3位 与 外部中断有关(见中断)。
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
AUXR | 8EH | T0x12 | T1x12 | UART_M0x6 | TR2 | T2_C/T | T2x12 | EXTRAM | S1ST2 | 00000000B |
设置定时器的速度,T2 的功能,串口 UART 的波特率控制。
IAP15W4K58S4 定时器复位后是 12分频,但指令执行仍是1T的速度。设置 AUXR 实现真正的1T速度。
① T0x12:T0 速度控制位。
② T1x12:T1 速度控制位。
③ TR2:T2 运行控制位。
④ T2_C/T:T2 功能选择位。
⑤ T2x12:T2 速度控制位。
⑥ EXTRAM:是否允许使用内部1792字节的扩展 RAM。
注意:T1 和 T2 可用于 UART串口通信的 波特率发生器,Tx12决定是否12分频.
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
INT_CLKO | 8FH | - | EX4 | EX3 | EX2 | (SYSCKO_S2) | T2CLKO | T1CLKO | T0CLKO | X000X000B |
TxCLKO 是与时钟输出有关的。
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
T4T3M | D1H | TR4 | T4_C/T | T4x12 | T4CLKO | TR3 | T3_C/T | T3x12 | T3CLKO | 00000000B |
① TR4:T4 运行控制位。
② T4_C/T:T4 功能选择位。
③ T4x12:T4 速度控制位。
④ T4CLKO:是否允许该时钟输出
⑤ TR3:T3 运行控制位。
⑥ T3_C/T:T3 功能选择位。
⑦ T3x12:T3 速度控制位。
⑧ T3CLKO:是否允许该时钟输出
以 T0 为例:
T0 有两个隐藏的寄存器 RL_TH0 和 RL_TL0 分别与 TH0,TL0
共有同一个地址。TR0=0时,对TL0写入的值会同时写入RL_TL0。TR0=1时,不会同时写入。
溢出时不光会置位TF0,还会将[RL_TL0,RL_TH0]自动装入[TL0,TH0]。
于是实现了16位自动重载。
T0CLKO=1 时,T1/P3.5 引脚配置为 T0 的时钟输出 T0CLKO。
T0 的工作方式0 已经能实现方式1 和方式2 的所有功能,所以不做介绍了。
其余计时器功能类似 T0。
晶振频率为11.0592 MHZ 时:
单位时间 Tu = 12/晶振频率 = 12/11059200 s
定时时间 Tc = x*Tu
装入初值:N = 2^16 - Tc/Tu
12分频时的最大量程:
T = 2^16 * 12 / 11059200 s = 71.11s
① 设置工作方式,将控制字写入TMOD寄存器(对于T0和T1)或AUXR寄存器(对于T2)或T4T3M寄存器(对于T3和T4)。
② 设置分频方式,即设置Txx12控制位。默认的情况是12分频(兼容传统8051单片机),如果使用传统8051单片机模式,可以不进行设置。
③ 计算定时/计数初值,并将其装入TLx、THx寄存器。
④ 置位ETx和EA允许定时/计数器中断(如果需要)。
⑤ 置位TRx以启动定时/计数。
IAP15W4K58S4 提供 6 路可编程时钟输出功能:
MCLKO——P5.4(内部RC 时钟频率<12MHZ 时才能正常输出)
T0CLKO——P3.5
T1CLKO——P3.4
T2CLKO——P3.0
T3CLKO——P0.4
T4CLKO——P0.5
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
CLK_DIV | 97H | MCKO_S1 | MCKO_S0 | ADRJ | TX_RX | - | CLKS2 | CLKS1 | CLKS0 | 0000X000B |
INT_CLKO | 8FH | - | EX4 | EX3 | EX2 | - | T2CLKO | T1CLKO | T0CLKO | X000X000B |
T4T3M | D1H | TR4 | T4_C/T | T4x12 | T4CLKO | TR3 | T3_C/T | T3x12 | T3CLKO | 00000000B |
单片机的主时钟可以是内部高精度 RC 时钟,也可以是外部输入的时钟或外部晶振时钟。
MCKO_S1,MCKO_S0:主时钟的输出控制:
MCKO_S1 | MCKO_S0 | 主时钟的输出频率 |
---|---|---|
0 | 0 | 无主时钟输出 |
0 | 1 | 主时钟输出频率=MCLK |
1 | 0 | 主时钟输出频率=MCLK/2 |
1 | 1 | 主时钟输出频率=MCLK/4 |
使 TxCLKO=1 。
输出频率为 定时/计数器的溢出频率/2。
需要工作在自动重装模式,不允许定时器中断,避免反复中断。
IAP15W4K58S4集成了 串行外设接口(SPI),SPI 接口有两种操作模式:主模式 和 从模式。
主模式支持 3Mbps 的速率;从模式时速度无法太快,速度在 SYSclk/8 以内较好。
SPI 的核心是一个8位 移位寄存器 和 数据缓冲器,数据可以同时发送和接收。
对于主模式:发送一个字节,只需把这个数据写到 SPIDAT 寄存器中。
从模式:必须在 /SS信号变为有效并接收到合适的时钟信号后才能进行数据传输。
任何 SPI 控制寄存器的改变将复位 SPI 接口,并清除相关寄存器。
SPI 接口由 MOSI(与P1.3共用),MISO(与P1.4共用),SCLK(与P1.5共用),/SS(与P1.2共用) 4根信号线构成。SPI引脚可以切换。
① MOSI(Master Out Slave In,主出从入):
② MISO(Master In Slave Out,主入从出):
③ SCKLK(SPI Clock,串行时钟信号):
注意:
④ /SS(Slave Select,从机选择信号):
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
SPICTL | CEH | SSIG | SPEN | DORD | MSTR | CPOL | CPHA | SPR1 | SPR0 | 00000100B |
SPSTAT | CDH | SPIF | WCOL | - | - | - | - | - | - | 00XXXXXXB |
SPIDAT | CFH | 00000000B |
① SPI 控制寄存器(SPCTL):
SPR1 | SPR0 | 时钟(SCLK) |
---|---|---|
0 | 0 | CPU_CLK/4 |
0 | 1 | CPU_CLK/8 |
1 | 0 | CPU_CLK/16 |
1 | 1 | CPU_CLK/32 |
CPU_CLK 是CPU时钟。
② SPI 状态寄存器(SPSTAT)
③ SPI 数据寄存器(SPDAT)
单主机-单从机,双器件方式(互为主/从机),单主机-多从机
① 单主-单从:
IAP15W4K58S4单片机进行SPI通信时,主机和从机的选择由SPEN、SSIG、引脚(P1.2)和MSTR联合控制。主机和从机的选择如表所示。
时钟相位控制位CPHA用于设置采样和改变数据的时钟边沿。
时钟极性控制位CPOL用于设置时钟极性。
不同的CPHA,主机和从机对应的数据格式如图所示。
根据转换的工作原理不同,模数转换器可以分为计数-比较式、逐次逼近式和双斜率积分式。
…
IAP15W4K58S4 单片机集成 8 路 10 位高速电压输入型模数转换器(ADC)(逐次比较型),速度可达 300 kHz。
ADC 输入通道与 P1 口复用,上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为ADC功能,不作为ADC使用的口可继续作为I/O口使用。
结构:
ADC 控制寄存器:
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
ADC_CONTR | BCH | ADC_POWER | SPEED1 | SPEED0 | ASC_FLAG | ADC_START | CHS2 | CHS1 | CHS0 | 00000000B |
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
ADC_CONTR | BCH | ADC_POWER | SPEED1 | SPEED0 | ASC_FLAG | ADC_START | CHS2 | CHS1 | CHS0 | 00000000B |
P1ASF | 9DH | P17ASF | P16ASF | P15ASF | P14ASF | P13ASF | P12ASF | P11ASF | P10ASF | 00000000B |
ADC_RES | BDH | 00000000B | ||||||||
ADC_RESL | BEH | 00000000B | ||||||||
CLK_DIV | 97H | MCKO_S1 | MCKO_S0 | ADRJ | TX_RX | - | CLKS2 | CLKS1 | CLKS0 | 0000X000B |
ADC 控制寄存器:
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
ADC_CONTR | BCH | ADC_POWER | SPEED1 | SPEED0 | ADC_FLAG | ADC_START | CHS2 | CHS1 | CHS0 | 00000000B |
① ADC_POWER:ADC 电源控制位
② SPEED1,SPEED0:ADC 转换速度控制位:
SPEED1 | SPEED0 | A/D 转换所需时间 |
---|---|---|
0 | 0 | 540个时钟周期转换一次,可达到10位精度 |
0 | 1 | 360个时钟周期转换一次,可达到10位精度 |
1 | 0 | 180个时钟周期转换一次,可达到10位精度 |
1 | 1 | 90个时钟周期转换一次,CPU 工作频率21MHz时,约为 30万次/s,9位精度 |
IAP15W4K58S4单片机A/D转换模块的时钟是外部晶体时钟或内部RC振荡器所产生的系统时钟,不是CLK_DIV分频过后供给CPU工作的时钟。这样转换快而CPU慢,降低功耗。
所以注意:设置 ADC——CONTR 控制寄存器后,要加4个空操作延时才能正确读到ADC_CONTR寄存器的值。(即4个CPU时钟才能被设置进ADC_CONTR)
③ ADC_FLAG:A/D 转换结束标志位。
④ ADC_START:A/D 转换启动控制位。
⑤CHS2,CHS1,CHS0:模拟输入通道选择。
CHS2 | CHS1 | CHS0 | 模拟输入通道选择 |
---|---|---|---|
0 | 0 | 0 | 选择 P1.0 作为 A/D 输入来用 |
0 | 0 | 1 | 选择 P1.1 作为 A/D 输入来用 |
0 | 1 | 0 | 选择 P1.2 作为 A/D 输入来用 |
0 | 1 | 1 | 选择 P1.3 作为 A/D 输入来用 |
1 | 0 | 0 | 选择 P1.4 作为 A/D 输入来用 |
1 | 0 | 1 | 选择 P1.5 作为 A/D 输入来用 |
1 | 1 | 0 | 选择 P1.6 作为 A/D 输入来用 |
1 | 1 | 1 | 选择 P1.7 作为 A/D 输入来用 |
① ADRJ:
ADRJ=0 时,ADC_RES[7:0] 存放 高8位 ADC结果,ADC_RESL[1:0] 存放 低2位 ADC结果,适合于取 8位转换精度。
ADRJ=1 时,ADC_RES[1:0] 存放 高2位 ADC结果,ADC_RESL[7:0] 存放 低8位 ADC结果,适合于取 10位转换精度。
取 10 位结果:(ADC_RES[7:0],ADC_RESL[1:0]) = 1024×Vin/Vcc
取8位结果 :ADC_RES[7:0] = 256×Vin / Vcc
① 打开ADC电源,第一次使用时要打开内部模拟电源(设置ADC_CONTR)。
② 适当延时,等内部模拟电源稳定。一般延时1ms以内即可。
③ 设置P1口中的相应口线作为A/D转换通道(设置P1ASF寄存器)。
④ 选择ADC通道(设置ADC_CONTR中的CHS2~CHS0)。
⑤ 根据需要设置转换结果存储格式(设置CLK_DIV中的ADRJ位)
⑥ 查询A/D转换结束标志ADC_FLAG,判断A/D转换是否完成,若完成,则读出结果(结果保存在ADC_RES和ADC_RESL寄存器中),并进行数据处理。
⑦ 若采用中断方式,还需进行中断设置(EADC置1,EA置1)。
在中断服务程序中读取ADC转换结果,并将ADC中断请求标志ADC_FLAG清零
注意:
读取转换结果注意:
如果是多通道模拟量进行转换,则更换A/D转换通道后要适当延时,使输入电压稳定,延时量取20μs~200μs即可,与输入电压源的内阻有关。
如果输入电压信号源的内阻在10K以下,可不加延时。
如果是单通道模拟量转换,则不需要更换A/D转换通道,也就不需要加延时
IAP15W4K58S4 集成了 1 路比较器。可用于系统的掉电检测等功能。
。。。
IAP15W4K58S4 单片机集成了 两路可编程计数器阵列(PCA)模块。可用于软件定时器,外部脉冲的捕捉,高速输出以及脉宽调制(PWM)输出。
一个16位定时器与2个16位的捕获/比较模块与之相连。
捕获/比较/脉宽调制(CCP) 通道可以在三个地方切换(由CCP_S1 和 CCP_S0):
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
AUXR1 | A2H | S1_S1 | S1_S0 | CCP_S1 | CCP_S0 | SPI_S1 | SPI_S0 | - | DPS | 00000000B |
CCP_S1 | CCP_S0 | 切换引脚 |
---|---|---|
0 | 0 | CCP在 [P1.1/CCP0,P1.0/CCP1] |
0 | 1 | CCP在 [P3.5/CCP0_2,P3.6/CCP1_2] |
1 | 0 | CCP在 [P2.5/CCP0_3,P2.6/CCP1_3] |
1 | 1 | 无效 |
每个模块可编程工作在 4 中模式:上升/下降沿捕获器,软件定时器,高速输出 或 可调制脉冲输出。
这两个模块以 一个16位 PCA 定时/计数器 为公共时间基准。
16位 PCA定时/计数器:
CH,CL 的内容是自动递增计数的16位 PCA 定时器的值。
CMOD 的 ECF 位用于中断控制(=1使中断)。
寄存器 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 复位值 |
---|---|---|---|---|---|---|---|---|---|---|
CMOD | D9H | CIDL | - | - | - | CPS2 | CPS1 | CPS0 | ECF | 0xxx0000B |
CCON | D8H | CF | CR | - | - | - | - | CCF1 | CCF0 | 00xxxx00B |
CCAPM0 | DAH | - | ECOM0 | EAPP0 | CAPN0 | MAT0 | TOG0 | PWM0 | ECCF0 | x0000000B |
CCAPM1 | DBH | - | ECOM1 | EAPP1 | CAPN1 | MAT1 | TOG1 | PWM1 | ECCF1 | x0000000B |
CL | E9H | 00000000B | ||||||||
CH | F9H | 00000000B | ||||||||
CCAP0L | EAH | 00000000B | ||||||||
CCAP0H | FAH | 00000000B | ||||||||
CCAP1L | EBH | 00000000B | ||||||||
CCAP1H | FBH | 00000000B | ||||||||
PCA_PWM0 | F2H | EBS0_1 | EBS0_0 | XCCAP0H[1:0] | XCCAP0H[1:0] | XCCAP0L[1:0] | XCCAP0L[1:0] | EPC0H | EPC0L | 00xxxx00B |
PCA_PWM1 | F3H | EBS1_1 | EBS1_0 | XCCAP1H[1:0] | XCCAP1H[1:0] | XCCAP1L[1:0] | XCCAP1L[1:0] | EPC1H | EPC1L | 00xxxx00B |
① CIDL:空闲模式下是否停止 PCA 计数的控制位。
② CPS2,CPS1 和 CPS0 位选择 PCA计数/定时器的时钟源。
CPS2 | CPS1 | CPS0 | PCA 时钟源输入选择 |
---|---|---|---|
0 | 0 | 0 | 系统时钟/12 |
0 | 0 | 1 | 系统时钟/2 |
0 | 1 | 0 | 系统时钟/T0溢出时钟 |
0 | 1 | 1 | 系统时钟/ECI/P1.2(或P2.4或P3.4)脚输入的外部时钟(最大速率=SYSclk/2) |
1 | 0 | 0 | 系统时钟 |
1 | 0 | 1 | 系统时钟/4 |
1 | 1 | 0 | 系统时钟/6 |
1 | 1 | 1 | 系统时钟/8 |
注:
③ ECF:PCA 计数器溢出中断使能位。
① CF:PCA 计数器 溢出标志位,只能软件清0。
② CR:PCA 计数器 的运行控制位。
③ CCF1/CCF0:PCA 模块的中断标志,当发生匹配或捕获时由硬件置位。必须由软件清0。
用于设定 PCA 模块的工作模式。
① ECOMn:允许比较器功能控制器。ECOMn=1时,允许比较器功能。
② CAPPn:正捕获控制位。CAPPn=1 时,允许 CCPn 引脚的上升沿捕获。
③ CAPNn:负捕获控制位。CAPNn=1 时,允许 CCPn 引脚的下降沿捕获。
可以两者都捕获。
④ MATn:匹配控制位。
⑤TOGn:翻转控制位。
⑥ PWMn:脉宽调制模式,当PWM=1时,CCPn 脚用作脉宽调制输出。
⑦ ECCFn:使能 CCFn 中断。
PCA 模块的工作模式设定:
ECOMn | CAPPn | CAPNn | MATn | TOGn | PWMn | ECCFn | 模块功能 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 无操作 |
1 | 0 | 0 | 0 | 0 | 1 | 0 | PWM 输出,无中断 |
1 | 1 | 0 | 0 | 0 | 1 | 1 | PWM 输出,产生上升沿中断 |
1 | 0 | 1 | 0 | 0 | 1 | 1 | PWM 输出,产生下降沿中断 |
1 | 1 | 1 | 0 | 0 | 1 | 1 | PWM 输出,产生边沿中断 |
0 | 1 | 0 | 0 | 0 | 0 | X | 16位上升沿捕获模式 |
0 | 0 | 1 | 0 | 0 | 0 | X | 16位下降沿捕获模式 |
0 | 1 | 1 | 0 | 0 | 0 | X | 16位边沿捕获模式 |
1 | 0 | 0 | 1 | 0 | 0 | X | 16位软件定时器 |
1 | 0 | 0 | 1 | 1 | 0 | X | 16位高速脉冲输出 |
① EBSn_1,EBSn_0:PCA 模块n 工作于 PWM 模式时的位数选择器。
EBSn_1 | EBSn_0 | PWM位数 | 重载值 | 比较值 |
---|---|---|---|---|
0 | 0 | 8 | {EPCnH, CCAPnH[7:0]} | {EPCnL, CCAPnL[7:0]} |
0 | 1 | 7 | {EPCnH, CCAPnH[6:0]} | {EPCnL, CCAPnL[6:0]} |
1 | 0 | 6 | {EPCnH, CCAPnH[5:0]} | {EPCnL, CCAPnL[5:0]} |
1 | 1 | 10 | {EPCnH, XCCAPnH[1:0],CCAPnH[7:0]} | {EPCnL,XCCAPnL[1:0],CCAPnL[7:0]} |
(地址分别为E9H和F9H,复位值均为00H)。它们用于保存PCA的装载值
捕获功能:保存发生捕获时的PCA计数值。
比较功能:将CL,CH的值与保存在 CCAPnL,CCAPnH 中的值进行比较,给出比较结果。
匹配功能:将CL,CH的值与保存在 CCAPnL,CCAPnH 中的值进行比较(是否相等),给出匹配结果。
PWM 模式:调占空比。
工作在该模式时,必须使 CCAPMn 的两位(CAPNn,CAPPn)至少有一位=1 。
对外部输入 CCPn 引脚的跳变进行采样,采样到有效跳变时,将 PCA计数器 CH,CL的值装载到 模块的捕获寄存器(CCAPnH,CCAPnL)中,并申请中断(CCON 中的CCF=1,CCAPMn中的ECCFn=1时),可在中断服务程序中检测是哪个模块产生了中断。注意软件清0.
通过置位寄存器CCAPMn的ECOMn和MATn位,可使PCA模块用作软件定时器。
PCA定时器的值与模块捕获寄存器的值相比较,当二者相等时,CCON中的CCFn被硬件置位,若ECCFn被置位,将产生中断。
[CH,CL]每隔一定的时间自动加1,时间间隔取决于选择的时钟源。如果每次PCA模块中断后,在中断服务程序中给[CCAPnH,CCAPnL]增加一个相同的数值,那么下一次中断来临的间隔时间T也是相同的,从而实现了定时功能。定时时间的长短,取决于时钟源的选择以及PCA计数器计数值的设置。
当 CCAPMn 寄存器的 TOGn,MATn 和 ECOMn 位都 =1 时,PCA 工作于高速输出模式。
该模式中,当PCA计数器的计数值与模块捕获寄存器[CCAPnH,CCAPnL]的值相匹配时,PCA模块的输出CCPn将发生翻转。
IAP15W4K58S4单片机的PCA模块可以通过程序设定各自的寄存器PCA_PWMn(n=0,1.下同)中的位EBSn_1及EBSn_0,使其工作于PWM模式。
所有PCA模块都可用作PWM输出,输出频率取决于PCA定时器的时钟源。由于所有模块共用PCA定时器,所以它们的输出频率相同,各个模块的输出占空比是独立变化的。
EBSn_1 | EBSn_0 | PWM位数 | 重载值 | 比较值 |
---|---|---|---|---|
0 | 0 | 8 | {EPCnH, CCAPnH[7:0]} | {EPCnL, CCAPnL[7:0]} |
0 | 1 | 7 | {EPCnH, CCAPnH[6:0]} | {EPCnL, CCAPnL[6:0]} |
1 | 0 | 6 | {EPCnH, CCAPnH[5:0]} | {EPCnL, CCAPnL[5:0]} |
1 | 1 | 10 | {EPCnH, XCCAPnH[1:0],CCAPnH[7:0]} | {EPCnL,XCCAPnL[1:0],CCAPnL[7:0]} |
当 PCA 模块工作于 8位 PWM 模式时,当{0, CL[7:0]} 的值小于{EPCnL, CCAPnL[7:0]}时,输出为低,
当{0, CL[7:0]} 的值大于等于 {EPCnL, CCAPnL[7:0]} 时,输出为高。当PCA计数器的值溢出时,{EPCnH, CCAPnH[7:0]} 的内容装载到 {EPCnL, CCAPnL[7:0]} 中,可实现无干扰的更新 PWM。
当PWM是8位时:
PWM 频率 = PCA时钟输入源频率 / 256
调频率,可以改 PCA时钟输入源的频率。如选择 T0 溢出 或 ECI 脚的输入作为时钟输入源。
PCA 模块工作于8位 PWM 模式的结构图;
PCA 模块工作于10位 PWM 模式的结构图;
注意:在更新 10 位 PWM 重载值时。必须先写高两位 XCCAPnH[1:0] 再写低8位 CCAPnL[7:0] 。
一是 正确初始化,二是 中断服务程序的编写。
初始化部分大致:
集成了PWM模块(6路增强型PWM波形发生器)。增强型PWM波形发生器还设计了对外部异常事件(包括外部端口P2.4的电平异常、比较器比较结果异常)进行监控的功能,可用于紧急关闭PWM输出。PWM波形发生器还可在15位的PWM计数器归零时触发外部事件(例如ADC转换)
PWM 波形发生器内部有一个15位的 PWM 计数器供6路 PWM(PWM2~PWM7) 使用。
可以设定每路的初始电平,可以设置 两次翻转时间。每路各自独立。
PWM计数器达到周期设置寄存器[PWMCH,PWMCL] 是,归0,并申请中断。
任意一路 PWM 可实现输出波形占空比和波形频率的实时调整,任意两路都可以配合实现 互补对称输出以及死区控制等特殊应用。
每路输出端口可由 PWMnCR 中的PWMn_PS 位独立的控制是否切换到第二引脚。
PWM通道 | PWM2 | PWM3 | PWM4 | PWM5 | PWM6 | PWM7 |
---|---|---|---|---|---|---|
PWMn_PS=0 | P3.7 | P2.1 | P2.2 | P2.3 | P1.6 | P1.7 |
PWMn_PS=1 | P2.7 | P4.5 | P4.4 | P4.2 | P0.7 | P0.6 |
注意:所有与PWM相关的端口,在上电后均为高阻输入态,必须在程序中将这些口设置为双向口或强推挽模式才可正常输出波形。
符号 | 地址 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 初始值 |
---|---|---|---|---|---|---|---|---|---|---|
P_SW2 | BAH | EAXSFR | DBLPWR | P31PU | P30PU | - | S4_S | S3_S | S2_S | 0000,0000B |
PWMCFG | F1H | - | CBTADC | C7INI | C6INI | C5INI | C4INI | C3INI | C2INI | 0000,0000B |
PWMCR | F5H | ENPWM | ECBI | ENC7O | ENC6O | ENC5O | ENC4O | ENC3O | ENC2O | 0000,0000B |
PWMIF | F6H | - | CBIF | C7IF | C6IF | C5IF | C4IF | C3IF | C2IF | x000,0000B |
PWMFDCR | F7H | - | - | ENFD | FLTFLIO | EFDI | FDCMP | FDIO | FDIF | xx00,0000B |
PWMCH | FFF0H | - | PWMCH[6:0] | x000,0000B | ||||||
PWMCL | FFF1H | PWMCL[7:0] | 0000,0000B | |||||||
PWMCKS | FFF2H | - | - | - | SELT2 | PS[3:0] | xxx0,0000B | |||
PWMnT1H | FFn0H(n=0~5) | - | PWMnT1H[6:0] | x000,0000B | ||||||
PWMnT1L | FFn1H(n=0~5) | PWMnT1L[7:0] | 0000,0000B | |||||||
PWMnT2H | FFn2H(n=0~5) | - | PWMnT2H[6:0] | x000,0000B | ||||||
PWMnT2L | FFn3H(n=0~5) | PWMnT2L[7:0] | 0000,0000B | |||||||
PWMnCR | FFn4H(n=0~5) | - | - | - | - | PWMn_PS | EPWMnI | ECnT2SI | ECnT1SI | xxxx,0000B |
(1)端口配置寄存器 P_SW2
与PWM相关的位是 EAXSFR :扩展 SFR 访问控制使能。
注意:若要访问 PWM 在扩展 RAM 区的特殊功能寄存器,必须先将 EAXSFR 位置1。
(2)PWM 配置寄存器 PWMCFG
① CBTADC:PWM计数器归零时(CBIF=1)时,触发 ADC 转换。
② CnINI:设置PWMn 输出端口的是初始电平。
(3)PWM 控制寄存器 PWMCR
① ENPWM:增强型PWM波形发生器使能控制位。
② ECBI:PWM计数器归零中断使能位。
③ENCnO:PWMn 输出使能位。
(4)PWM 中断标志位寄存器 PWMIF
① CBIF:PWM计数器归零中断标志位。需用软件清0。
② CnIF:第n通道 PWM 中断标志位。可设置在两个翻转点触发,需用软件清0.
(5)PWM 外部异常控制寄存器 PWMFDCR
① ENFD:PWM 外部异常检测功能控制位
② FLTFLIO:发生 PWM 外部异常时对 PWM 输出口控制位
③ EFDI:PWM 异常检测中断使能位。
④ FDCMP:设定 PWM 异常检测源为比较器的输出
⑤ FDIO:设定 PWM 异常检测源为端口 P2.4 的状态。
⑥ FDIF: PWM 异常检测中断标志位
当比较器正极 P5.5/CMP+ 电平 比 比较器负极 P5.4/CMP- 的电平高 或比内部参考电压源1.28V 高 或 P2.4为高电平 时,硬件自动将此位 置1。并申请中断(EFDI=1时)。该标志位需软件清0。
(6)PWM 计数器 PWMCH(只使用低7位),PWMCL
可设 1~32767 作为PWM 的周期。
(7)PWM 时钟选择寄存器 PWMCKS
① SELT2:PWM 时钟源选择控制位。
PWM 计数器时钟 = 系统时钟/(PS[3:0]+1)
② PS[3:0]:系统时钟预分频参数。
(8)PWM 的翻转计数器
PWMnT1H[6:0],PWMnT1L[7:0]
PWMnT2H[6:0],PWMnT2L[7:0]
(9)PWMn 的控制寄存器 PWMnCR
① PWMn_PS :PWMn 输出管脚选择位。见7.5.2 (1)
②EPWMnI:PWMn 中断使能控制位。
③ECnT2SI:PWMn 的 PWMnT2 匹配发生波形翻转时的中断使能控制位。
④ECnT1SI:PWMn 的 PWMnT1 匹配发生波形翻转时的中断使能控制位。
入口地址 | 优先级设置 | 中断请求位 | 中断允许位 | 中断标志清除方式 | 说明 |
---|---|---|---|---|---|
CBIF | ENPWM/ECBI/EA | 需软件清除 | PWM计数器归0中断 | ||
00B3H(22) | C2IF | ENPWM / EPWM2I / EC2T2SI || EC2T1SI / EA | 需软件清除 | PWM 输出口翻转中断 | |
C3IF | ENPWM / EPWM3I / EC3T2SI || EC3T1SI / EA | 需软件清除 | PWM 输出口翻转中断 | ||
PPWM | C4IF | ENPWM / EPWM4I / EC4T2SI || EC4T1SI / EA | 需软件清除 | PWM 输出口翻转中断 | |
C5IF | ENPWM / EPWM5I / EC5T2SI || EC5T1SI / EA | 需软件清除 | PWM 输出口翻转中断 | ||
C6IF | ENPWM / EPWM6I / EC6T2SI || EC6T1SI / EA | 需软件清除 | PWM 输出口翻转中断 | ||
C7IF | ENPWM / EPWM7I / EC7T2SI || EC7T1SI / EA | 需软件清除 | PWM 输出口翻转中断 | ||
00BBH(23) | PPWMFD | FDIF | ENPWM / ENFD / EFDI / EA | 需软件清除 | PWM 异常检测中断 |