📄 test.c
字号:
Int16 status = 0;
if (!patterntype)
{
/* Run the fill tests */
status |= MEM_fill(start, len, 0x00000000);
status |= MEM_fill(start, len, 0x55555555);
status |= MEM_fill(start, len, 0xAAAAAAAA);
status |= MEM_fill(start, len, 0xFFFFFFFF);
} else
{
/* Run the address tests */
status |= MEM_addr(start, len);
status |= MEM_addrInv(start, len);
}
return status;
}
/*
* POST tests
*/
Int16 TEST_intMem()
{
Int16 status = 0;
/* Check internal memory (byte 0x20000 to byte 0x40000) */
status |= MEM_test(0x20000, 0x20000, 0);
status |= MEM_test(0x20000, 0x20000, 1);
status |= MEM_walking(0x20000);
return status;
}
Int16 TEST_extMem()
{
Int16 status = 0;
/* Check external memory (byte 0x80000000 to byte 0x82000000) */
status |= MEM_test(0x80000000, 0x02000000, 0);
status |= MEM_test(0x80000000, 0x02000000, 1);
status |= MEM_walking(0x80000000);
status |= MEM_bytestrobe(0x80000000);
return status;
}
Int16 TEST_flashID()
{
Uint8 MfgId,DevId;
Int16 i;
/* Reset flash */
*((Uint8 *)EVMDM642_FLASH_BASE) = 0xf0;
/* Configure to read manufacturer ID */
*((Uint8 *)EVMDM642_FLASH_BASE) = 0xaa;
*((Uint8 *)EVMDM642_FLASH_BASE) = 0x55;
*((Uint8 *)EVMDM642_FLASH_BASE) = 0x90;
/* Insert small delay for device to respond */
for (i = 0; i < 10; i++);
/* Read IDs */
MfgId = *((Uint8 *)EVMDM642_FLASH_BASE);
DevId = *((Uint8 *)EVMDM642_FLASH_BASE + 1);
/* Reset flash */
*((Uint8 *)EVMDM642_FLASH_BASE) = 0xf0;
/* Check IDs */
if ((MfgId != 0x0001) || (DevId != 0xa3))
return 1;
/* Test passed */
return 0;
}
Int16 TEST_mcbsp(int devid, Int16 delayed)
{
Int16 i;
Uint16 receivedata;
MCBSP_Handle hMcbsp;
MCBSP_Config mcbspCfg_loopback = {
MCBSP_FMKS(SPCR, FREE, NO) |
MCBSP_FMKS(SPCR, SOFT, NO) |
MCBSP_FMKS(SPCR, FRST, YES) |
MCBSP_FMKS(SPCR, GRST, YES) |
MCBSP_FMKS(SPCR, XINTM, XRDY) |
MCBSP_FMKS(SPCR, XSYNCERR, NO) |
MCBSP_FMKS(SPCR, XRST, YES) |
MCBSP_FMKS(SPCR, DLB, ON) |
MCBSP_FMKS(SPCR, RJUST, RZF) |
MCBSP_FMKS(SPCR, CLKSTP, DISABLE) |
MCBSP_FMKS(SPCR, DXENA, OFF) |
MCBSP_FMKS(SPCR, RINTM, RRDY) |
MCBSP_FMKS(SPCR, RSYNCERR, NO) |
MCBSP_FMKS(SPCR, RRST, YES),
MCBSP_FMKS(RCR, RPHASE, SINGLE) |
MCBSP_FMKS(RCR, RFRLEN2, DEFAULT) |
MCBSP_FMKS(RCR, RWDLEN2, DEFAULT) |
MCBSP_FMKS(RCR, RCOMPAND, MSB) |
MCBSP_FMKS(RCR, RFIG, NO) |
MCBSP_FMKS(RCR, RDATDLY, 0BIT) |
MCBSP_FMKS(RCR, RFRLEN1, OF(0)) |
MCBSP_FMKS(RCR, RWDLEN1, 16BIT) |
MCBSP_FMKS(RCR, RWDREVRS, DISABLE),
MCBSP_FMKS(XCR, XPHASE, SINGLE) |
MCBSP_FMKS(XCR, XFRLEN2, DEFAULT) |
MCBSP_FMKS(XCR, XWDLEN2, DEFAULT) |
MCBSP_FMKS(XCR, XCOMPAND, MSB) |
MCBSP_FMKS(XCR, XFIG, NO) |
MCBSP_FMKS(XCR, XDATDLY, 0BIT) |
MCBSP_FMKS(XCR, XFRLEN1, OF(0)) |
MCBSP_FMKS(XCR, XWDLEN1, 16BIT) |
MCBSP_FMKS(XCR, XWDREVRS, DISABLE),
MCBSP_SRGR_DEFAULT,
MCBSP_MCR_DEFAULT,
MCBSP_RCERE0_DEFAULT,
MCBSP_RCERE1_DEFAULT,
MCBSP_RCERE2_DEFAULT,
MCBSP_RCERE3_DEFAULT,
MCBSP_XCERE0_DEFAULT,
MCBSP_XCERE1_DEFAULT,
MCBSP_XCERE2_DEFAULT,
MCBSP_XCERE3_DEFAULT,
MCBSP_FMKS(PCR, XIOEN, DEFAULT) |
MCBSP_FMKS(PCR, RIOEN, DEFAULT) |
MCBSP_FMKS(PCR, FSXM, INTERNAL) |
MCBSP_FMKS(PCR, FSRM, DEFAULT) |
MCBSP_FMKS(PCR, CLKXM, OUTPUT) |
MCBSP_FMKS(PCR, CLKRM, INPUT) |
MCBSP_FMKS(PCR, CLKSSTAT, DEFAULT) |
MCBSP_FMKS(PCR, DXSTAT, DEFAULT) |
MCBSP_FMKS(PCR, FSXP, DEFAULT) |
MCBSP_FMKS(PCR, FSRP, DEFAULT) |
MCBSP_FMKS(PCR, CLKXP, DEFAULT) |
MCBSP_FMKS(PCR, CLKRP, DEFAULT)
};
/* Initialize source data, zero dest */
for (i = 0; i < N; i++) {
src[i] = (i << 8) | i + 1;
dst[i] = 0;
}
/* Open the McBSP */
hMcbsp = MCBSP_open(devid, MCBSP_OPEN_RESET);
/* Configure the McBSP for loopback mode */
MCBSP_config(hMcbsp, &mcbspCfg_loopback);
/* Start the McBSP */
MCBSP_start(hMcbsp, MCBSP_RCV_START | MCBSP_XMIT_START |
MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, MCBSP_SRGR_DEFAULT_DELAY);
/* Data transfer loop */
for (i = 0; i < (N + delayed); i++) {
/* Wait for XRDY signal before writing data to DXR */
while (!MCBSP_xrdy(hMcbsp));
/* Write 16 bit data value to DXR */
MCBSP_write(hMcbsp,src[i]);
/* Wait for RRDY signal to read data from DRR */
while (!MCBSP_rrdy(hMcbsp));
/* Read 16 bit value from DRR */
receivedata = MCBSP_read(hMcbsp);
if (i >= delayed)
dst[i - delayed] = receivedata;
}
/* Close the McBSP */
MCBSP_close(hMcbsp);
/* Check data to make sure transfer was successful */
for (i = 0; i < N; i++)
if (dst[i] != src[i])
return 1;
/* Test passed */
return 0;
}
Int16 TEST_mcbsp0()
{
/* Do an internal loopback test on McBSP0 */
return TEST_mcbsp(MCBSP_DEV0, 0);
}
Int16 TEST_mcbsp1()
{
/* Do an internal loopback test on McBSP1 */
return TEST_mcbsp(MCBSP_DEV1, 0);
}
Int16 TEST_dma()
{
Int16 i;
EDMA_Handle hEdmaCha8;
EDMA_Config edmaCfg8 = {
EDMA_FMKS(OPT, PRI, URGENT) |
EDMA_FMKS(OPT, ESIZE, 16BIT) |
EDMA_FMKS(OPT, 2DS, NO) |
EDMA_FMKS(OPT, SUM, INC) |
EDMA_FMKS(OPT, 2DD, NO) |
EDMA_FMKS(OPT, DUM, INC) |
EDMA_FMKS(OPT, TCINT, YES) |
EDMA_FMK (OPT, TCC, 8) |
EDMA_FMKS(OPT, TCCM, DEFAULT) |
EDMA_FMKS(OPT, ATCINT, NO) |
EDMA_FMKS(OPT, ATCC, DEFAULT) |
EDMA_FMKS(OPT, PDTS, DEFAULT) |
EDMA_FMKS(OPT, PDTD, DEFAULT) |
EDMA_FMKS(OPT, LINK, NO) |
EDMA_FMKS(OPT, FS, YES),
(Uint32)src,
EDMA_FMKS(CNT, FRMCNT, OF(0)) |
EDMA_FMKS(CNT, ELECNT, OF(16)),
(Uint32)dst,
EDMA_FMKS(IDX, FRMIDX, DEFAULT) |
EDMA_FMKS(IDX, ELEIDX, DEFAULT),
EDMA_FMKS(RLD, ELERLD, DEFAULT) |
EDMA_FMKS(RLD, LINK, DEFAULT)
};
/* Set src values and clear destination */
for (i = 0; i < N; i++) {
src[i] = i;
dst[i] = 0;
}
/* Configure EDMA */
hEdmaCha8 = EDMA_open(8, EDMA_OPEN_RESET);
EDMA_config(hEdmaCha8, &edmaCfg8);
/* Start CPU initiated EDMA transfer by setting bit 24 in ESR */
EDMA_setChannel(hEdmaCha8);
/* Poll DMA interrupt too see if its done */
while (!EDMA_intTest(8));
{
;
}
/* We are done, so close DMA channel */
EDMA_close(hEdmaCha8);
/* Check data */
for (i = 0; i < N; i++)
if (dst[i] != src[i])
return 1;
/* Test passed */
return 0;
}
Int16 TEST_timer()
{
/* Wait for 100 timer interrupts */
TEST_sleep(100);
return 0;
}
/*
* Diagnostic utility specific tests
*/
Int16 TEST_flashall()
{
Uint16 i, j, k, page, limit;
Uint32 startaddr, addr;
/* Program the Flash page by page, 256 words at a time */
for (page = 0; page < 1; page++)
{
/* Set Flash page */
EVMDM642_rset(EVMDM642_FLASHPAGE, page);
/* Turn activity indicator off */
EVMDM642_LED_off(7);
/* Erase all of the Flash */
EVMDM642_FLASH_erase(EVMDM642_FLASH_BASE, EVMDM642_FLASH_PAGESIZE);
/* Turn activity indicator on */
EVMDM642_LED_on(7);
addr = EVMDM642_FLASH_BASE;
if (page == 0)
limit = 8;
else
limit = 1;
for (i = 0; i < limit; i++)
{
for (j = 0; j < 128; j++)
{
startaddr = addr;
for (k = 0; k < 256; k++)
{
buffer[k] = addr + i + page;
addr += 2;
}
EVMDM642_FLASH_write((Uint32)buffer, startaddr, 512);
}
}
}
/* Verify the Flash page by page, 256 bytes at a time */
for (page = 0; page < 8; page++)
{
/* Set Flash page */
EVMDM642_rset(EVMDM642_FLASHPAGE, page);
addr = EVMDM642_FLASH_BASE;
if (page == 0)
limit = 8;
else
limit = 1;
for (i = 0; i < limit; i++)
{
for (j = 0; j < 128; j++)
{
startaddr = addr;
EVMDM642_FLASH_read(startaddr, (Uint32)buffer, 512);
for (k = 0; k < 256; k++)
{
if (buffer[k] != ((addr + i + page) & 0xffff))
return page + 1;
addr += 2;
}
}
}
}
return 0;
}
Int16 TEST_syncbus()
{
return MEM_walking(EVMDM642_SYNC_BASE);
}
Int16 TEST_led()
{
Uint32 i, j;
EVMDM642_LED_init();
for (i = 0; i < 64; i++)
{
LED_binary(0xaa);
for (j = 0; j < 1000000; j++);
LED_binary(0x55);
for (j = 0; j < 1000000; j++);
}
LED_binary(0xff);
return 0;
}
Int16 TEST_spdif()
{
Uint32 i, j, data, *pdata;
/* Open and configure the McASP */
EVMDM642_AIC23_hMcASP = MCASP_open(MCASP_DEV0, MCASP_OPEN_RESET);
MCASP_config(EVMDM642_AIC23_hMcASP, &mcaspCfgDataSpdif);
/* Configure DIT status and user registers */
pdata = (Uint32 *)0x1b4c0;
for (i = 0; i < 24; i++)
*pdata++ = 0xffffffff;
/* Enable transmit clocks and serializers */
MCASP_RSETH(EVMDM642_AIC23_hMcASP, GBLCTL, 0x00000200);
while (MCASP_RGETH(EVMDM642_AIC23_hMcASP, GBLCTL) != 0x00000200);
/* Enable transmit clocks and serializers */
MCASP_RSETH(EVMDM642_AIC23_hMcASP, GBLCTL, 0x00000300);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -