c6678利用官方mcsdk_2_01_02_06中的tools文件编写多核启动加载的代码并注释
时间: 2023-11-11 13:07:42 浏览: 145
TMS320C6678多核启动与核间通讯经验分享(含原理分析与代码展示)
5星 · 资源好评率100%
以下是使用官方mcsdk_2_01_02_06中的tools文件编写多核启动加载的代码,并进行注释的示例:
```c
#include <ti/csl/csl_chip.h> // 包含芯片级别的API
#include <ti/csl/csl_bootcfg.h> // 包含引导配置API
// 定义启动地址和跳转地址
#define BOOT_ADDR 0x80000000
#define JUMP_ADDR 0x81000000
int main(void)
{
// 获取本地核心ID
uint32_t core_id = CSL_chipReadReg(CSL_CHIP_DNUM);
// 如果当前为主核心
if (core_id == 0)
{
// 初始化引导配置API
CSL_BootCfgInit();
// 配置多核启动
CSL_BootCfgSetBootAddress(BOOT_ADDR);
CSL_BootCfgSetBootComplete(0);
CSL_BootCfgSetBootStatus(1);
}
// 等待所有核心都进入引导模式
while (!CSL_BootCfgIsCoreStarted(CSL_BOOTCFG_CORE_ID_ALL));
// 在主核心中配置引导向量
if (core_id == 0)
{
// 获取引导向量表地址
uint32_t *boot_vector = (uint32_t *) CSL_BOOT_CFG_REGS + CSL_BOOTCFG_VECTOR_TABLE_OFFSET;
// 配置向量表
boot_vector[0] = JUMP_ADDR; // RESET向量
boot_vector[1] = JUMP_ADDR; // NMI向量
boot_vector[2] = JUMP_ADDR; // 保留的中断向量
boot_vector[3] = JUMP_ADDR; // 保留的中断向量
boot_vector[4] = JUMP_ADDR; // 保留的中断向量
boot_vector[5] = JUMP_ADDR; // 保留的中断向量
boot_vector[6] = JUMP_ADDR; // 保留的中断向量
boot_vector[7] = JUMP_ADDR; // 保留的中断向量
boot_vector[8] = JUMP_ADDR; // IRQ向量
}
// 跳转到应用程序主函数
main_app();
return 0;
}
```
注释:
- `#include <ti/csl/csl_chip.h>`和`#include <ti/csl/csl_bootcfg.h>`分别包含了芯片级别的API和引导配置API。
- `#define BOOT_ADDR 0x80000000`定义了启动地址为0x80000000。
- `#define JUMP_ADDR 0x81000000`定义了跳转地址为0x81000000。
- `uint32_t core_id = CSL_chipReadReg(CSL_CHIP_DNUM)`获取当前核心的ID。
- `if (core_id == 0)`判断当前核心是否为主核心。
- `CSL_BootCfgInit()`初始化引导配置API。
- `CSL_BootCfgSetBootAddress(BOOT_ADDR)`设置启动地址。
- `CSL_BootCfgSetBootComplete(0)`设置启动未完成。
- `CSL_BootCfgSetBootStatus(1)`设置启动状态为1。
- `while (!CSL_BootCfgIsCoreStarted(CSL_BOOTCFG_CORE_ID_ALL))`等待所有核心都进入引导模式。
- `uint32_t *boot_vector = (uint32_t *) CSL_BOOT_CFG_REGS + CSL_BOOTCFG_VECTOR_TABLE_OFFSET`获取引导向量表地址。
- `boot_vector[0] = JUMP_ADDR`等设置向量表。
- `main_app()`跳转到应用程序主函数。
阅读全文