原创 Freescale MCF52211 UART演示程序

2009-6-12 14:52 3420 3 3 分类: MCU/ 嵌入式

P&E的BDM仿真器买回来了,在我的MCF52211板子上很正常,看来华恒的那个开源BDM有问题,那个BDM我不知道是什么原因,就是没办法调试MCF52211,也不知道是TBLCF本身不支持MCF52211,还是华恒没有把这个东西做好。


下面贴个调试通过的MCF52211 UART的demo程序,供参考






#include "support_common.h" /* include peripheral declarations and more */
#if (CONSOLE_IO_SUPPORT || ENABLE_UART_SUPPORT)
/* Standard IO is only possible if Console or UART support is enabled. */
#include <stdio.h>
#endif


void uart0_init(unsigned long baudrate)
{
    register uint16 div;
   
    MCF_GPIO_PUAPAR =0x05;
 /*
  * Reset Transmitter
  */
 MCF_UART0_UCR =MCF_UART_UCR_RESET_TX;


 /*
  * Reset Receiver
  */
 MCF_UART0_UCR = MCF_UART_UCR_RESET_RX;


 /*
  * Reset Mode Register
  */
 MCF_UART0_UCR = MCF_UART_UCR_RESET_MR;
 
 /*
 * No parity, 8bit data
 */
 MCF_UART0_UMR1=(0
  | MCF_UART_UMR_PM_NONE
  | MCF_UART_UMR_BC_8 );


 /*
 * 1bit stop
 */
 MCF_UART0_UMR2=(0
  | MCF_UART_UMR_CM_NORMAL
  | MCF_UART_UMR_SB_STOP_BITS_1);


 /*
  * Set Rx and Tx baud by SYSTEM CLOCK
  */
 MCF_UART0_UCSR = (0
  | MCF_UART_UCSR_RCS_SYS_CLK
  | MCF_UART_UCSR_TCS_SYS_CLK);


 /*
  * Mask all UART interrupts
  */
 MCF_UART0_UIMR = 0;
 /* set baud rate
 */
 div=(uint16)(60000000L/(32*baudrate));
 
 MCF_UART0_UBG1=(unsigned char)(div>>8);
 MCF_UART0_UBG2=(unsigned char)(div&0x00ff);
 
 /* Enable Tx/Rx*/
 MCF_UART0_UCR = (0
  | MCF_UART_UCR_TX_ENABLED
  | MCF_UART_UCR_RX_ENABLED);
}


void uart0_putchar(unsigned char c)
{
  /* Wait until space is available in the FIFO */
    while (!(MCF_UART0_USR & MCF_UART_USR_TXRDY))
    {
     
    };


    /* Send the character */
    MCF_UART0_UTB = c; 
}


unsigned char uart0_getchar()
{
  /* Wait until character has been received */
    while (!(MCF_UART0_USR & MCF_UART_USR_RXRDY))
    {
     
    };


    return MCF_UART0_URB;
}



void uart0_putstr(unsigned char *str)
{
 while(*str!=0)
 {
  uart0_putchar(*str++);
 }
}



int main(void)
{
 int counter = 0;
    unsigned char c="0";
 
#if (CONSOLE_IO_SUPPORT || ENABLE_UART_SUPPORT)
 printf("Hello World in C from MCF52211 derivative on MCF52211 board\n\r");
 fflush(stdout);
#endif
 uart0_init(9600);
 uart0_putstr((unsigned char*)("MCF52211 Uart0 test start\n"));


 for(;;) { 
  c=uart0_getchar();
  uart0_putchar(c);  
     counter++;
 }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条