s3c2410无法通过spi修改mcp2510寄存器
我的spi程序如下:
GPHDAT &= ~MCP2510_PIN_CS;
udelay(1000);
CLKCON |= (1<<18);
set_gpio_ctrl(GPIO_MODE_nSS|GPIO_PULLUP_DIS|GPIO_H0);
set_gpio_ctrl(GPIO_MODE_SPICLK|GPIO_PULLUP_DIS|GPIO_E13);
set_gpio_ctrl(GPIO_MODE_SPIMOSI|GPIO_PULLUP_EN|GPIO_E12);
set_gpio_ctrl(GPIO_MODE_SPIMISO|GPIO_PULLUP_EN|GPIO_E11);
SPCON0 = (0<<6)|(0<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0); //polling,en_sck,master,low,format A,normal
SPPIN0 = (0<<2)|(1<<1)|(0<<0);
SPPRE0=0x20;
GPHDAT |= MCP2510_PIN_CS;
这是spi初始化程序。
我的arm为s3c2410,can为mcp2510,我在初始化完spi后通过spi总线来修改mcp2510的寄存器,使用如下函数(也就是读函数):
static unsignedcharMCP2510_Read(int address)
{
unsignedcharresult;
int flags;
local_irq_save(flags);
MCP2510_Enable();
SendSIOData(MCP2510INSTR_READ);
SendSIOData((unsigned char)address);
SendSIOData(0);
result=ReadSIOData();
MCP2510_Disable();
local_irq_restore(flags);
return result;
}
static void MCP2510_Write(int address, int value)
{
int flags;
local_irq_save(flags);
MCP2510_Enable();
SendSIOData(MCP2510INSTR_WRITE);
SendSIOData((unsigned char)address);
SendSIOData((unsigned char)value);
MCP2510_Disable();
local_irq_restore(flags);
}
在can初始化程序中,我使用如下过程来检测spi总线
printk("CANINTE0=%x\n",MCP2510_Read(CANINTE));
MCP2510_Write(CANINTE, 0x5f);
printk("CANINTE1=%x\n",MCP2510_Read(CANINTE));
我试了好几个寄存器,结果输出的都是ff,SPTDAT0:0 SPRDAT0:ff(初始值应该是0啊!)
最关键的是我的mcp2510不可以有上电时的配置模式通过MCP2510_Write(MCP2510REG_CANCTRL, MODE_NORMAL| CLKEN | CLK1);返回正常模式
百度一把说是时序设置不对,我的现在的问题大概的描述就是这样,请大家帮我看看,有什么不清楚的我再补充!谢谢大家