Помогите разобраться с последовательностью действий для работы с 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;
}
Правильно ли я делаю?