s3c2410无法通过spi总线来修改mcp2510的寄存器 点击:417 | 回复:0



hgdyulei

    
  • 精华:0帖
  • 求助:2帖
  • 帖子:3帖 | 3回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2012年5月09日
发表于:2013-01-15 14:41:16
楼主

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);返回正常模式

百度一把说是时序设置不对,我的现在的问题大概的描述就是这样,请大家帮我看看,有什么不清楚的我再补充!谢谢大家


热门招聘
相关主题

官方公众号

智造工程师