打印
[AVR单片机]

atxmega的串口!

[复制链接]
3576|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2011-5-23 17:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 areshan 于 2011-5-23 18:50 编辑

一个简单的串口我今天一天都没有搞定,不知道哪里没有设置好,用的默认2M晶振,设置的是2400的波特率,希望大家能帮我看看,着急!
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>


void uart_init(void)
{
USARTE0.CTRLA=0x10;    //开接收完成中断
USARTE0.CTRLB=0x18;     //使能接收和发送
USARTE0.CTRLC=0x03;     //异步,无奇偶校验,1位停止位,8位数据位
USARTE0.BAUDCTRLA=0x33;  //2400的波特率
PORTE.DIR|=PIN3_bm;        //tx方向输出
PORTE.DIR&=~PIN2_bm;    //rx方向输入
}

void main(void)
{
uart_init();
for( ; ; )
{
  while(!(USARTE0.STATUS&0x20))
   asm("nop");
  USARTE0.DATA=0x33;
   
  }
}
主函数里就是等待发送寄存器空后,在发送0X33,但是在仿真的时候,才开始能够能到2、3次发送寄存器空,后面等好久都没有等到!
发送寄存器不为空,说明数据没有发送出去,为什么发送数据不是固定的时间呢,为什么要等好久,远远超过安装2400波特率计算出来的发送速度!
群里有用AVR的studio,和AVR的dragon仿真的吗?到底是怎么回事呢?

相关下载

相关帖子

沙发
areshan|  楼主 | 2011-5-23 17:24 | 只看该作者
期待雁塔大叔出现!

使用特权

评论回复
板凳
areshan|  楼主 | 2011-5-23 18:57 | 只看该作者
有用过XMEGA系类的能给帮我检查下吗,是不是忘了什么呢?一共6个寄存器,我都开了,没有开中断,但是发送应该不用中断,用查询while中的,等待发送寄存器空也是可以的。。。。。。但是仿真时候的很奇怪,while里在开始2、3个字节时可以写USARTE0.DATA后,发送空可以由1变成0,后面就一直是0,程序出不来了,真奇怪,一定我是忽略了什么,还希望用过这类芯片的告诉我声,谢谢了!

使用特权

评论回复
地板
areshan|  楼主 | 2011-5-24 08:39 | 只看该作者
哎,还是没有搞定,估计是串口没有复位或波特率定时器没有打开,哎,xmega好像是和以前的mega的不一样了!郁闷!!!!!!

使用特权

评论回复
5
areshan|  楼主 | 2011-5-24 12:52 | 只看该作者
晕死,原来是avr的studio的单步仿真有问题,在while循环里出不来,但是在全速运行的时候,用串口工具是可以看到数据的。哎,浪费了我1天半的时间,开始以为usart没有初始化,后来怀疑data有写时序之类的,后来怀疑是波特率时钟没有启动。。。。。。。。。。
问了我们同事,它让我用全速运行,我尽然不知道那个全速运行,我一直用单步顺序运行,哎!!!!!!
用的是2M内部晶振,9600的波特率,初始化代码如下
void uart_init(void)
{
        PORTE.DIRSET=PIN3_bm;
        PORTE.DIRCLR=PIN2_bm;
       
        USARTE0.CTRLC=0x03;

        USARTE0.BAUDCTRLA=0x0C;
        USARTE0.CTRLB|=0x18;

       
        }

使用特权

评论回复
6
areshan|  楼主 | 2011-5-24 12:52 | 只看该作者
哎!多努力!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝