1.1McBSP概述
McBSP为多通道缓冲串口(Multichannel Buffered Serial Port)的简写,共有6个引脚,发送引脚MDX、接收引脚MDR、发送时钟信号引脚MCLKX、接收时钟信号引脚MCLKR、发送帧同步引脚MFSX和接收帧同步引脚MFSR。
28335有两个McBSP模块,对应引脚如下,
模块 | 外设引脚 | 对应GPIO | 对应PIN(LQFP) | 输入输出配置 |
模 块 A | MDXA | GPIO20 | PIN | |
MDRA | GPIO21 | PIN65 | ||
MCLKXA | GPIO22 | PIN66 | ||
MCLKRA | GPIO58、7 | PIN100、16 | ||
MFSXA | GPIO23 | PIN67 | ||
MFSRA | GPIO59、5 | PIN110、12 | ||
模 块 B | MDXB | GPIO24、12 | PIN68、21 | |
MDRB | GPIO25、13 | PIN69、24 | ||
MCLKXB | GPIO26、14 | PIN72、25 | ||
MCLKRB | GPIO60、3 | PIN111、10 | ||
MFSXB | GPIO27、15 | PIN73、26 | ||
MFSRB | GPIO61、1 | PIN112、6 | ||
备注:可通过配置GPIO对应的GPxMUXx相应位,选择对应的GPIO引脚 |
McBSP具有以下几个特点:
1)全双工的通讯方式;
2)通过两级缓冲发送和三级缓冲接收实现连续数据流的通信;
3)的接收与发送的帧和时钟信号;
4)可配置最多128个接收和发送通道;
5)数据大小和范围可选,可配置为8、12、16、20、24、32位字长;
6)数据传输时可选择高低位的发送顺序;
7)可编程的内部时钟和帧发生器,可编程的帧同步和数据时钟极性;
McBSP内部结构如下图所示:
McBSP结构图
1.3McBSP中断描述
1.3.1 接收中断
1.3.2 发送中断
2DMA模块寄存器
2.1.1 控制寄存器1——SPCR1
该寄存器设置McBSP串口的数字回环模式、接收字符拓展和校验模式、ClockStop模式、DX是否允许、A-bis模式、接收中断模式等,并给很粗接受同步错误、接收移位寄存器空、接收就绪等状态位,此外该可以接收复位。
位 | 名称 | 功能描述 |
15 | DLB | 数字环路模式设置 0:环路模式无效 1:数字环路模式有效,MCBSP内部收发连接一体; |
14~13 | RJUST | 接收数据的符号拓展和对齐方式 00:右对齐,MSB补零; 01:右对齐,MSB符号拓展; 10:左对齐,LSB补零; 11:保留; |
12~11 | CLKSTP | |
10~8 | 保留 | |
7 | DXEAN | DX引脚延时使能 0:DX引脚无效; 1:DX引脚有效; |
6 | ABIS | ABIS模式 0:A-bis模式无效; 1:A-bis模式有效; |
5~4 | RINTM | 接收中断模式设置 00:由RRDY(字尾)和ABIS模式的帧尾驱动; 01:由多通道运行时的块尾和帧尾产生; 10:由一个新的帧同步信号产生; 11:由RSYNCERR产生; |
3 | RSYNCERR | 接收同步错误; 0:没有接受同步错误 1:McBSP检测到接收同步错误 |
2 | RFULL | 接收移位寄存器满 0:RBB[1,2]不满 1:DRR未读,RBR已满,RSR已填入新数据; |
1 | REDAY | 接收器就绪标志位, 0:接收器未就绪或空; 1:接收器就绪,表示CPU可以从DRR1/中读取数据,读取后自动清零; |
0 | RRST | 接收器复位 0:串口接收器无效,处于复位状态; 1:串口接收器有效 |
SPCR2设置了McBSP自由运行模式、SOFT模式、发送中断模式,并给出发送同步错误、发送移位寄存器空、发送准备好等状态位,此外还可进行发送复位、采样率发生器复位、帧同步发生电路复位。
位 | 名称 | 功能描述 |
15~10 | 保留 | |
9 | FREE | 与仿真设置位,与SOFT搭配,参见下表 |
8 | SOFT | 与仿真设置位,与FREE搭配,参见下表 |
7 | FRST | 帧同步产生器复位设置 0:帧同步逻辑复位,帧同步信号FSG不由采样率发生器提供; 1:帧同步信号FSG每隔(FPER+1)个CLKG时钟产生一次; |
6 | GRST | 采样率发生器复位设置 0:采样率发生器复位 1:采样率发生器复位结束 |
5~4 | XINTM | 发送中断模式设置 00:由XRDY(字尾)和ABIS模式的帧尾驱动; 01:由多通道运行时的块尾和帧尾产生; 10:由一个新的帧同步信号产生; 11:由XSYNCERR产生; |
3 | XSYNCERR | 发送同步错误标志 0:未发生错误; 1:检测到发送同步错误; |
2 | XEMPTY | 发送移位寄存器空 0:发送移位寄存器空; 1:发送移位寄存器未空; |
1 | XRDY | 发送器就绪 0:发送器上位就绪; 1:发送器已就绪,表明可以向DXR写入数据,写入后该位清零; |
0 | XRST | 发送器复位设置 0:串口发送器无效,处于复位状态; 1:串口发送器有效; |
FREE | SOFT | 串口时钟状态 |
0 | 0 | 立即停止串口时钟,结束数据传送 |
0 | 1 | 若正在发送数据,则等到当前字发送完后停止发送数据,接收数据不受影响; |
1 | X | 无论SOFT为何值,一旦出现断点,时钟继续运行,数据继续传输; |
PCR设置McBSP传输帧同步模式、接收帧同步模式、发送时钟模式、接收时钟模式、发送帧同步信号的极性、接收帧同步信号的极性、发送时钟极性、接收时钟极性,并给出CLKS、DX、DR引脚的状态。此外PCR还定义发送和接收部分在复位时相应引脚引脚是否配置为通用I/O;
位 | 名称 | 功能描述 |
15~14 | 保留 | |
13 | XIOEN | 发送通用I/O模式(仅当SPCR中的XRST=0时) 0:DX、FSX、CLKX被设置为串口引脚,不用作通用I/O引脚; 1:DX、FSX和CLKX不用作串口引脚,DX用作通用输出引脚,DSX和CLKX用作通用IO引脚; |
12 | RIOEN | 接收通用I/O模式(仅当SPCR中的RRST=0时) 0:DR、FSR、CLKR被设置为串口引脚,不用作通用I/O引脚; 1:DR、FSR和CLKR不用作串口引脚,DRJE CLKS用作通用输入引脚,FSR和CLKR用作通用IO引脚; |
11 | FSXM | 发送帧同步模式 0:帧同步信号由外部信号源驱动; 1:帧同步信号由SRGR中的FSGM位决定; |
10 | FSRM | 接收帧同步模式 0:帧同步信号由外部器件提供;FSR为输入引脚; 1:帧同步信号由内部的采样率发生器提供,FSR为输出引脚; |
9 | CLKXM | 1)发送时钟模式时: 0:发送时钟由外部时钟驱动,CLKX为输入引脚 1:CLKX为输出引脚,由内部的采样率发生器驱动; 2)SPI模式时的设置: 0:McBSP作为从器件,CLKX由SPI系统中的主器件提供,CLKR在内部由CLKX驱动; 1:McBSP作为主器件,产生CLKX驱动CLKR及SPI系统中从器件的移位时钟; |
8 | CLKRM | 设置接收时钟模式 1)当SPCR1中的DLB=0时: 0:CLKR为输入引脚,由外部时钟驱动; 1:CLKR为输出引脚,由内部的采样率发生器驱动; 2)当SPCR1中的DLB=1时: 0:接收时钟(不是CLKR引脚)由发送时钟(clkx)驱动,CLKX取决于PCR中的CLKXM位,CLKR引脚呈高阻抗; 1:CLKR为输出脚,由发送时钟(CLKX)驱动,CLKX取决于PCR中的CLKXM位; |
7 | 保留 | |
6 | CLKS_STAT | CLKS引脚状态,当CLKS作为通用输入时,该位用于反映该引脚的值 0:低电平; 1:高电平; |
5 | DX_STAT | DX引脚状态,当DX作为通用输出时,该位用于反映出该引脚的值 |
4 | DR_STAT | DR引脚状态,当DR作为通用输入时,该位用于反映出该引脚的值 |
3 | FSXP | 发送帧同步极性 0:发送帧同步FSX高电平有效; 1:发送帧同步FSX低电平有效; |
2 | FSRP | 接收帧同步极性 0:接收帧同步FSR高电平有效; 1:接收帧同步FSR低电平有效; |
1 | CLKXP | 发送时钟极性 0:在CLKX上升沿对发送数据采样; 1:在CLKX下降沿对发送数据采样; |
0 | CLKRP | 接收时钟极性 0:在CLKR下降沿对发送数据采样; 1:在CLKR上升沿对发送数据采样; |
RCR1设置McBSP接收时第一相的接收帧长度(从1个字到128个字、接收字长度(8、12、16、20、24、32bits)。
位 | 名称 | 功能描述 |
15 | 保留 | |
14~8 | RFRLEN1 | 接收帧1长度设置(1~128个字长) 000000:每帧1个字 000001:每帧2个字 ............ 111111:每帧128个字 |
7~5 | RWDLEN1 | 接收帧1的接收字长度设置,每字多少位 000:8bits 001:12bits 010:16bits 011:20bits 100:24bits 101:32bits 11X:保留 |
4~0 | Reserved |
RCR2设置McBSP接收时是否允许第二相(RPHASE=1)。如果允许,设置McBSP接收时第二相的接收帧长度(从1个字到128个字、接收字长度(8、12、16、20、24、32bits)。此外, RCR2设置McBSP接收时的接收压缩模式、接收同步帧忽略模式、接收数据延迟。
位 | 名称 | 功能描述 |
15 | RPHASE | 接收相中接收帧数量设置 0:单相帧 1:双相帧 |
14~8 | RFRLEN2 | 接收帧2长度设置(1~128个字长) 000000:每帧1个字 000001:每帧2个字 ............ 111111:每帧128个字 |
7~5 | RWDLEN2 | 接收帧2的接收字长度设置,每字多少位 000:8bits 001:12bits 010:16bits 011:20bits 100:24bits 101:32bits 11X:保留 |
4~3 | RCOMPAND | 接收压缩/解压模式 00:无压缩/解压,数据传输从MSB开始; 01:无压缩/解压,数据传输从LSB开始; |
2 | RFIG | 接收帧忽略 0:第一个接收帧同步脉冲之后的帧同步脉冲重新启动数据传输; 1:第一个接收帧同步脉冲之后的帧同步脉冲被忽略; |
1~0 | RDATDLY | 接收数据延迟,帧同步信号之后 00:0bit数据延迟 01:1bit数据延时 11:保留 |
XCR1设置McBSP发送时第一相(FIRST PHASE)的发送帧长度(从 1 个字到 128 个字、发送字长度(8、12、16、20、24、32bits)
位 | 名称 | 功能描述 |
15 | 保留 | |
14~8 | XFRLEN1 | 发送帧1长度设置(1~128个字长) 000000:每帧1个字 000001:每帧2个字 ............ 111111:每帧128个字 |
7~5 | XWDLEN1 | 发送帧1的接收字长度设置,每字多少位 000:8bits 001:12bits 010:16bits 011:20bits 100:24bits 101:32bits 11X:保留 |
4~0 | Reserved |
XCR2设置McBSP发送时是否允许第二相(XPHASE=1)。如果允许,设置McBSP时第二相的发送帧长度(从1个字到128个字、发送字长度(8、12、16、20、24、32bits)。此外,XCR2设置McBSP发送时的发送压缩模式、发送同步帧忽略模式、发送数据延迟。
位 | 名称 | 功能描述 |
15 | XPHASE | 发送相中接收帧数量设置 0:单相帧 1:双相帧 |
14~8 | XFRLEN2 | 发送帧2长度设置(1~128个字长) 000000:每帧1个字 000001:每帧2个字 ............ 111111:每帧128个字 |
7~5 | XWDLEN2 | 发送帧2的接收字长度设置,每字多少位 000:8bits 001:12bits 010:16bits 011:20bits 100:24bits 101:32bits 11X:保留 |
4~3 | XCOMPAND | 发送压缩/解压模式 00:无压缩/解压,数据传输从MSB开始; 01:无压缩/解压,数据传输从LSB开始; |
2 | XFIG | 发送帧忽略 0:第一个发送帧同步脉冲之后的帧同步脉冲重新启动数据传输; 1:第一个发送帧同步脉冲之后的帧同步脉冲被忽略; |
1~0 | XDATDLY | 发送数据延迟 00:0bit数据延迟 01:1bit数据延时 11:保留 |
位 | 名称 | 功能描述 |
15:3 | 保留 | |
2 | RINT ENA | 使能接收中断 0:禁止产生接收 1:使能接收部分中断(通过RINTM位选择中断触发类型) |
1 | 保留 | |
0 | XINT ENA | 使能发送中断 0:禁止产生发送中断 1:使能发送部分中断(通过XINTM位设置发送中断触发类型) |