Thread 中讨论的其他器件: controlSUITE
你好
LAUNCHXL-F28379D 的默认引导模式引脚为 GPIO84和 GPIO72、因为 SCI 引导 GPIO84必须为高电平。 但是、SCI 引导也使用 GPIO84和 GPIO85、因此我如何进行 SCI 闪存编程? 我需要分步说明。 此外 、LAUNCHXL-F28379D 的 USART 引脚连接到 GPIO42和43、该引脚与 sci boot、isn'it?
此致...
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.
你好
LAUNCHXL-F28379D 的默认引导模式引脚为 GPIO84和 GPIO72、因为 SCI 引导 GPIO84必须为高电平。 但是、SCI 引导也使用 GPIO84和 GPIO85、因此我如何进行 SCI 闪存编程? 我需要分步说明。 此外 、LAUNCHXL-F28379D 的 USART 引脚连接到 GPIO42和43、该引脚与 sci boot、isn'it?
此致...
尊敬的 Manoj
谢谢您的回答、很抱歉我没有在上一篇文章中充分表达我们的问题。
现在、我们正在使用 F2837xD 进行新设计、我们的头有点困惑。 我们的要求如下:
1) 1)软件需要通过串行端口进行更新。
2)软件必须受代码保护(必须配置 DCSM、但我们不知道哪些配置符合我们的要求)。 在这种情况下(代码受保护)、串行端口软件更新是否受影响?
我们还想了解其他内容、通过串行端口进行更新时是否需要通过卡更改芯片的引导模式? 产品将在封闭的包装盒中、并且会出现问题。 是否无法从软件中将芯片设置为 sci 引导模式?
我们需要就我们应该为这些行动做些什么发表明确的声明(逐步行动)。
此致
尊敬的 Manoj
我为引导加载程序和应用程序代码制作了单独的项目;
对于 CPU1、引导加载程序使用的闪存和闪存 b 以及闪存的其余部分用于应用。 我修改了链接器 cmd 文件和调试选项。
每次系统复位、0x80000处的引导加载程序都会首先运行检查 SCIA 自动波特率锁定状态、如果我设置运行内核、否则运行应用程序、
自动波特率。 当它获得"A"或"A"时、回显字符并跳转到引导加载程序、因此设置了引导加载程序代码检测异常位、然后运行引导加载程序。 我通过这种方法成功地对 CPU1进行了编程。 我也进行了相同的调制、例如跳过内核加载、TI serial_flash_loader c++项目。
从同一意义上讲、我为 CPU2、引导加载程序和应用程序代码制作了两个项目。 基于 TI 示例的引导演示。 在他的时候,我的头有点困惑。 我没有获得 CPU2引导加载程序工作、我正在共享所有项目的初始化代码、请帮助我成功完成 CPU2的 DFU。
CPU1引导加载程序
uint32_t main (void)
{
IF (SciaRegs.SCIFFCT.bit.Abd)
{
//
// SCIA 刷新
//
while (!SciaRegs.SCICTL2.bit.TXEMPTY)
{
}
//
//步骤1. 初始化系统控制:
//启用外设时钟
//此示例函数位于 F2837xD_SYSCTRL.c 文件中。
//
InitSysCtrl();//PLL 激活
//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
InitGpio();
//
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2837xD_PIECTRL.c 文件中。
//
// InitPieCtrl();
//
//禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
//
// InitPieVectTable();
InitIpc();
InitFlash();
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO42 = 0;
GpioCtrlRegs.GPBPUD.bit.GPIO43 = 0;
GpioCtrlRegs.GPBQSEL1.bit.GPIO43 = 3;
GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3;
GpioCtrlRegs.GPBGMUX1.bit.GPIO42 = 3;
GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3;
GpioCtrlRegs.GPBGMUX1.bit.GPIO43 = 3;
EDIS;
//SciaRegs.SCIFFCT.bit.ABDCLR = 1;
//
//增益泵信标
//
SeizeFlashPump();
init_Flash_sectors ();
uint32 EntryAddr;
//
// GPIO84、85的 SCI_BOOT 参数;SCI_BOOT_ALTERATE 参数
//对于 GPIO28、29
//
EntryAddr = SCI_GetFunction (SCI_BOOT);
}
/* return (EntryAddr);*/
void (* funcPtr)(void)=(void (*)(void)) 0x084000;
(*funcPtr )();
return (0);
}
CPU1应用程序代码
void sysinit (void)
{
//
///步骤1。 初始化系统控制:
// PLL、看门狗、启用外设时钟
//此示例函数位于 F2837xD_sysctrl.c 文件中。
//
InitSysCtrl();
InitGpio();
#ifdef _standalone
#ifdef _flash
//
//发送引导命令以允许 CPU2应用程序开始执行
//
IPCBootCPU2 (C1C2_Brom_BOOTMODE_BOOT_FROM _FLASH);
其他
//
//发送引导命令以允许 CPU2应用程序开始执行
//
IPCBootCPU2 (C1C2_Brom_BOOTMODE_BOOT_FROM _RAM);
#endif
#endif
//
//步骤2。 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件中,
//说明了如何将 GPIO 设置为其默认状态。
//
EALLOW;
//LED1
GpioCtrlRegs.GPAPUD.bit.GPIO31 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO31 = 1;
//LED2 CPU2对其进行控制
GPIO_SetupPinOptions (34、GPIO_OUTPUT、GPIO_PushPull);
GPIO_SetupPinMux (34、GPIO_MUX_CPU2、0);
/*
GpioCtrlRegs.GPBPUD.bit.GPIO34 = 1;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
*
EDIS;
////
步骤3。 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态是禁用所有 PIE 中断并
清除标志//。
//此函数位于 F2837xD_PIECTRL.c 文件中。
//
InitPieCtrl();
//
禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//初始化 PIE 矢量表,其中包含指向 shell 中断
//服务例程(service routines,ISR)的指针。
//这将填充整个表,即使在
本示例中未使用中断//也是如此。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
//
InitPieVectTable();
EALLOW;
PieVectTable.ADCA1_INT =&adca1_ISR;
//PieVectTable.EPWM1_INT =&epwm1_ISR;
EDIS;
InitEpwmModules();
DisablePwmSignals();
SetupAdcModules ();
SetupAdcChannels();
EnableEpwm1SockA();
SciaInit();
InitEcap3();
InitPositionSensor();
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx1 = 1;// adca1
//
//启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
}
CPU2引导加载
程序 uint32_t main (void)
{
IF (SciaRegs.SCIFFCT.bit.Abd)
{
//
//SCIA 嵌入
//
while (!SciaRegs.SCICTL2.bit.TXEMPTY)
{
}
//
//步骤1. 初始化系统控制:
//启用外设时钟
//此示例函数位于 F2837xD_SYSCTRL.c 文件中。
// InitSysCtrl();// PLL 将被 CPU1锁定,也将被锁定
//发条剩余的时间
//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
//InitGpio();
//
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2837xD_PIECTRL.c 文件中。
//
// InitPieCtrl();
//
//禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
//
// InitPieVectTable();
//
//调用闪存初始化以设置闪存等待状态
//此函数必须驻留在 RAM 中
//
InitFlash();
uint16 x = 0;
对于(x = 0;x < 32676;x++){}
对于(x = 0;x < 32676;x++){}
IpcRegs.IPCBOOTSTS = C2_BootROM_BOOTSTS_SYSTEM_READY;
while (IpcRegs.IPCBOOTMODE!= C1C2_Brom_BOOTMODE_BOOT_BOOT_FROM _FLASH){}
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断
//
//增益泵信标
//
SeizeFlashPump();
init_Flash_sectors ();
//Put GetFunction 此处
uint32_t EntryAddr = SCI_GetFunction ();
//
//保持对闪存泵的控制
//
SignalCPU1();
//返回 EntryAddr;//加载应用程序 intob 的条目地址
//RPC:返回程序计数器*/
}
void (* funcPtr)(void)=(void (*)(void)) 0x084000;
(*funcPtr )();
返回(0);
}
CPU2应用程序代码
void sysinit (void)
{
//
//步骤1。 初始化系统控制:
// PLL、看门狗、启用外设时钟
//此示例函数位于 F2837xD_sysctrl.c 文件中。
//
InitSysCtrl();
//
//步骤2。 初始化 GPIO:
//此示例函数位于 F2837xD_GPIO.c 文件中,
//说明了如何将 GPIO 设置为其默认状态。
//
////
步骤3。 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态是禁用所有 PIE 中断并
清除标志//。
//此函数位于 F2837xD_PIECTRL.c 文件中。
//
InitPieCtrl();
//
禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//初始化 PIE 矢量表,其中包含指向 shell 中断
//服务例程(service routines,ISR)的指针。
//这将填充整个表,即使在
本示例中未使用中断//也是如此。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xD_PieVect.c 中找到
//
InitPieVectTable();
//
启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
}
此致。