九鼎创展论坛

标题: 串口输出问题 [打印本页]

作者: 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