我使用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操作的。
谢谢