Diskussion:ARM MP3/AAC Player

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

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
 }