九鼎创展论坛
标题:
串口输出问题
[打印本页]
作者:
JUCAT
时间:
2017-9-14 19:22
标题:
串口输出问题
我用朱老师的串口打印程序可以正常打印,他用uart0口,我自己改了他的uart.c文件,用uart2口输出,我就改了串口驱动的地址,然后开发板改为uart2口接串口就出现
not boot imagne
程序如下:
#define GPA1CON 0xE0200020
#define UCON2 0xE2900804
#define ULCON2 0xE2900800
#define UMCON2 0xE290080C
#define UFCON2 0xE2900808
#define UBRDIV2 0xE2900828
#define UDIVSLOT2 0xE290082C
#define UTRSTAT2 0xE2900810
#define UTXH2 0xE290820
#define URXH2 0xE2900824
#define rGPA1CON (*(volatile unsigned int *)GPA1CON)
#define rUCON2 (*(volatile unsigned int *)UCON2)
#define rULCON2 (*(volatile unsigned int *)ULCON2)
#define rUMCON2 (*(volatile unsigned int *)UMCON2)
#define rUFCON2 (*(volatile unsigned int *)UFCON2)
#define rUBRDIV2 (*(volatile unsigned int *)UBRDIV2)
#define rUDIVSLOT2 (*(volatile unsigned int *)UDIVSLOT2)
#define rUTRSTAT2 (*(volatile unsigned int *)UTRSTAT2)
#define rUTXH2 (*(volatile unsigned int *)UTXH2)
#define rURXH2 (*(volatile unsigned int *)URXH2)
// 串口初始化程序
void uart_init(void)
{
// 初始化Tx Rx对应的GPIO引脚
rGPA1CON &= ~(0xff<<0); // 把寄存器的bit0~7全部清零
rGPA1CON |= 0x00000022; // 0b0010, Rx Tx
// 几个关键寄存器的设置
rULCON2 = 0x3;
rUCON2 = 0x5;
rUMCON2 = 0;
rUFCON2 = 0;
// 波特率设置 DIV_VAL = (PCLK / (bps x 16))-1
// PCLK_PSYS用66MHz算 余数0.8
//rUBRDIV0 = 34;
//rUDIVSLOT0 = 0xdfdd;
// PCLK_PSYS用66.7MHz算 余数0.18
// DIV_VAL = (66700000/(115200*16)-1) = 35.18
rUBRDIV2 = 35;
// (rUDIVSLOT中的1的个数)/16=上一步计算的余数=0.18
// (rUDIVSLOT中的1的个数 = 16*0.18= 2.88 = 3
rUDIVSLOT2 = 0x0888; // 3个1,查官方推荐表得到这个数字
}
// 串口发送程序,发送一个字节
void uart_putc(char c)
{
// 串口发送一个字符,其实就是把一个字节丢到发送缓冲区中去
// 因为串口控制器发送1个字节的速度远远低于CPsU的速度,所以CPU发送1个字节前必须
// 确认串口控制器当前缓冲区是空的(意思就是串口已经发完了上一个字节)
// 如果缓冲区非空则位为0,此时应该循环,直到位为1
while (!(rUTRSTAT2 & (1<<1)));
rUTXH2 = c; //输出c字符变量
}
// 串口接收程序,轮询方式,接收一个字节
char uart_getc(void)
{
while (!(rUTRSTAT2 & (1<<0)));
return (rURXH2 & 0x0f);
}
作者:
JUCAT
时间:
2017-9-14 19:31
补充:用朱老师的程序,接uart0,终端接com3;我的程序,接uart2,终端还是接com3,换了串口终端不是该改接com吗,可是终端还是只认com3。
欢迎光临 九鼎创展论坛 (http://bbs.9tripod.com/)
Powered by Discuz! X3.2