|
各位大哥能不能幫我看看錯在哪裡:
晶振8M , Baudrate 9600, baudrate一直調不出來
void Config_OSC_ExternalXTAL(void)
{
//XOSCCTRL
//振盪頻率選擇2~9M : OSC_FRQRANGE_2TO9_gc
//振盪源選擇外部0~16M XTAL , Restart CLK設為16K CLK : OSC_XOSCSEL_XTAL_16KCLK_gc
OSC.XOSCCTRL = (uint8_t)( OSC_FRQRANGE_2TO9_gc | OSC_XOSCSEL_XTAL_16KCLK_gc ) ;
//外部振盪器致能
OSC.CTRL = OSC_XOSCEN_bm ;
//等待振盪穩定;
do {} while ( (OSC.STATUS & OSC_XOSCRDY_bm ) == 0 );
//設定分頻
// uint8_t PSconfig = (uint8_t) ( CLK_PSADIV_1_gc | CLK_PSBCDIV_1_2_gc );
// CCPWrite( &CLK.PSCTRL, PSconfig );
//Clock來源選擇
uint8_t clkCtrl = ( CLK.CTRL & ~CLK_SCLKSEL_gm ) | CLK_SCLKSEL_XOSC_gc;
CCPWrite( &CLK.CTRL, clkCtrl );
}
void USART_INIT(void)
{
char cCtrlC = 0;
unsigned int nBsel = 0 ;
char cBscale = 0;
PORTC.OUT |= PIN3_bm ;
PORTC.DIRSET = PIN3_bm;
PORTC.DIRCLR = PIN2_bm;
cCtrlC = USART_CMODE_ASYNCHRONOUS_gc ;
cCtrlC |= USART_CHSIZE_8BIT_gc ;
cCtrlC |= USART_PMODE_DISABLED_gc ;
cCtrlC &= ~USART_SBMODE_bm ;
USARTC0.CTRLC = cCtrlC;
//baudrate setting
USARTC0.BAUDCTRLA =51; //(unsigned char)nBsel;
USARTC0.BAUDCTRLB =0; //(cBscale << USART_BSCALE0_bp) | (nBsel >> 8);
//Enable Transmite and Receive Interrupt
USARTC0.CTRLA = USART_RXCINTLVL_HI_gc | USART_TXCINTLVL_HI_gc ;
//
USARTC0.CTRLB &= ~USART_CLK2X_bm ;
USARTC0.CTRLB |= USART_RXEN_bm ; //Enable Receive ;
USARTC0.CTRLB |= USART_TXEN_bm ; //Enable Transmite;
PMIC.CTRL = PMIC_HILVLEN_bm; // enable low level interrupts
sei();
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|