3110|1

252

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

关于AT91SAN7S64串口应用的疑问 [复制链接]

各位大虾,自己写了一个这样的串口程序,但是就是不进中断,AT91接受不到串口调试助手发的数据. 调试助手用的是SSCOM32. 程序如下:
有3个LED灯 在PA0 PA1  PA2 口 是灌电流的接法  调试助手发大于7的数字时,LED全亮 ,小于等于7时,根据数据值点亮LED
#define Fmck      48054857L   /*主时钟为48054857MHz*/
#define BitRate   9600UL     /*波特率定义为9600bps*/
unsigned char key;用来存储接受的数据
int main(void)
{
//int i;
Uart1Init();       //串口0初始化
SystemClockInit(); //系统时钟初始化
LedInit();         //LED对应的管脚初始化
DelayXms(2000);
key=0;
while(1)
{
  
   
   if(key>=7)
  {
   *AT91C_PIOA_CODR=0x07;
  }else{
   *AT91C_PIOA_SODR=0x07;
   *AT91C_PIOA_CODR=key;
  }
}
}
void LedInit(void)
{
*AT91C_PIOA_PER=0x07;  //Enable PA0~2
*AT91C_PIOA_OER=0x07;  //Output Enable PA0~2
*AT91C_PIOA_CODR=0x07; //ON all leds
}
void SystemClockInit(void)
{
*AT91C_PMC_IDR = 0xFFFFFFFF;  //disable all PMC interrupt

*AT91C_PMC_SCER = 1<<0 ;  //Processor Clock Enable
                  
*AT91C_CKGR_MOR = (1<<0)   //Main Oscillator Enable
                  |(0<<1)   //Oscillator is NOT Bypassed
                  |(0xFF<<8);  //Main Oscillator Start-up Time(255)

while(!((*AT91C_PMC_SR)&0x01));  //wait for MOSCS to be set

*AT91C_CKGR_PLLR = (0x0E<<0)  //DIV
                   |(0x3F<<8)  //PLL COUNT
                   |(0x00<<14)  //OUT
                   |(0x48<<16)  //MUL
                   |(0x01<<28); //USB DIV

while(!((*AT91C_PMC_SR)&(0x01<<2)));  //wait for LOCK to be set
while(!((*AT91C_PMC_SR)&(0x01<<3)));  //wait for MCKRDY to be set

*AT91C_PMC_MCKR = (0<<0)  //Slow Clock is selected
                  |(1<<2); //Selected clock divided by 2
                  
while(!((*AT91C_PMC_SR)&(0x01<<3)));  //wait for MCKRDY to be set

*AT91C_PMC_MCKR  |= (0x03<<0);  //PLL Clock is selected.
                  
while(!((*AT91C_PMC_SR)&(0x01<<3)));  //wait for MCKRDY to be set

*AT91C_PMC_PCER =0xFFFFFFFF;  //enable all Peripheral Clock
}
void Uart1Init(void)
{
//PIO模块
*AT91C_PIOA_PDR=(1<<21)|(1<<22);    //PA5,PA6 作为外设使用
*AT91C_PIOA_IDR=(1<<21)|(1<<22);    //禁止PA5、PA6 IO中断
*AT91C_PIOA_PPUER=(1<<21)|(1<<22);  //使能PA5、PA6上拉电阻
*AT91C_PIOA_ASR=(1<<21)|(1<<22);    //连接到A外设(即串口)

//UART模块
*AT91C_US1_CR = (1<<2)    //Reset Receiver
                |(1<<3)    //Reset Transmitter
                |(1<<8);   //Reset Status Bits
               
*AT91C_US1_CR = (1<<4)    //Receiver Enable
                |(1<<6);   //Transmitter Enable
               
*AT91C_US1_MR = (0<<0)    //Normal
                |(0<<4)    //MCK
                |(3<<6)    //8 bits
                |(0<<8)    //USART operates in Asynchronous Mode.
                |(4<<9)    //No parity
                |(0<<13)   //1 stop bit
                |(0<<14)   //Normal Mode
                |(0<<16)   //Least Significant Bit is sent/received first.
                |(0<<17)   //CHRL defines character length.
                |(0<<18)   //The USART does not drive the SCK pin.
                |(0<<19)   //16x Oversampling.
                |(1<<20);  //The NACK is not generated.
               
*AT91C_US1_IER = (1<<0);    //RXRDY Interrupt Enable

*AT91C_US1_BRGR = (Fmck/16/BitRate);  //产生指定的波特率

*AT91C_US1_RTOR = 0;  //The Receiver Time-out is disabled.

*AT91C_US1_TTGR = 0;  //The Transmitter Timeguard is disabled.


//中断控制模块
//初始化中断源6(串口0中断)
AT91C_AIC_SMR[7] = (7<<0)  //The priority level = 0(lowest)
                   |(3<<5); //Positive edge triggered

AT91C_AIC_SVR[7]=(int)Uart1Isr;  //set ISR entrance address

*AT91C_AIC_IECR=(1<<7);  //Enable source ID 6 interrupt
}
void Uart1Isr(void) __irq
{
//unsigned char dat;
if(*AT91C_AIC_ISR!=7)return; //不是该中断源,直接返回
//*AT91C_AIC_ICCR=1<<6; //使用了向量中断,会自动清除中断,这里不用  
//清除串口0状态标志
if(!((*AT91C_US1_CSR)&(1<<0)))return; //不是接收完毕中断,返回
key=(unsigned char)(*AT91C_US1_RHR);  //读取数据
*AT91C_US1_CR|=1<<8;
*AT91C_AIC_EOICR=0;    //中断处理完毕
}
请大虾帮忙分析下什么原因,是调试助手用的不对,还是程序有问题.  我搞了好久都没找到原因.
此帖出自单片机论坛

最新回复

哥们,你的SWD下载协议研究得怎样,最近我也在研究,交流一下?  详情 回复 发表于 2013-1-14 14:41
点赞 关注
 

回复
举报

70

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
哥们,你的SWD下载协议研究得怎样,最近我也在研究,交流一下?
此帖出自单片机论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表