[问题] avr xmega 的usart问题

楼主: papaya125 (都你说就好了)   2014-10-31 16:49:08
请教一下各位前辈大哥们
小弟目前在学习xmega128a1的单芯片
很多不会的地方,参考范例也都写得我不太懂
以下是小弟参考别人然后在自己组起来的程式码
主要就是透过pc的串口调变助手送出波特率使led亮
会的大大可以教我一下吗,无尽的感恩~~~~~~
=====================程式码=============================
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
void USART_INIT (void);
uint8_t usart_rx (USART_t* _usart);
void usart_tx (USART_t* _usart,uint8_t data);
//SWITCH
#define LED1357_ON 1 //设计串口调变助手送出指令1
#define LED2468_ON 2 // 2
//PORT
#define USART_MAIN USARTE0
int main(void)
{
PORTJ_DIR=0xFF; //LED的方向开
USART_INIT();
sei();
}
//=========初始化usart=============
void USART_INIT (void)
{
PORTE.DIRSET = PIN3_bm; //TX 输出
PORTE.DIRCLR = PIN2_bm; //RX 输入
//控制模式选择= 异步 | 基偶校验关闭 | 停止位1位 | 长度8bit
USARTE0.CTRLC= USART_CMODE_ASYNCHRONOUS_gc | USART_PMODE_DISABLED_gc //通讯模式选择
|USART_SBMODE_bm | USART_CHSIZE0_bm |USART_CHSIZE1_bm ;
USARTE0.BAUDCTRLA = 103; //波特率 9600
USARTE0.BAUDCTRLB = 0;
USARTE0.CTRLB= USART_RXEN_bm | USART_TXEN_bm | USART_TXB8_bm; //启用接收.传送.8bit
PMIC.CTRL |= PMIC_HILVLEN_bm | PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm;
USARTE0.CTRLA= USART_RXCINTLVL_HI_gc; //接收中断"高" 当单芯片的STATUS暂存器的RXCID被置位时,触发中断
}
//=========当USARTE0接收完毕时产生中断========
ISR(USARTE0_RXC_vect)
{
PORTJ_OUTSET=0xff;
switch(usart_rx(&USART_MAIN))
{
case LED1357_ON:
PORTJ_OUTCLR = 0X55; //LED亮
break;
case LED2468_ON:
PORTJ_OUTCLR = 0XAA; //LED亮
break;
case LED_ON :
PORTJ_OUTCLR = 0X01;
break;
default: //上述皆无
PORTJ_OUTCLR = 0Xff;
break;
}
}
//=======中断后读取DATA=============
uint8_t usart_rx(USART_t* _usart) //=======接收完成中断======== uint8_t为0~255超过归0重来 (0x00~0xFF)
{
while(((_usart->STATUS)& USART_RXCIF_bm)==0); //_usart的成员STATUS读 "单芯片USART_RXCIF_bm地方" 的值,读到0时 表示有接收中断
return (_usart->DATA); //回传 _usart存取他的成员DATA(数据寄存器)
}
void usart_tx( USART_t* _usart , uint8_t data ) //======发送完成中断==========
{
while (((_usart->STATUS) &USART_DREIF_bm)==0); //_usart的成员STATUS读 "单芯片USART_D REIF_bm地方" 的值,读到0时 表示有data
_usart->DATA=data; //_usart存取他的成员DATA(数据寄存器) =data
}
=================================================================================
作者: johnpage (johnpage)   2014-10-31 18:02:00
问题???问题???
楼主: papaya125 (都你说就好了)   2014-11-01 10:42:00
问题是我pc传指令 没有跳进中断里面Q___Q
作者: easypro   2014-11-01 11:04:00
sei();下加个while(1){};
楼主: papaya125 (都你说就好了)   2014-11-06 17:05:00
感谢e大 果然可以

Links booklink

Contact Us: admin [ a t ] ucptt.com