This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TM4C123GH6PGE:调用 BIOS 启动时转到 loader_exit ()函数

Guru**** 2618835 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/579933/rtos-tm4c123gh6pge-go-to-loader_exit-function-when-call-bios-start

器件型号:TM4C123GH6PGE

工具/软件:TI-RTOS

我的代码是:  

主程序

/* 40 MHz 系统时钟*/
SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);

/* IO 引脚初始化*/
io_init();

#ifdef display_control
/*显示初始值*/
init_Graphics_lcd();
#endif

#ifdef ADC_CONTROL
ADC_Hardware_Init();
#endif

#ifdef UART_CONTROL
UART_Hardware_Init();
#endif

#ifdef CAN_CONTROL
/*可以初始化*/
//CAN_Hardware_init();
#endif

BIOS_start();

在文件 CAN_init.c 中

void CAN_Hardware_init (void)

uint8_t i;

/* IO 初始化*/
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
SysCtlPeripheralEnable (SYSCTL_Periph_CAN0);
GPIODirModeSet (GPIO_Porte DIR、GPIO_PIN_4、GPIO_DIR_MODE_IN);
GPIOPinConfigure (GPIO_PE4_CAN0RX);
GPIOPinTypeGPIOInput (GPIO_PORTG_base、GPIO_PIN_4);
GPIOPinConfigure (GPIO_PE5_CAN0TX);
GPIODirModeSet (GPIO_Porte DIR、GPIO_PIN_5、GPIO_DIR_MODE_OUT);
GPIOPinTypeGPIOOutput (GPIO_PORTG_base、GPIO_PIN_5);
GPIOPinTypeCAN (GPIO_Porte _BASE、GPIO_PIN_4 | GPIO_PIN_5);


/*初始 CAN 控制通道0 */
CANInit (CAN0_BASE);

/*初始波特率*/
CANBitRateSet (CAN0_BASE、SysCtlClockGet ()、50000);

/*在 CAN 外设上启用中断*/
CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);

/*启用处理器(NVIC)上的 CAN 中断*/
IntEnable (INT_CAN0);

/*启用 CAN 以进行操作*/
CANEnable (CAN0_BASE);

问题:

如果我使用 CAN_Hardware_Init 和 degig ->源代码转到 loader_exit ()

如果我注释 CAN_Hardware_Init ->源代码运行正常

您能帮我解决问题吗

我使用 Code Composer Studio 6.2.0、 BIOS_6_35_01_29、 TivaWare_C_Series-2.1.3.156、tirtos_tivac_2_16_01_14、 xdctools_3_32_01_22_core

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我怀疑在 BIOS_start()启用全局中断并且没有注册 ISR 来处理它之后会发生 CAN 中断。 我在你的代码中看不到在哪里为 CAN 中断创建一个 Hwi 对象。 它是否位于.cfg 文件中?

    Alan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我添加了源代码:CANIntRegister (CAN0_BASE、CAN_INTERRUPTS_Handler);在 CAN_init ()中
    没关系。 非常感谢