我用的是at91sam7x256芯片,怎么调串口也调不通,不知道哪里出问题了。不过要是把以前我写的一个可以正常运行的程序(包括串口驱动)下载到板子上以后就可以正常运行了,如果把板子清空,就又不能运行了,可能是初始化时错了,但又找不出来,大家帮帮啊,谢谢了啊。<br />源代码如下:<br /><br />#include "/include/at91sam7S64/at91sam7s64.h"<br />#include "/include/at91sam7s64/lib_at91sam7s64.h"<br /><br /><br />void AT91F_LowLevelInit(void);<br />void usart0_init(void);<br />void usart0_write(char * tx_buffer, unsigned int tx_counter);<br /><br />#define MCLK 48000000<br />#define BAUD 19200<br /><br /><br />int CMain(void)<br />{<br /> int index = 500000;<br /> AT91F_LowLevelInit();<br /> <br /> usart0_init();<br /> while(1)<br /> {<br /> usart0_write("Hello, World!
", 14);<br /> while(index--);<br /> index = 500000;<br /> }<br /> <br /> return 0;<br />}<br /><br /><br />void AT91F_LowLevelInit(void)<br />{<br /> //Disables the Watchdog Timer<br /> AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;<br /> <br /> <br /> //Enabling the Main Oscillator<br /> AT91C_BASE_PMC->PMC_MOR = 0x01 | 0x07 << 8;<br /> while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS))<br /> <br /> //Setting PLL and divider<br /> AT91C_BASE_PMC->PMC_PLLR = 24 | (0x28 << 8) | (124 << 16) | AT91C_CKGR_USBDIV_1;<br /> while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK));<br /> while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));<br /> <br /> //Selection of Processor Clock<br /> AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;<br /> while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));<br /> <br /> //Selection of Master Clock <br /> AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;<br /> while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));<br /> <br />}<br /><br /><br />void usart0_init(void)<br />{<br /> <br /> AT91F_US0_CfgPMC(); <br /> AT91F_US0_CfgPIO();<br /> <br /> AT91F_US_Configure(<br /> AT91C_BASE_US0,<br /> MCLK,<br /> AT91C_US_ASYNC_MODE,<br /> BAUD,<br /> 0);<br /> AT91C_BASE_US0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN | AT91C_US_STTTO;<br /> <br /> <br />}<br /><br /><br />void usart0_write(char * tx_buffer, unsigned int tx_counter)<br />{<br /> AT91C_BASE_PDC_US0->PDC_TPR = (unsigned int)tx_buffer;<br /> AT91C_BASE_PDC_US0->PDC_TCR = tx_counter;<br /> AT91F_PDC_EnableTx (AT91C_BASE_PDC_US0); <br /> //while (AT91C_BASE_PDC_US0->PDC_TCR & 0xFFFF);<br />}<br /><br /> |
|