- 论坛徽章:
- 0
|
大家好:帮忙解决一个困扰我很久的问题啊,急急急!
问题如下:在我的arm9200系统上使用spi扩展了一个MCP2510的SPI转CAN转芯片,还扩展了DM9000A的网卡芯片,我的SPI使用如下:PA0:MISO;PA1:MOSI;PA2:SPCK;PA4:NPCS1,我的DM9000的中断信号线使用:LAN_INIT:PA3/NPCS0/IRQ5,我想SPI口工作在master方式下,采用固定外设方式,DM9000的网卡中断采用IRQ5.我的SPI的驱动程序中,SPI初始化部分如下:
//初始化SPI
void SPI_Init(void)
{
AT91_SYS->PIOA_PDR = AT91C_PIO_PA0; //disable PA0 IO mode
AT91_SYS->PIOA_ASR = AT91C_PIO_PA0; //set MISO
AT91_SYS->PIOA_PDR = AT91C_PIO_PA1; //disable PA1 IO mode
AT91_SYS->PIOA_ASR = AT91C_PIO_PA1; //set MOSI
AT91_SYS->PIOA_PDR = AT91C_PIO_PA2; //disable PA2 IO mode
AT91_SYS->PIOA_ASR = AT91C_PIO_PA2; //set SPCLK
AT91_SYS->PIOA_PDR = AT91C_PIO_PA3; //disable PA3 IO mode
AT91_SYS->PIOA_BSR = AT91C_PIO_PA3; //set irq5
AT91_SYS->PIOA_PDR = AT91C_PIO_PA4; //disable PA4 IO mode
AT91_SYS->PIOA_ASR = AT91C_PIO_PA4; //set NPCS1
AT91_SYS->PMC_PCER = 1 << AT91C_ID_SPI; // Enable Peripheral clock
AT91S_SPI_CFG->SPI_IDR =0x000000ff; //禁用中断
AT91S_SPI_CFG->SPI_CSR0=0x00000202;
AT91S_SPI_CFG->SPI_CSR1=0x00000202;
AT91S_SPI_CFG->SPI_CSR2=0x00000202;
AT91S_SPI_CFG->SPI_CSR3=0x00000202;
//主机模式,片选直接相连,时钟/32,模式错误检测,固定外设选择,地址为NPCS1
AT91S_SPI_CFG->SPI_MR |= AT91C_SPI_MSTR | AT91C_SPI_MODFDIS | AT91C_SPI_DIV32 | 0xd0000;
AT91S_SPI_CFG->SPI_CR = AT91C_SPI_SPIEN; // Enable SPI
}
可是在程序执行的时候,总是说MCP2515无法进入配置模式,读出的状态总是0x00,如果在上面这段spi初始化程序中去掉AT91_SYS->PIOA_BSR = AT91C_PIO_PA3; //set irq5 这句,那么MCP2515就工作正常,可是我的DM9000中断需要将其配置为IRQ5这种方式下啊,难道SPI在master方式下,别的NPCS线不能作为其他用法吗???请假各位帮忙解决一下,拜托大家了。 |
|