| 这里用DMA方式写入DPI 只是证明控制字写入,其数据的写入只需将DC 控制端口设置为1; #include <cdefBF533.h>   //BF533 Register Pointer Definition
 #include <stdio.h>
 #include <sys\exception.h>
 #define CODEC_1836_REGS_LENGTH 7 short sCodec1836TxRegs[CODEC_1836_REGS_LENGTH] ={0x21,0xc8,0x06,0x13,0x20,0x0c,0x80};
 
 void Init_EBIU(void){
 *pEBIU_AMBCTL0 = 0x7bb07bb0;
 *pEBIU_AMBCTL1 = 0x7bb07bb0;
 *pEBIU_AMGCTL = 0x000f;
 }
 void main(void){
 int i;int j;
 *pFIO_DIR=0x0f;
 Init_EBIU();
 
 // write to Port A to reset AD1836
 *pFIO_FLAG_C = 0x08;    //reset
 
 // write to Port A to enable AD1836
 *pFIO_FLAG_S = 0x08;
 
 // wait to recover from reset
 for (i=0; i<0xf0000; i++) asm("nop;");
 // Enable PF4*pSPI_FLG = FLS4;
 // Set baud rate SCK = HCLK/(2*SPIBAUD) SCK = 2MHz
 *pSPI_BAUD = 16;
 // configure spi port
 // SPI DMA write, 16-bit data, MSB first, SPI Master
 *pSPI_CTL = 0x03 | SIZE | MSTR;            //有下划线的是与普通模式不同的
 
 // Set up DMA5 to transmit
 // Map DMA5 to SPI
 *pDMA5_PERIPHERAL_MAP = 0x5000;
 
 // Configure DMA5
 // 16-bit transfers
 *pDMA5_CONFIG = WDSIZE_8;
 
 *pFIO_FLAG_C = 0x02;
 
 // Start address of data buffer
 *pDMA5_START_ADDR = (void *)sCodec1836TxRegs;
 // DMA inner loop count
 *pDMA5_X_COUNT = CODEC_1836_REGS_LENGTH;
 // Inner loop address increment
 *pDMA5_X_MODIFY = 2;
 // enable DMAs
 *pDMA5_CONFIG = (*pDMA5_CONFIG | DMAEN);
 // enable spi
 *pSPI_CTL = (*pSPI_CTL | SPE);
 // wait until dma transfers for spi are finished
 for (j=0; j<0xaff0; j++) asm("nop;");
 
 // disable spi
 // *pSPI_CTL = 0x0000;
 
 
 }
 |