搞了很久,就是发不出信息来,
不知道怎么回事情呢.他和led点灯程序融合在一起,结果,led灯正常,就是串口收不到数据.
苦恼.
请帮我看看,谢谢
// 略去特殊寄存器地址定义
#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2))
#define TXD0READY (1<<2)
#define RXD0READY (1)
#define PCLK 50000000 //init.c中的clock_init函数设置PCLK为50MHz
#define UART_CLK PCLK //UART0的时钟源设为PCLK
#define UART_BAUD_RATE 115200 //波特率定义
#define UART_BRD ((UART_CLK / (UART_BAUD_RATE * 16)) - 1)
#define S3C2410_MPLL_200MHZ ((0x5c<<12)|(0x04<<4)|(0x00))
void init_uart0(void)
{
GPHCON = 0x00faaa;
GPHUP = 0x7ff; // The pull up function is disabled GPH[10:0]
UFCON0 = 0x00; //不使用FIFO
UMCON0 = 0x00; //不使用流控
ULCON0 = 0x03; //8N1(8个数据位、无较验、1个停止位)
UCON0 = 0x245; //查询方式,UART时钟源为PCLK
UBRDIV0=( (int)(UART_CLK/16./UART_BAUD_RATE+0.5) -1 );
}
//发送一个字符
void putc(unsigned char c)
{
//等待,直到发送缓冲区中的数据已经全部发送出去
while (!(UTRSTAT0 & TXD0READY));
//向UTXH0寄存器中写入数据,UART即自动将它发送出去
UTXH0 = c;
}
void init_clock(void)
{
CLKDIVN = 0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
/* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
__asm__(
"mrc p15, 0, r1, c1, c0, 0\n" /* 读出控制寄存器 */
"orr r1, r1, #0xc0000000\n" /* 设置为“asynchronous bus mode” */
"mcr p15, 0, r1, c1, c0, 0\n" /* 写入控制寄存器 */
);
MPLLCON = S3C2410_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */
}
void wait(volatile unsigned long dly)
{
for(; dly > 0; dly--);
}
int main(void)
{
unsigned long i = 0,j;
GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out; // 将LED1-4对应的GPB5/6/7/8四个引脚设为输出
init_clock();
j = 16000;
i=0;
init_uart0();
while (j) {
j--;
wait(128000);
putc('h');
putc('e');
putc('l');
putc('l');
putc('o');
GPBDAT = (~(1 << (5+i))); // 根据i的值,点亮LED1-4
if (++i == 4)
i = 0;
}
return 0;
}