Diskussion:ARM MP3/AAC Player
Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
auf die Diskussionsseite verschoben, mir ist nicht ganz klar was der Abschnitt aussagen soll:
Error Sources
File mmc.c [void init_spi()] -- Example Olimex-Board SAM7-Pxxx for SD-Card-Use
{ BYTE i; pPIOA->PIO_PDR = AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK; // | NCPS_PDR_BIT; pPIOA->PIO_ASR = AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK; /// not here: | NCPS_ASR_BIT; pPIOA->PIO_PER = NCPS_PDR_BIT; // enable PIO of CS-pin pPIOA->PIO_SODR = NCPS_PDR_BIT; // set pPIOA->PIO_OER = NCPS_PDR_BIT; // output pPMC->PMC_PCER = ( (WORD) 1 << AT91C_ID_SPI ); // n.b. IDs are just bit-numbers pSPI->SPI_CR = AT91C_SPI_SPIEN | AT91C_SPI_SWRST; pSPI->SPI_MR = AT91C_SPI_MSTR | AT91C_SPI_PS_FIXED | AT91C_SPI_MODFDIS; pSPI->SPI_MR &= 0xFFF0FFFF; // clear old PCS - redundant (AT91lib) pSPI->SPI_MR |= ( (SPI_MR_PCS<<16) & AT91C_SPI_PCS ); // set PCS // CHANGES // without the delays 1<<24 & 2<<16 toggles the CS with SCLK (a bug???) #your oszi never lies pSPI->SPI_CSR[SPI_CSR_NUM] = AT91C_SPI_NCPHA | AT91C_SPI_BITS_8 |(1<<24)|(2<<16); if_spiSetSpeed(0x78); //SPI to MSCLK:120 = 400kHz pSPI->SPI_CR = AT91C_SPI_SPIEN; // switch SPI on for(i=0;i<10;i++) xmit_spi(0xFF); //10x8 bits are enough pPIOA->PIO_ODR = NCPS_PDR_BIT; // input pPIOA->PIO_CODR = NCPS_PDR_BIT; // clear pPIOA->PIO_ASR = NCPS_ASR_BIT; // use function A (also reset-default) pPIOA->PIO_PDR = NCPS_PDR_BIT; // set PIO-controller-bypass for peripheral-function }