搜索
bottom↓
回复: 1

at91sam7串口程序问题, 烦恼中!大家来会诊下

[复制链接]

出0入0汤圆

发表于 2010-8-10 14:41:50 | 显示全部楼层 |阅读模式
调了好多天的串口程序,就是没搞通。一个板子向电脑发送数据的测试程序。
在keil下不接ulink2模拟仿真时,US0_THR中会有数据!
在keil下用ulink2调试时,波特率和帧格式寄存器都对,就是US0_THR中没有数据。
#include <AT91SAM7X256.H>                  
#define US_RXD (1<<0)
#define US_TXD (1<<1)
#define AT91B_MAIN_OSC        18432000               // Main Oscillator MAINCK
#define AT91B_MCK             ((18432000*73/14)/2)   // Output PLL Clock
#define BR    9600                        /* Baud Rate */
#define BRD  (AT91B_MCK/16/BR)              /* Baud Rate Divisor */
AT91S_USART * pUSART = AT91C_BASE_US0;
unsigned char buff[256];
unsigned char index;
sendchar (int ch)  
{  
    while (!(pUSART->US_CSR & AT91C_US_TXRDY));   /* Wait for Empty Tx Buffer */
    return (pUSART->US_THR = ch);                                                         
}
int main(void)
{
        unsigned int i,delay;
//        unsigned char val;
//        unsigned int status;
//        *AT91C_CKGR_MOR=0x700;                          //使能主振荡器和设置起振时间
//        *AT91C_PMC_MCKR=0x01;                          //选定处理器时钟为主机时钟,不分频
        *AT91C_PMC_SCER=AT91C_CKGR_MOSCEN;//0x00000001;使能处理器和USB时钟  
        *AT91C_PMC_PCER=(1<<AT91C_ID_US0);   //值为6,使能USART0时钟
        *AT91C_PIOA_PDR=US_RXD|US_TXD;        //禁止两管脚IO口功能
        *AT91C_PIOA_ASR=US_RXD|US_TXD;        //将IO口分配给外围A
        //*AT91C_US1_CR=0x10c;            //复位发送器、接收器和状态位,
        *AT91C_US0_CR=AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXDIS|AT91C_US_TXDIS;
        *AT91C_US0_MR=0x8c0;                          //普通模式,时钟为MCK,8位数据位,1位停止位,无校验,over为0
        *AT91C_US0_IDR=0xf3fff;         //禁止所有USART相关中断
        *AT91C_US0_BRGR=BRD;             //波特率为9600,AT91C_US0_BRGR为CD值
    //*AT91C_US0_BRGR=30;             //波特率为38400,AT91C_US0_BRGR为CD值
        //*AT91C_US1_CR=0x10c;            //复位发送器、接收器和状态位,
        *AT91C_US0_CR=0x50;             //使能接收和发送,之前US0_CSR为0x1818,使能接收和发送后为0x1a1a
//        index=0;
        while(1)               
        {
                for(i=1;i<10;i++)
                {
                        sendchar(i);
                        for(delay=0;delay<100;delay++);
                }
               
        }
}

然后我用keil下的例程,目录是C:\Keil\ARM\Boards\Atmel\AT91SAM7X-EK\Hello
这个例子稍微搞一下,在主循环while(1)中,加了个sendchar(1)和一个延时,加个extern声明,还是收不到数据。
相当的郁闷啊。
国内搞at91的论坛不多,好不容易找到一个,大家踊跃发言啊!
Any advice is welcome!

出0入0汤圆

 楼主| 发表于 2010-8-11 14:10:38 | 显示全部楼层
自己顶一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 16:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表