TI中文支持网
TI专业的中文技术问题搜集分享网站

CAN IO使用问题

我使用TMS570LS0332的CAN接口用作普通IO使用,在程序仿真和调试时,都能正常工作,但是脱离仿真调试状态,上电测试时程序就不能用了,请问是什么原因?还有程序确实下载到FLASH中了;

CAN初始化函数

void canInit(void)
{

canREG1->TIOC = (uint32)((uint32)1U << 18U )

| (uint32)((uint32)1U << 17U )
| (uint32)((uint32)0U << 16U ) | (uint32)((uint32)0U << 3U ) | (uint32)((uint32)1U << 2U ) | (uint32)((uint32)0U << 1U );
canREG1->RIOC = (uint32)((uint32)1U << 18U ) | (uint32)((uint32)1U << 17U ) | (uint32)((uint32)0U << 16U ) | (uint32)((uint32)0U << 3U ) | (uint32)((uint32)1U << 2U )
| (uint32)((uint32)0U <<1U );

}

CAN 主函数

void main(void)
{
/* USER CODE BEGIN (3) */
canInit();
canIoSetDirection(canREG1,1,1);
canIoSetPort(canREG1,1,1);
while(1)
{
canIoSetPort(canREG1,0,0);
delay_s();
canIoSetPort(canREG1,1,1);
delay_s();
}
/* USER CODE END */
}

fishwang89:

你说的仿真和调试,是simulator里吗?

程序不能用是想表达没有驱动了外设吗?例如没有点亮LED?

软件仿真时候IO按照你对寄存器的设置进行变化,但如果现在是针对硬件的程序,还需要看你的硬件电路是怎么设计的。

如果这个IO用来输出电流,你可以试试把TIOC和RIOC的第17位从1改成0

user1847463:

回复 fishwang89:

是用JLINK在PCB板上调试的,DEBUGER都好用,就是将程序烧到芯片后就不能用了;程序就是点亮小灯;

fishwang89:

回复 user1847463:

 那你检查下你的程序流程,可能是LED间隔时间太短,让你看不出来他被点亮

user1847463:

回复 fishwang89:

跟程序无关,流程都是正常的,换一个HET的GPIO就可以用;我的同事也出现这个问题;

user1847463:

回复 user1847463:

我使用的软件是IAR6.5.6

Ken Wang:

回复 user1847463:

zhongfu,

  你的问题解决了吗?以前我试过把CAN当做普通的GPIO来用,是可以正常使用的。

如果还没有找到办法的话,可以试着设置一下CAN的控制寄存器,置位一下初始化位。HALCOGEN默认的CAN初始化程序除了TIOC和RIOC还是会对CTL操作的。

谢谢

赞(0)
未经允许不得转载:TI中文支持网 » CAN IO使用问题
分享到: 更多 (0)