Подскажите порядок работы.
Как я это вижу сам. 1. Делаю инициализацию void DAC::Init() { AT91F_PIOA_CfgPMC(); AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, ((unsigned int) AT91C_PA4_NPCS1 ) | ((unsigned int) AT91C_PA1_MOSI ) | ((unsigned int) AT91C_PA2_SPCK ), // Peripheral A 0); // Peripheral B AT91F_AIC_CfgPMC(); AT91F_SPI_CfgPMC(); SPI_Configure(AT91C_BASE_SPI, AT91C_SPI_MSTR| // Master Mode AT91C_SPI_PS_FIXED| // Fixed peripheral AT91C_SPI_MODFDIS| // Mode Fault Detection disable AT91C_SPI_PCS1); AT91F_SPI_CfgCs (1, (unsigned int)(0xff<<8)); AT91F_SPI_Enable(AT91C_BASE_SPI); AT91F_PDC_Open(AT91C_BASE_PDC_SPI); AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_SPI,0, 0, (void (*)(void))IRQ_SPI); AT91C_BASE_AIC->AIC_EOICR = 0 ; /* unstack one level */ AT91C_BASE_AIC->AIC_ICCR = ( 1<<AT91C_ID_SPI ); AT91F_SPI_SendFrame (AT91C_BASE_SPI, TxBuf, 5, 0,0 ); AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SPI); __enable_interrupt(); AT91F_SPI_EnableIt(AT91C_BASE_SPI,AT91C_SPI_SPENDTX); //AT91C_US_RXRDY); }
inline void SPI_Configure(AT91PS_SPI pSPI, unsigned int mode) { //* Reset the SPI mode pSPI->SPI_MR = 0 ; //* Disable all interrupts pSPI->SPI_IDR = 0xFFFFFFFF ; //* Reset all the Chip Select register pSPI->SPI_CSR[0] = 0 ; pSPI->SPI_CSR[1] = 0 ; pSPI->SPI_CSR[2] = 0 ; pSPI->SPI_CSR[3] = 0 ; //* Disable receiver and transmitter and stop any activity immediately pSPI->SPI_CR = AT91C_SPI_SPIDIS; AT91F_SPI_CfgMode (pSPI, mode); }
2. Обработчик прерывания : static __arm __irq void IRQ_SPI() { AT91C_BASE_AIC->AIC_IVR = 0 ; /* enter interrupt in protected mode */ unsigned int st,st1; st = (AT91C_BASE_SPI->SPI_SR) ; st1 = (AT91C_BASE_SPI->SPI_IMR); st &=st1; if( st & AT91C_SPI_SPENDTX) { AT91F_SPI_SendFrame (AT91C_BASE_SPI, TxBuf, 1, 0,0 ); } AT91C_BASE_US1->US_CR = AT91C_US_RSTSTA; AT91C_BASE_AIC->AIC_EOICR = 0 ; };
В таком виде все работает(что то передается по шине), но возникает вопрос: Нужно ли управлять NPCS1? (Использую всего одно устройство - ЦАП). NPCS1 держиться постоянно 0.
Какие еще особенности могут быть при работе с ЦАП?
Сообщение отредактировал Daermon - Nov 23 2007, 06:11
|