标准sport
1.配置好sru
2.清除配置寄存器
*pSPMCTL5=0;
*pSPCTL5=0; //clear register first
3.配置FS和CLK的分频系数,前四位是FS的,后四位是CLK的
*pDIV5=0xa0020; //FS:a CLK:20
4.配置sport的设置寄存器,使能SPEN_A是使能A通道,AB通道的关系是公用一个FS和CLK,但是有不同的数据端,故一次可以收发两个数据。
*pSPCTL5 = ( SLEN8 | SPTRAN | IFS | ICLK | SPEN_A | SPEN_B | FSR );//| SDEN_A | DIFS | LAFS OPMODE |
5.向发送缓冲寄存器写数据,开始发送数据。
*pTXSP5A=0xa; //channel A
*pTXSP5B=0xa; //channel B
6.等待发送结束,查询SPCTLx的状态位DXS_A
while(*pSPCTL5 & 0x80000000); //polling to wait until sport transmiting finsih
DMA方式sport
1,2,3步骤同上
4,配置DMA相关寄存器,即设置地址,增量,发送个数,需要注意发送个数寄存器的长度为16位,故不能发送个数超过FFFF个数据
*pIISP5A=(unsigned int)output; //DMA address
*pIMSP5A=1; //DMA modify
*pCSP5A=LEN; //DMA count number
5.配置SPCTLx寄存器,使能DMA,即SDEN_A
*pSPCTL5 = ( SLEN8 | SPTRAN | IFS | ICLK | SPEN_A | SPEN_B | FSR | SDEN_A);// | DIFS | LAFS OPMODE |
6.如何查询标志位还没有弄清楚,目前查询SPMCTLx的DMASxA不管用,而且x和y也不知道有什么区别
链式DMA方式sport
待续。。。