[問題] 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