Помогите разобраться с последовательностью действий для работы с USART на AT91rm9200
Произвожу след действия:
_Usart.Init(AT91C_BASE_US1,AT91C_US_ASYNC_MODE, AT91C_ID_US1); _Usart.AIC_Config_EnableInterrupt(AT91C_BASE_US1,AT91C_ID_US1); _Usart.Start(AT91C_BASE_US1,AT91C_ID_US1);
void Usart1::Init(AT91PS_USART USART_PT, unsigned int Mode, unsigned int UsartId) { AT91F_US_Close(USART_PT); AT91C_BASE_PMC->PMC_PCDR |= (1<<UsartId); // На плате AS-9200 выведен разьем USART1 его и конфигурирую...вот правильно или нет - не знаю! AT91C_BASE_PIOB->PIO_ASR = ((unsigned int) AT91C_PB21_RXD1)|((unsigned int) AT91C_PB20_TXD1); AT91C_BASE_PIOB->PIO_BSR = 0; AT91C_BASE_PIOB->PIO_PDR = ((unsigned int) AT91C_PB21_RXD1)|((unsigned int) AT91C_PB20_TXD1); AT91C_BASE_PMC->PMC_PCER |=(1<< UsartId);
AT91F_US_Configure(USART_PT, MCK, Mode ,57600 ,0 ); }
void Usart1::AIC_Config_EnableInterrupt(AT91PS_USART USART_PT,unsigned int UsartId) { unsigned int status; status=(USART_PT->US_CSR) ; status=status; AIC_DisableInterrupt(UsartId); AIC_Config(USART_PT,UsartId); AIC_EnableInterrupt(UsartId); }
void Usart1::Start(AT91PS_USART USART_PT,unsigned int UsartId) { AT91F_US_EnableTx(USART_PT); WriteData(USART_PT,"0xaa",sizeof("0xaa"),0,0); }
void Usart1::WriteData(AT91PS_USART USART_PT ,char *buffer, unsigned int counter,char *buffer2,unsigned int counter2) { AT91PS_PDC pPDC= (AT91PS_PDC) &(USART_PT->US_RPR); if( ( pPDC->PDC_TCR)==0) { pPDC->PDC_TPR = (unsigned int)buffer;//RS232_Buf.Buf_Out;// pPDC->PDC_TCR = counter;//RS232_Buf.TxSize;// AT91F_US_EnableIt (USART_PT, AT91C_US_ENDTX); } if((pPDC->PDC_TNCR)==0) { pPDC->PDC_TNPR = (unsigned int)buffer2; pPDC->PDC_TNCR = counter2; AT91F_US_EnableIt (USART_PT, AT91C_US_ENDTX); } return; }
Правильно ли я делаю?
|