?? sport.c
字號:
/*msg pingpong mechanism version
data: 2003/10
*/
#ifndef _SPORT_H_
#include "sport.h"
#endif
#ifdef _PINGPONG_VER
const unsigned char SPORT_EDMA_R_PING[3] = {SPORT0_EDMA_R_PING,
SPORT1_EDMA_R_PING,
SPORT2_EDMA_R_PING};
const unsigned char SPORT_EDMA_R_PONG[3] = {SPORT0_EDMA_R_PONG,
SPORT1_EDMA_R_PONG,
SPORT2_EDMA_R_PONG};
#endif
const unsigned char McBSPx_EDMA_Ch[3] = {12,14,17};
const unsigned char McBSPr_EDMA_Ch[3] = {13,15,18};
//unsigned int McBSPr_pBuf[3]; //reserved the buf address
//const unsigned char McBSPx_EDMA_TCC[3] = {8,8,10};
//const unsigned char McBSPr_EDMA_TCC[3] = {9,9,9};
/*--------------------------------------------------------------------------------*/
/* Description:McBSP test in loopback mode */
/* Parameter: ch: The McBSP Num */
/* Return: if there is some error , return 1 */
/* else return 0 */
/* Note: NULL */
/*--------------------------------------------------------------------------------*/
int mcbsp_test(unsigned int ch)
{
volatile unsigned int temp =0,temp1;
volatile McBSP_REG * mcbsp;
if(ch > 2) return 1 ;
mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
mcbsp->SPCR = 0; /* reset serial port */
mcbsp->SRGR = (1<<CLKSM) + (0<<FSGM) +
(20<<FPER) + (74<<CLKGDV);
mcbsp->PCR = (1<<FSXM) + (1<<CLKXM);
mcbsp->RCR = (1<<DATDLY) + (5<<WDLEN1); /* one 32 bit data/frame */
mcbsp->XCR = (1<<DATDLY) + (5<<WDLEN1); /* one 32 bit data/frame */ /* one 16 bit data/frame */
mcbsp->SPCR = (1<<FRST) + (1<<GRST) + (1<<DLB) +
(1<<XRST) + (1<<RRST) + (1<<RJUST);
mcbsp->DXR = 0xAAAAAAAA;
temp1 = mcbsp->DRR;
temp1 = mcbsp_read(ch);
mcbsp_write(0x55555555,ch);
temp = mcbsp_read(ch);
if (temp != 0x55555555)
{
temp = 1;
return temp;
}
mcbsp_write(0xAAAAAAAA,ch);
temp = mcbsp_read(ch);
if (temp != 0xAAAAAAAA)
{
temp = 1;
return temp;
}
return 0;
}
/*-------------------------------------------------------------------------*/
/* mcbsp_write() - used for write to McBSP */
/*-------------------------------------------------------------------------*/
void mcbsp_write(int out_data,unsigned int ch)
{
int temp;
volatile McBSP_REG * mcbsp;
mcbsp = (volatile McBSP_REG *)McBSP_BASE_ADDR(ch);
temp = mcbsp->SPCR & 0x20000;
while ( temp == 0)
{
temp = mcbsp->SPCR & 0x20000;
}
mcbsp->DXR = out_data;
}
/*-------------------------------------------------------------------------*/
/* mcbsp_read() - used for read from McBSP */
/*-------------------------------------------------------------------------*/
int mcbsp_read(unsigned int ch)
{
int temp;
volatile McBSP_REG * mcbsp;
mcbsp = (volatile McBSP_REG *)McBSP_BASE_ADDR(ch);
temp = mcbsp->SPCR & 0x2;
while ( temp == 0)
{
temp = mcbsp->SPCR & 0x2;
}
temp = mcbsp->DRR;
return temp;
}
/*-------------------------------------------------------------------------*/
/* mcbsp_init() - */
/*-------------------------------------------------------------------------*/
void mcbsp_init(unsigned int ch, unsigned int ClkGdv)
{
int wait;
volatile McBSP_REG * mcbsp;
mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
mcbsp->SPCR = 0; /* reset serial port */
/*********************************************************************************/
/*modefied by shiyan at 11/6/2003*/
mcbsp->SRGR = ((1<<CLKSM) + (0<<FSGM) +
(320<<FPER) + (ClkGdv<<CLKGDV));
// mcbsp->SRGR = ((1<<CLKSM) + (0<<FSGM) +
// ((ELEMENT_SIZE*MSG_SIZE-1)<<FPER) + (ClkGdv<<CLKGDV));
/*********************************************************************************/
mcbsp->PCR = ((1<<FSXM) + (1<<CLKXM)
+(0<<FSRM) + (0<<CLKRM));
mcbsp->XCR = ((1<<FIG) + (5<<WDLEN1) +
((MSG_SIZE-1)<<FRLEN1) + (0<<DATDLY));
mcbsp->RCR = ((1<<FIG) + (5<<WDLEN1) +
((MSG_SIZE-1)<<FRLEN1) + (0<<DATDLY));
mcbsp->MCR = 0;
mcbsp->SPCR |= (1<<GRST);
for (wait=0; wait<0x10; wait++);
mcbsp->SPCR |= ((1<<FREE)+(1<<FRST));
}
/*-------------------------------------------------------------------------*/
/* mcbsp_test_init() */
/*-------------------------------------------------------------------------*/
void mcbsp_test_init(unsigned int ch)
{
volatile McBSP_REG * mcbsp;
int wait;
mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
mcbsp->SPCR = 0; /* reset serial port */
mcbsp->SRGR = (1<<CLKSM) + (0<<FSGM) + (128<<FPER) + (5<<CLKGDV);
mcbsp->PCR = (1<<FSXM) + (1<<CLKXM);
mcbsp->RCR = (1<<FIG) + (0<<DATDLY) + (5<<WDLEN1); /* one 32 bit data/frame */
mcbsp->XCR = (1<<FIG) + (0<<DATDLY) + (5<<WDLEN1); /* one 32 bit data/frame */ /* one 16 bit data/frame */
mcbsp->MCR = 0;
mcbsp->SPCR |= (1<<GRST);
for (wait=0; wait<0x10; wait++);
mcbsp->SPCR |= (1<<FRST) + (1<<FREE) + (1<<XRST) + (1<<RRST);
}
/*-------------------------------------------------------------------------*/
void SPI_Slave_Init(unsigned int ch)
{
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
volatile McBSP_REG * mcbsp;
mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
mcbsp->SPCR = 0; /* reset serial port */
mcbsp->SPCR |= (2<<CLKSTP); //10: without delay
//11: with delay
mcbsp->SRGR = ((1<<CLKSM) + (0<<FSGM) + (1<<CLKGDV));
mcbsp->PCR = ((1<<FSXP) + (1<<CLKXP)+ (0<<CLKRP)) ; //CLKXP = 0: transmit data on the rising edge of CLKX
// = 1: transmit data on the falling edge of CLK
mcbsp->RCR = ((2<<WDLEN1) + (0<<DATDLY));
mcbsp->XCR = ((2<<WDLEN1) + (0<<DATDLY));
mcbsp->SPCR |= (1<<GRST);// + (0<<DXENA));
asm(" nop 9 "); //等待2個周期
}
void McBSP_Start(unsigned int ch)
{
volatile McBSP_REG * mcbsp;
mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
mcbsp->SPCR |= (1 << XRST) + (1 <<RRST);
asm(" nop 9 "); //等待2個周期
}
void McBSP_Reset(unsigned int ch)
{
volatile McBSP_REG * mcbsp;
mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
mcbsp->SPCR &= ( 0xFFFFFFFF^((1<<XRST) + (1<<RRST)));
}
void evt_edmax_init(int src, int dst, int size, int ch)
{
//Config the EDMA Channel EDMA Transfer Parameters
// *(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + OPT)= 0x41180002;
//PRI ESIZE 2DS SUM 2DD DUM TCINT TCC Reserved LINK FS
//010 00 0 01 0 00 1 1001 00000000000000 1 0
*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + OPT)= ((0<<PRI) + (0<<ESIZE)+
(1<<SUM) + (0<<DUM) + (0<<TCINT) + (ch<<TCC)+
(1<<LINK) + (0<<FS));
*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + SRC)= src;
*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + CNT)= size;
*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + DST)= dst;
*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + IDX)= 0x00000000;
*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + LNK)= ((0xffff& SPI_TRANS_PARAMS_RELOAD));
*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + OPT)= ((0<<PRI) + (0<<ESIZE)+
(1<<SUM) + (0<<DUM) + (0<<TCINT) + (ch<<TCC)+
(1<<LINK) + (0<<FS));
*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + SRC)= src;
*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + CNT)= size;
*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + DST)= dst;
*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + IDX)= 0x00000000;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -