原创 mcf52233 DEMO板使用指南之4-UART

2010-2-22 22:58 2382 4 4 分类: MCU/ 嵌入式

本节将讲一下如何使用MCF52233的demo学习板上的串口资源发送和接收数据,需要进行的硬件连接除了使用USB供电和连接BDM外,还需要使用一条直联串口RS-232电缆把demo板和电脑连接起来。
仿照前几节介绍的方法,新建一个工程,在RAM方式下点debug按钮下载目标代码到RAM执行,可以使用串口调试助手看到运行效果,如下图,注意串口调试助手的设置应该是:


点击开大图
·串口号--根据具体情况设置;
·波特率--115200;
·校验位--none;
·数据位--8位;
·停止位--1位。
即便是一个空工程,也有运行结果,可以知道,虽然没有写任何代码,但是系统或者IDE环境,已经为我们写好了串口初始化代码,并把串口初始化在以上状态,现在我们就找找代码所在的位置。
在工程的虚拟目录“Support Files”下有虚拟目录“Board Specific Code”,打开它,可以找到一个文件“m52233demo_sysinit.c”,打开它,找到函数“SYSTEM_SysInit”,由名字可以知道,这个函数是系统初始化函数,完成一些系统初始化工作。在函数内部可以找到3行代码,它们是:
#if UART_SUPPORT==1  
 uart_init(0,SYSTEM_CLOCK, TERMINAL_BAUD, 0);
#endif
这句就是uart的初始化函数,并在进入main函数前就已经被调用了。
这个函数位于mcf52233_support.h中,四个参数分别表示串口号、系统时钟、波特率、系统设置,在这里,通过阅读此函数的代码可以知道,虽然函数调用时特指初始化串口0,实际上3个串口都已经被初始化了,当然只要略加小小修改,就可以改成标准的串口初始化函数。
UART模块框图如下:


点击开大图
那么我们来分析一下该函数内部初始化串口0部分的代码。
1、GPIO设置
要使用串口,必须关闭复用的GPIO功能,必须设置寄存器PUAPAR,此寄存器具体说明在datasheet的211页。资源复用顺序,见27页表2-1。
由该表我们知道,如果需要PORTUA工作在UART模式下,则是使用它的1号功能,所以设置PUAPAR为0b00000101,十六进制为0x05,代码如下:
    MCF_GPIO_PUAPAR = 0
        | MCF_GPIO_PUAPAR_URXD0_URXD0
        | MCF_GPIO_PUAPAR_UTXD0_UTXD0;
MCF_GPIO_PUAPAR_URXD0_URXD0和MCF_GPIO_PUAPAR_UTXD0_UTXD0都是已经定义好的常量,运算完与我们预期的结果相同。
GPIO的设置是必不可少的,如果GPIO没有设置,就算UART的寄存器设置完全正确,系统依然没有办法运行。
2、UART命令寄存器初始化设置:
MCF_UART0_UCR = MCF_UART_UCR_RESET_TX;
MCF_UART0_UCR = MCF_UART_UCR_RESET_RX;
MCF_UART0_UCR = MCF_UART_UCR_RESET_MR;
这三句分别设置禁止发送和接收,完成对收发器的复位,设置模式寄存器指针以便进行初始化。
3、UART模式寄存器设置:
 MCF_UART0_UMR1 = (0
  | MCF_UART_UMR_PM_NONE
  | MCF_UART_UMR_BC_8 );
 MCF_UART0_UMR1 = (0
  | MCF_UART_UMR_CM_NORMAL
  | MCF_UART_UMR_SB_STOP_BITS_1);
模式寄存器有两个,分别是UMR1和UMR2,这里设置UMR为无校验位、8位数据格式、正常工作模式,1个停止位。必须和电脑设置相同。
4、UART时钟寄存器设置:
 MCF_UART0_UCSR = (0
  | MCF_UART_UCSR_RCS_SYS_CLK
  | MCF_UART_UCSR_TCS_SYS_CLK);
这里是选择UART波特率使用什么时钟生成,由字面意思可以知道是使用60M系统时钟。
5、UIMR中断屏蔽寄存器设置:
MCF_UART0_UIMR = 0;
这里屏蔽所有中断,默认是不打开任何中断的。
6、波特率设置
 ubgs = (uint16)((sysclk*1000)/(baud * 32));


 MCF_UART0_UBG1 = (uint8)((ubgs & 0xFF00) >> 8);
 MCF_UART0_UBG2 = (uint8)(ubgs & 0x00FF);
UBG1和UBG2分别存储了波特率系数的高低8位,通过计算即可得出。


 这样,UART0的初始化就完成了。可以调用一系列函数来实现UART0功能。系统提供给我们的函数有:
·uart_getchar:使用UART接收字符;
·uart_putchar:使用UART发送字符;
现在使用这两个函数完成一个串口调试助手自发自收的功能,代码如下:
#include "support_common.h" /* include peripheral declarations and more */
#include <stdio.h>


int main(void)
{
 unsigned char ch;
 unsigned long i;
 i=100000;
 ch='0';
 
 printf("Hello World in C\n\r");
 
 fflush(stdout);
 
 while(1)
 { 
  ch=uart_getchar(0);
  while(i--)
  {
   asm
   {
    nop
   }
  }
  i=100000;
  uart_putchar(0,ch);


 }
}


程序运行效果:在发送区写入一个字符,点发送,则在接收区会得到单片机反馈回来的字符。
以下是完整工程下载,注意,本人代码全部调试通过,但是不保证有效性,本人不对代码疑问进行解答。谢谢。
rar

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条