02 TI CC2530的uart控制器

uart原理参考
uart接口:
发出数据时,就是根据波特率的位时间来改变tx脚的电平. 如二进制数据是’1’则用高电平表示, ‘0’则用低电平表示.
接收数据时,根据位时间来判断rx脚的电平, 如是高电平则表示’1’, 低电平表示’0’.
作这样的工作比较麻烦,要求也比较高 。所以一般情况下, CPU芯片里都会提供uar控制器,用于帮我们根据要传输的数据自动控制tx脚的电平和判断rx脚的电平. 而我们只需要配置好uart控制器的波特率,数据位,校验位,停止位等设置后,再把要发出的数据提交给uart控制器,控制器就会自动控制tx脚电平来发出数据 。而且uart控制器也会自动判断rx脚的电平来接收数据,当控制器接收完整一个字节数据时,我们只需从控制器把数据读回去即可.
//
里有两个USART控制器. USART控制器可以选择作uart控制器使用,也可以作SPI控制器使用. 只能二选一.

02 TI CC2530的uart控制器

文章插图
每个uart控制器都会有tx, rx引脚,一般都是与GPIO口复用的.
02 TI CC2530的uart控制器

文章插图
如上图作uart控制器时,可以选择”P0_2,P0_3” 或者”P1_4,P1_5”作rx,tx脚用 。
这个选择可在配置寄存器里设置:
02 TI CC2530的uart控制器

文章插图
其中第0位的值是关于IO口的选择.设0则使用”P0_2,P0_3”, 设1则使用”P1_4,P1_4”.
再看电路图:
02 TI CC2530的uart控制器

文章插图
板上已把P0_2, P0_3口接到uart转usb接口的芯片. 也就是硬件上已选择P0_2, P0_3作为uart0控制器的rx,tx脚了 。而且硬件上也把uart接口转换成usb接口,方便我们把它连接到PC.
因IO口可以选择作普通的IO口使用(即作输入/输出), 也可以选择由控制器来控制.
这里需要把P0_2, P0_3选择由uart控制器来控制.
也就在寄存器里的值的第2位和第3位设1
IO选择由uart控制器控制后,就剩下配置好控制器就可以传输数据了.
uart控制器的配置:
1) 控制相关的配置
02 TI CC2530的uart控制器

文章插图
U0CSR = (1<<7); // usart0 作uart控制器,不作spi控制器用. 状态位是用于检查工作状态的,检查后需清零,这里不用设置.
2) 8N1相关的配置:
02 TI CC2530的uart控制器

文章插图
U0UCR = 1<<1; // 8N1, 始启位用低电平,停止位用高电平
3) 波特率, 手册里提供了一个波特率的计算公式:
02 TI CC2530的uart控制器

文章插图
而且也提供了一个参考值的表:
02 TI CC2530的uart控制器

文章插图
如选择9600波特率,则的值为59, 的值为8.
注意上面的参考值是以系统时钟为32Mhz来设置的,而系统的默认时钟是16Mhz, 所以需要把时钟提升到32Mhz. 也可以不提升时钟,只需把的值-1.
时钟配置的寄存器
02 TI CC2530的uart控制器

文章插图
//把系统时钟信号从16MHz提升为32MHzCLKCONCMD &= ~(1<<6); //32Mhz sourcewhile (CLKCONSTA & (1<<6)) //等待配置生效;CLKCONCMD &= ~7; //把最低3位清零,选择32MHz
02 TI CC2530的uart控制器

文章插图
// 9600BAND_M(59)BAND_E(8)U0GCR = 8; //最低5位用于存放uart的波特率设置 的BAND_EU0BAUD = 59;