uart串口实现回写

来源:互联网 发布:数据库管理系统 编辑:程序博客网 时间:2024/05/23 00:37
 1、打开ads,新建一个工程,命名为:uart
2、在工程中新建一个文件 start.s

/* start.s */

     area init,code,readonly
start 
     ldr sp,=4096
     import main
     b main
     end 

3、再新建一个文件用于对串口有关的端口进行初始化,也包括寄存器的初始化。

/* uart.h */

/* GPIO registers */
#define     GPHCON                    (*(volatile unsigned long *)0x56000070) //GPIO端口H配置寄存器
#define     GPHDAT                    (*(volatile unsigned long *)0x56000074)  //GPIO端口H数据寄存器
#define     GPHUP                    (*(volatile unsigned long *)0x56000078)  //GPIO端口H上拉无效寄存器

/*UART registers*/
#define     ULCON0                    (*(volatile unsigned long *)0x50000000)  //串口0串行控制寄存器
#define     UCON0                    (*(volatile unsigned long *)0x50000004)  //串口0控制寄存器
#define     UFCON0                    (*(volatile unsigned long *)0x50000008) //串口0FIFO控制寄存器
#define     UMCON0                    (*(volatile unsigned long *)0x5000000c)   //串口0 MODEM控制寄存器
#define     UTRSTAT0               (*(volatile unsigned long *)0x50000010)  //串口0发送/接收状态寄存器
#define     UTXH0                    (*(volatile unsigned char *)0x50000020)  //串口0发送缓冲寄存器
#define     URXH0                    (*(volatile unsigned char *)0x50000024)  //串口0接收缓冲寄存器
#define     UBRDIV0    (*(volatile unsigned long *)0x50000028) //串口0波特率除数寄存器UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
 
#define PLCK 356864000
#define UART_CLK PLCK    //内部系统时钟频率
#define UART_BAUD_RATE 1115200
#define UART_BED ((UART_CLK/(UART_BAUD_RATE * 16))-1)
 
 
4、在工程中新建一个main.c的执行源文件;

/*mian.c*/

#include<uart.h>

/*uart串口初始化*/

void init(void)
{
      GPHCON |= 0xa0;         //GPH2,GPH3 used as TXD0,RXD0
      GPHUP   = 0x0;            //GPH2,GPH3内部上拉
     ULCON0 = 0x03;          //8N1      
       UCON0   = 0x05;          //查询方式为轮询或中断;时钟选择为PCLK
       UFCON0 = 0x00;          //不使用FIFO
       UMCON0 = 0x00;         //不使用流控
}

/*uart串口接受字符 */

void putc(unsigned char c)
{
     while(!(UTRSTAT0 & (0x1<<2)))
         UTXH0 = C;
}

/*uart串口输出字符*/

unsigned char getc()
{
     while(!(UTRSTAT0 & 0x1));
     return URXH0;
}

int main()
{
     unsigned char a;
     init();
     while(!(UTRSTAT0 & (1<<2)))
       { 
             a=putc(a);
             getc();
        }
}

 
在编译的过程中对发现UBRDIVn 的值等于19时才能正确回显;这一点不知道是为什么?(正在寻找答案)
原创粉丝点击