qink2008 发表于 2010-8-17 17:08:26

解决问题(AT91)奖励30元人民币!!!!!!记得把银行卡号告诉我

调了n天的串口程序,没搞通。一个板子向电脑发送数据的测试程序。
在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;
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声明,还是收不到数据。
相当的郁闷啊。

Any advice is welcome
解决了问题不付钱,版主封我号!
联系我QQ:416110533

bluefeel 发表于 2010-8-17 17:14:43

快点跟进

lm78l05 发表于 2010-8-17 17:26:18

會不會是硬件的問題呢,你查過硬件嗎?

qink2008 发表于 2010-8-17 17:28:12

回复【2楼】lm78l05 JimoPanda
-----------------------------------------------------------------------

   我也怀疑过硬件问题,可是用开发板试了也收不到数据!
谢谢关注!!!

lihuyong 发表于 2010-8-17 17:31:29

没用过AT91,纯帮顶,不收费的

mcukilller 发表于 2010-8-17 17:33:11

可以参考一下我以前修改的USB转串口的例子,不过是用IAR做的!
点击此处下载 ourdev_575579.rar(文件大小:423K) (原文件名:1.rar)

yu_wen 发表于 2010-8-17 17:45:57

建议修改下程序,看能不能接收,

lijg8421 发表于 2010-8-17 17:52:55

*AT91C_US0_CR=AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXDIS|AT91C_US_TXDIS;
我都是*AT91C_US0_CR=AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RSTSTA;//收发,状态复位

另外函数有返回也要加个返回值类型吧,int sendchar (int ch)
sendchar (int ch)   
{   
    while (!(pUSART->US_CSR & AT91C_US_TXRDY));   /* Wait for Empty Tx Buffer */   
    return (pUSART->US_THR = ch);                                                            
}   

如果用mdk的话时钟可以直接配置,直观不易出错!

hansliu 发表于 2010-8-17 18:45:02

回复【楼主位】qink2008
-----------------------------------------------------------------------

楼主工作思路不对,要先做个最简单的发(上位机收),收(上位机发)保证硬件无误,先用串口调试助手吧硬件搞定。在是数据打包,调试通信命令,由简入繁吗!

qink2008 发表于 2010-8-17 20:28:14

回复【8楼】hansliu
-----------------------------------------------------------------------

大哥    这已经是最简单的测试程序了,只是向串口助手发十个数字

qink2008 发表于 2010-8-17 20:30:48

回复【7楼】lijg8421
-----------------------------------------------------------------------

这个应该不影响吧   我试试看

again 发表于 2010-8-17 20:38:45

唉!为什么都拿钱开路呢!这种问题作为一个研发人员怎么会解决不了?况且ATMEL底层都帮你做好了呀找下都不行嘛!

w_ang 发表于 2010-8-17 20:42:17

我看成30万了

fsclub 发表于 2010-8-17 20:56:07

看到商机,开个解决技术问题的网站,悬赏解决问题。
由网站人员评价解决是否解决了问题,然后网站提成。

517456 发表于 2010-8-17 21:12:16

不知你的串口是什么样的?我以前用过PL2303的USB转串口由于驱动不好,接收端正常,发送端不行。
AT91的例程是可以正常运行的,它的串口我还用过!

lihuyong 发表于 2010-8-17 21:45:43

回复【13楼】fsclub 绿林好汉
看到商机,开个解决技术问题的网站,悬赏解决问题。
由网站人员评价解决是否解决了问题,然后网站提成。
-----------------------------------------------------------------------

armok那次不是招这样的人嘛,专兼职均可。

负责回答网站的技术问题。

fujianhua 发表于 2010-8-17 22:09:56

硬件上把收发端连接,自发自收,测一下

wychao 发表于 2010-8-18 08:18:23

*AT91C_US0_CR=AT91C_US_RSTRX|AT91C_US_RSTTX|AT91C_US_RXDIS|AT91C_US_TXDIS;
错了吧?应该是使能,而不是DIS

qink2008 发表于 2010-8-18 11:14:19

封贴了 !!!

我的串口是扩展出来的,驱动没装好,害的我瞎忙了好久!

以后有问题继续探讨啊!
页: [1]
查看完整版本: 解决问题(AT91)奖励30元人民币!!!!!!记得把银行卡号告诉我