|
用的PXA270和USI的无线网卡 8686芯片组
接口用的SPI
通过打印信息看总是在读取芯片ID时候出错:
Chip(exp, val)= (000bh), ffffh) //期望是000B ,实际FFFF
pxa_gspi_Init is fault !!!!!!!!!!!!!
If_Initialize is fault !!!!!!!!!!!!!xxxxxxxxxxxxxxx
看代码发现似乎是SPI初始化问题:
ssp_init_hw(pHC);
intr_init(pHC);
dma_init(pHC); //没有用到DMA
......
#if defined (GSPI8385)
const WORD chipid = 0x0004;
#elif defined (GSPI8686)
const WORD chipid = 0x000b;
#else
const WORD chipid = 0x000;
#endif
ssp_read_register((DWORD)pHC, ®val, 0x02); //在这读寄存器,读出的值regval出错
if (chipid != regval)
{
GSPIMSG(1, (TEXT("Chip(exp, val)= (%04xh), %04xh)\n"), chipid, regval));
//上面的信息在这里打印出来
pxa_gspi_Deinit((DWORD)pHC);
pHC = NULL;
goto funcFinal;
}
其中pxa_gspi_Init函数中对SPI的引脚做了初始化:我用的引脚是
#define SSP_SCLK 23
#define SSP_SFRM 24
#define SSP_TX 25
#define SSP_RX 26
#define SSP_INTR 22
ssp_init_hw函数中对其初始化:
pHC->pGPIORegs->GPDR0 |= ((0x1U << 23) | (0x1U << 24) | (0x1U << 25));
pHC->pGPIORegs->GPDR0 &= ~(0x1U << 26);
//Set gpio24 to high
pHC->pGPIORegs->GPSR0 |= (0x1U << 24); // 输出1
//Set the gpio 23 as function 2 sspsclk
//25 as function 2 ssptxd
//26 as function 1 ssprxd
pHC->pGPIORegs->GAFR0_U &= 0xFFC03FFF;
pHC->pGPIORegs->GAFR0_U |= ((0x2U << 14) | (0x0U << 16) | (0x2U << 18) | (0x1U << 20));
//wx_end change
pHC->pSSPRegs->base.sscr0 = 0;
pHC->pSSPRegs->base.sscr1 = 0;
// Sleep(0); //JKU
/// Configure the SSP CLK
#if (SSPCTRLER == 1) ///Using SSP controller1
pHC->pCLKRegs->cken |= (1<<23);
#elif (SSPCTRLER == 2) ///Using SSP controller2
pHC->pCLKRegs->cken |= (1<<3);
#elif (SSPCTRLER == 3) ///Using SSP controller3
pHC->pCLKRegs->cken |= (1<<4);
#endif ///SSPCTRLER
pHC->pSSPRegs->base.sscr0 = SSCR0_SCR(clkdiv) | SSCR0_DSS(0x000f) | SSCR0_FRF(3);
pHC->pSSPRegs->base.sscr1 = SSCR1_TTELP | SSCR1_TTE | SSCR1_TSRE | SSCR1_RSRE |
SSCR1_RFT(0x1) | SSCR1_TFT(0x1) | SSCR1_TRAIL;
pHC->pSSPRegs->sspsp = SSPSP_SCMODE(0);
pHC->pSSPRegs->ssto = 1;
pHC->pSSPRegs->base.sscr0 |= SSCR0_SSE;
set_GPIO_signal(pHC->pGPIORegs, SSP_RST, SIG_UP);
udelay(pHC->pOSTRegs, 500);
set_GPIO_signal(pHC->pGPIORegs, SSP_RST, SIG_DOWN); //JKU: pin 11 to reset
udelay(pHC->pOSTRegs, 5000);
set_GPIO_signal(pHC->pGPIORegs, SSP_RST, SIG_UP);
udelay(pHC->pOSTRegs, 500);
请教:现在的现象大概是哪里出了错误?是否是SPI初始化的问题!!!
|
|