📄 cnfdsp_nohost.c
字号:
temp = *--flash_ptr;
while ( temp != pattern)
{
temp = *flash_ptr;
}
return 0;
}
/*-------------------------------------------------------------------------*/
/* flash_test() - used to test external FLASH */
/*-------------------------------------------------------------------------*/
int flash_test( char pattern, int start_address, int size_in_byte)
{
int i = 0;
int error = 0;
char *flash_ptr = (char *)start_address;
i=0;
while(i < size_in_byte) /* write to flash */
{
flash_page_prog ( pattern, flash_ptr, 128);
i = i+128;
flash_ptr = flash_ptr + 128;
}
flash_ptr = (char *)start_address;
for(i=0;i<size_in_byte;i++)
{
if( *flash_ptr++ != pattern)
{
error++;
#if SPECIAL==FLATST
if(error<25)
printf(" Read=0x%08x at Address=0x%08x\n",*flash_ptr,(flash_ptr-1));
#endif
}
}
return error;
}
/*-------------------------------------------------------------------------*/
/* flash_checksum() - used to test checksum in POST on external FLASH */
/*-------------------------------------------------------------------------*/
/*int flash_checksum (int start_address, int size_in_byte)
{
int i = 0, error = 0;
int checksum,*checksum_ptr;
char *flash_ptr = (char *)start_address;
int temp;
i=0;
checksum = 0;
while(i < size_in_byte-4)
{
temp = *flash_ptr++;
temp &= 0xff;
checksum = checksum + temp;
i++;
}
checksum_ptr = (int *)flash_ptr;
exp_chksum=*checksum_ptr;
cmp_chksum=checksum;
if( exp_chksum != cmp_chksum) error = 1;
// if( *checksum_ptr != checksum) error = 1;
return error;
}
*/
/*-------------------------------------------------------------------------*/
/* mcbsp0_init() - used to initialize McBSP0 */
/*-------------------------------------------------------------------------*/
void mcbsp0_init()
{
volatile unsigned int temp =0;
/* set up McBSP0 */
*(unsigned volatile int *)McBSP0_SPCR = 0; /* reset serial port */
*(unsigned volatile int *)McBSP0_PCR = 0; /* set pin control reg. */
*(unsigned volatile int *)McBSP0_RCR = 0x10040; /* set rx control reg. */
/* one 16 bit data/frame */
*(unsigned volatile int *)McBSP0_XCR = 0x10040; /* set tx control reg. */
/* one 16 bit data/frame */
*(unsigned volatile int *)McBSP0_DXR = 0;
*(unsigned volatile int *)McBSP0_SPCR = 0x12001;/* setup SP control reg */
}
/*-------------------------------------------------------------------------*/
/* mcbsp0_test() - used to test McBSP0 */
/*-------------------------------------------------------------------------*/
int mcbsp0_test()
{
volatile unsigned int temp =0,temp1;
/* set up McBSP0 */
*(unsigned volatile int *)McBSP0_SPCR = 0; /* reset serial port */
*(unsigned volatile int *)McBSP0_SRGR = 0x2014004A;/* set baud rate to 1MHz */
*(unsigned volatile int *)McBSP0_PCR = 0xA00; /* set pin control reg. */
*(unsigned volatile int *)McBSP0_RCR = 0x10040; /* set rx control reg. */
/* one 16 bit data/frame */
*(unsigned volatile int *)McBSP0_XCR = 0x10040; /* set tx control reg. */
/* one 16 bit data/frame */
*(unsigned volatile int *)McBSP0_SPCR = 0xC1A001; /* setup SP control reg. */
*(unsigned volatile int *)McBSP0_DXR = 0xAAAA;
temp1 = *(unsigned volatile int *)McBSP0_DRR;
temp1 = mcbsp0_read();
mcbsp0_write(0x5555);
temp = mcbsp0_read();
temp &= 0xffff;
if (temp != 0x5555)
{
temp = 1;
return temp;
}
mcbsp0_write(0xaaaa);
temp = mcbsp0_read();
temp &= 0xffff;
if (temp != 0xaaaa)
{
temp = 1;
return temp;
}
return 0;
}
/*-------------------------------------------------------------------------*/
/* mcbsp0_write() - used for write to McBSP0 */
/*-------------------------------------------------------------------------*/
void mcbsp0_write(int out_data)
{
int temp;
temp = *(unsigned volatile int *)McBSP0_SPCR & 0x20000;
while ( temp == 0)
{
temp = *(unsigned volatile int *)McBSP0_SPCR & 0x20000;
}
*(unsigned volatile int *)McBSP0_DXR = out_data;
}
/*-------------------------------------------------------------------------*/
/* mcbsp0_read() - used for read from McBSP0 */
/*-------------------------------------------------------------------------*/
int mcbsp0_read()
{
int temp;
temp = *(unsigned volatile int *)McBSP0_SPCR & 0x2;
while ( temp == 0)
{
temp = *(unsigned volatile int *)McBSP0_SPCR & 0x2;
}
temp = *(unsigned volatile int *)McBSP0_DRR;
return temp;
}
/*-------------------------------------------------------------------------*/
/* qdma_start() - used to start QDMA */
/*-------------------------------------------------------------------------*/
void qdma_start(int src, int dst, int size)
{
*(unsigned volatile int *)CIER = 0x100;
*(unsigned volatile int *)QDMA_SRC = src;
*(unsigned volatile int *)QDMA_DST = dst;
*(unsigned volatile int *)QDMA_IDX = 0x00000000;
*(unsigned volatile int *)QDMA_OPT = 0x41380001;
*(unsigned volatile int *)QDMA_S_CNT = size;
}
/*-------------------------------------------------------------------------*/
/* qdma_check() - used to test QDMA operation */
/*-------------------------------------------------------------------------*/
int qdma_check( int src, int dst, int size)
{
int i,error = 0;
int *src_ptr = (int *)src;
int *dst_ptr = (int *)dst;
for (i=0;i<size;i++)
{
if (*src_ptr++ != *dst_ptr++) error++;
}
return error;
}
/*-------------------------------------------------------------------------*/
/* qdma_isr() - interrupt service routine for qdma */
/*-------------------------------------------------------------------------*/
interrupt void qdma_isr()
{
*(unsigned volatile int *)CIPR |= 0x100;
flag = 1;
}
/*-------------------------------------------------------------------------*/
/* led_blink() - used to blink all the LEDS on the DSK */
/*-------------------------------------------------------------------------*/
void led_blink(int count, int ms_period, unsigned int leds_to_light)
{
int i;
for (i=0;i<count;i++)
{
*(unsigned volatile int *)IO_PORT = 0x7000000;/* turn off three leds */
delay_msec(ms_period/2);
*(unsigned volatile int *)IO_PORT = leds_to_light;/* turn on user leds */
delay_msec(ms_period/2);
}
*(unsigned volatile int *)IO_PORT = 0x7000000; /* turn off three leds */
}
/*-------------------------------------------------------------------------*/
/* get_ioport() - used to read state of ioport */
/*-------------------------------------------------------------------------*/
unsigned int get_ioport(void)
{
return(*(unsigned volatile int *)IO_PORT);
}
/*-------------------------------------------------------------------------*/
/* get_bdrev() - used to read board revision bits */
/*-------------------------------------------------------------------------*/
unsigned int get_bdrev(void)
{
return(((*(unsigned volatile int *)IO_PORT)>>29)&0x7);
}
/*-------------------------------------------------------------------------*/
/* delay_msec() - used to delay DSP by user specified time in msec */
/*-------------------------------------------------------------------------*/
void delay_msec(short msec)
{
/* assume 150 MHz CPU timer period = 4/150 MHz */
int timer_limit = (msec*9375)<<2;
int time_start;
timer0_start();
time_start = timer0_read();
while ((timer0_read()-time_start) < timer_limit);
}
/*-------------------------------------------------------------------------*/
/* timer0_read() - used to read TIMER0 count */
/*-------------------------------------------------------------------------*/
int timer0_read()
{
int i;
i = *(unsigned volatile int *)TIMER0_COUNT;
return i;
}
/*-------------------------------------------------------------------------*/
/* timer0_start() - used to start TIMER0 */
/*-------------------------------------------------------------------------*/
void timer0_start()
{
*(unsigned volatile int *)TIMER0_CTRL &= 0xff3f; /* hold the timer */
*(unsigned volatile int *)TIMER0_CTRL |= 0x200; /* use CPU CLK/4 */
*(unsigned volatile int *)TIMER0_PRD |= 0xffffffff;/* set for 32 bit cnt*/
*(unsigned volatile int *)TIMER0_CTRL |= 0xC0; /* start the timer */
}
/*-------------------------------------------------------------------------*/
/* timer0_init() - used to initialize TIMER0 */
/*-------------------------------------------------------------------------*/
void timer0_init()
{
*(unsigned volatile int *)TIMER0_CTRL &= 0xff3f;/* hold the timer */
*(unsigned volatile int *)TIMER0_CTRL |= 0x200; /* use CPU CLK/4 */
*(unsigned volatile int *)TIMER0_PRD = 0x200; /* set for a short period*/
*(unsigned volatile int *)TIMER0_CTRL |= 0x3C0; /* start the timer */
/* enable timer0 int */
}
/*-------------------------------------------------------------------------*/
/* timer0_isr() - interrupt service routine for TIMER0 */
/*-------------------------------------------------------------------------*/
interrupt void timer0_isr()
{
*(unsigned volatile int *)TIMER0_CTRL |= 0; /* stop timer0 */
if(flag == 0)
flag = 1; /* toggle the flag */
else
flag = 0;
}
/*-------------------------------------------------------------------------*/
/* play_codec() - used to test codec operation */
/*-------------------------------------------------------------------------*/
int play_codec(int number, int tone_playbk)
{
int i,j;
int temp;
// set up control register 3 for S/W reset
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(1);
mcbsp0_read();
mcbsp0_write(0x0386);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
// set up control register 3 for mic input
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(1);
mcbsp0_read();
mcbsp0_write(0x0306);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(1);
mcbsp0_read();
mcbsp0_write(0x2330);
temp = mcbsp0_read();
mcbsp0_write(0x0);
mcbsp0_read();
mcbsp0_write(0x0);
mcbsp0_read();
if((temp & 0xff) != 0x06)
{
#if PRINT
printf (" Error in setting up control register 3.\n");
#endif
return(3);
}
//set up control register 4
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(1);
mcbsp0_read();
mcbsp0_write(0x0400);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(1);
mcbsp0_read();
mcbsp0_write(0x2430);
temp = mcbsp0_read();
mcbsp0_write(0x0);
mcbsp0_read();
mcbsp0_write(0x0);
mcbsp0_read();
if((temp & 0xff) != 0x00)
{
#if PRINT
printf (" Error in setting up control register 4.\n");
#endif
return(4);
}
// set up control register 5
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(1);
mcbsp0_read();
mcbsp0_write(0x0502);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(0);
mcbsp0_read();
mcbsp0_write(1);
mcbsp0_read();
mcbsp0_write(0x2530);
temp = mcbsp0_read();
mcbsp0_write(0x0);
mcbsp0_read();
mcbsp0_write(0x0);
mcbsp0_read();
if((temp & 0xfe) != 0x2)
{
#if PRINT
printf (" Error in setting up control register 5.\n");
#endif
return(5);
}
if(tone_playbk)
{
for (i=0; i< 8; i++)
{
sin_table[i] = sin_table[i] & 0xfffe;
}
for (i=0;i<number;i++)
{
for (j=0;j<8;j++)
{
mcbsp0_write((int)sin_table[j]);
}
}
}
else
{
for (i=0;i<number;i++)
{
temp = mcbsp0_read();
temp = temp & 0xfffe;
mcbsp0_write(temp);
}
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -