10770|21

569

帖子

0

TA的资源

五彩晶圆(中级)

谈F28M35的IPC boot [复制链接]

芯片上电后,首先上电运行M3内核中BOOTROM-->FLASH启动跳转到FLASH-->运行程序初始化时钟 SysCtlClockConfigSet-->初始化RAM让相关RAM中的值为0-->进行IPC,让28X内核进行BOOT

 

                              上电运行28X内核的BOOTROM-->BOOTROM中初始化M0内存,初始化密码区,初始化PIE,设定IPC中断-->进入IDLE等待M3进行IPC

 

 

333.JPG

最新回复

不足之处   没有ARM灵活   详情 回复 发表于 2014-1-24 10:39

回复
举报

569

帖子

0

TA的资源

五彩晶圆(中级)

M3让28X内核进行BOOT的程序是IPCMtoCBootControlSystem(CBROM_MTOC_BOOTMODE_BOOT_FROM_FLASH);

 

里面进行了:

 

1、读取CTOMIPCBOOTSTS寄存器确认28X内核已经BOOT了,同步M3和28X操作

2、初始化28X侧的RAM,Msg和L0~L3,让他们都为0

3、根据用户设置的BOOTMODE,设置相关的GPIO引脚

4、在MTOCIPCCOM中写入命令,在MTOCIPCBOOTMODE写入要boot的模式,让28X的BOOTROM进行BOOT

 

444.JPG


回复

569

帖子

0

TA的资源

五彩晶圆(中级)

IPCMtoCBootControlSystem程序说明

 

 

unsigned short
IPCMtoCBootControlSystem(unsigned long ulBootMode)
{   //读取CTOMIPCBOOTSTS寄存器,该寄存器C28X的地址在0x4E20,M3的地址在0x400FB740
    //读到的数是0x00010002,Figure 6-15. C-Boot ROM Health Status;
 //                     Table 6-19. C-Boot ROM Boot Status Values
 //说明28X的boot已经开始,还在进程中
    while ((HWREG(MTOCIPC_BASE +
                  IPC_O_CTOMIPCBOOTSTS) &
            CBROM_BOOTSTS_CTOM_CONTROL_SYSTEM_READY)!=
           CBROM_BOOTSTS_CTOM_CONTROL_SYSTEM_READY)
    {
    }

    //初始化28X侧的RAM,Msg和L0~L3
    if(RAMControlInitM1MsgRam())
        return true;
    if(RAMControlInitL0L3Ram())
        return true;

    // 等待MTOCIPCFLG的相关位清零
    while (HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCFLG) & (IPC_FLAG1 | IPC_FLAG32))
    {
    }
    //看看用户设置的ulBootMode值是否合法
    if (ulBootMode >= CBROM_MTOC_BOOTMODE_BOOT_COMMAND_MAX_SUPPORT_VALUE)//CBROM_MTOC_BOOTMODE_BOOT_COMMAND_MAX_SUPPORT_VALUE=0x7
    {
        return STATUS_FAIL;
    }

    // 按照设置的BOOTMode设置相关的引脚
    switch (ulBootMode)
    {
    case CBROM_MTOC_BOOTMODE_BOOT_FROM_SCI:
// SCITXDA ->    PF3_GPIO35    设置SCI相关引脚,把GPIO功能给到S8X内核控制
// SCIRXDA ->    PF4_GPIO36
        HWREG(GPIO_PORTF_BASE + GPIO_O_PUR) |= (GPIO_PIN_3 | GPIO_PIN_4);
        HWREG(GPIO_PORTF_BASE + GPIO_O_CSEL) |= (GPIO_PIN_3 | GPIO_PIN_4);
        break;
    case CBROM_MTOC_BOOTMODE_BOOT_FROM_SPI:
// SPISIMOA ->    PD0_GPIO16    设置SPI相关引脚,把GPIO功能给到S8X内核控制
// SPISOMIA ->    PD1_GPIO17
// SPICLKA ->    PD2_GPIO18
// SPISTEA    ->  PD3_GPIO19
        HWREG(GPIO_PORTD_BASE +
              GPIO_O_PUR) |=
            (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
        HWREG(GPIO_PORTD_BASE +
              GPIO_O_CSEL) |=
            (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
        break;
    case CBROM_MTOC_BOOTMODE_BOOT_FROM_I2C:
// SDAA ->    PF0_GPIO32    设置I2C相关引脚,把GPIO功能给到S8X内核控制
// SCLA ->    PF1_GPIO33
        HWREG(GPIO_PORTF_BASE + GPIO_O_PUR) |= (GPIO_PIN_0 | GPIO_PIN_1);
        HWREG(GPIO_PORTF_BASE + GPIO_O_CSEL) |= (GPIO_PIN_0 | GPIO_PIN_1);
        break;
    case CBROM_MTOC_BOOTMODE_BOOT_FROM_PARALLEL:
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);  //设置并口相关引脚,把GPIO功能给到S8X内核控制
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

// GPIO[7:6] ->    PB1:0_GPIO1:0
// GPIO[5:0] ->    PA5:0_GPIO5:0
        HWREG(GPIO_PORTA_BASE +
              GPIO_O_PUR) |=
            (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
             GPIO_PIN_4 |
             GPIO_PIN_5);
        HWREG(GPIO_PORTB_BASE + GPIO_O_PUR) |= (GPIO_PIN_0 | GPIO_PIN_1);
        HWREG(GPIO_PORTA_BASE +
              GPIO_O_CSEL) |=
            (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
             GPIO_PIN_4 |
             GPIO_PIN_5);
        HWREG(GPIO_PORTB_BASE + GPIO_O_CSEL) |= (GPIO_PIN_0 | GPIO_PIN_1);
// DSP_CTL ->  PE2_GPIO26
// HOST_CTL -> PE3_GPIO27
        HWREG(GPIO_PORTE_BASE + GPIO_O_PUR) |= (GPIO_PIN_2 | GPIO_PIN_3);
        HWREG(GPIO_PORTE_BASE + GPIO_O_CSEL) |= (GPIO_PIN_2 | GPIO_PIN_3);
        break;
    }
    //最后,写入MTOCIPCCOM命令,
    HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCCOM) = IPC_MTOC_EXECUTE_BOOTMODE_CMD;//0x00000013=19
    HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCBOOTMODE) = ulBootMode;

    //置位FLAG1和FLAG32
    HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCSET) |= (IPC_FLAG1 | IPC_FLAG32);

    return STATUS_PASS;
}


回复

569

帖子

0

TA的资源

五彩晶圆(中级)

IPCLiteMtoCSetBits_Protected 程序说明

 

 

 

IPCLiteMtoCSetBits_Protected (unsigned long ulFlag, unsigned long ulAddress,
                              unsigned long ulMask, unsigned short usLength,
                              unsigned long ulStatusFlag)
{
    //如果MTOCIPCFLG中的相关FLAG已经为1,说明在使用返回fail
    if (HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCFLG) & (ulFlag | ulStatusFlag))
    {
        return STATUS_FAIL;
    }
    //如果设定使用16位长度的命令,相关命令参考Table 6-17. MTOC IPC Commands
    if (usLength == IPC_LENGTH_16_BITS)
    {
        // Set up 16-bit set bits command, address, and mask.
        HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCCOM) = IPC_SET_BITS_16_PROTECTED;//写入商议好的命令
        HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCADDR) = ulAddress;               //要操作的寄存器地址,或者要跳转的地址
        HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCDATAW) = ulMask & (0x0000FFFF);  //对应寄存器要写入的值
    }//如果设定使用32位长度的命令,相关命令参考Table 6-17. MTOC IPC Commands
    else if (usLength == IPC_LENGTH_32_BITS)
    {
        // Set up 32-bit set bits command, address, and mask.
        HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCCOM) = IPC_SET_BITS_32_PROTECTED;//写0x0a
        HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCADDR) = ulAddress;             //要操作的寄存器地址,或者要跳转的地址
        HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCDATAW) = ulMask;                //对应寄存器要写入的值
    }

    // 置位相关IPC标志位,引起28X一侧的中断
    HWREG(MTOCIPC_BASE + IPC_O_MTOCIPCSET) |= (ulFlag | ulStatusFlag);

    return STATUS_PASS;
}


回复

4

帖子

0

TA的资源

一粒金砂(中级)

ipc

楼主可否讲讲ipc通信啊?谢了!

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

M3要读C28X侧的内容--》C28X中断--》28x收到命令后,读取,向M3发送命令--》M3中断

具体的其实调试一下例程就会清楚

回复

569

帖子

0

TA的资源

五彩晶圆(中级)


回复

569

帖子

0

TA的资源

五彩晶圆(中级)


回复

569

帖子

0

TA的资源

五彩晶圆(中级)


回复

569

帖子

0

TA的资源

五彩晶圆(中级)


回复

569

帖子

0

TA的资源

五彩晶圆(中级)


回复

569

帖子

0

TA的资源

五彩晶圆(中级)


回复

569

帖子

0

TA的资源

五彩晶圆(中级)


回复

569

帖子

0

TA的资源

五彩晶圆(中级)

点评

非常感谢楼主,这对我的帮助很大,谢谢。在官方资料的勘误表里说了一个bug,就是在Debug下m3和c28全速运行是不可操作的,这个楼主你是怎么解决的,怎么调试啊?  详情 回复 发表于 2012-7-20 11:19

回复

4

帖子

0

TA的资源

一粒金砂(中级)

回复 14楼 hlx3012 的帖子

非常感谢楼主,这对我的帮助很大,谢谢。在官方资料的勘误表里说了一个bug,就是在Debug下m3和c28全速运行是不可操作的,这个楼主你是怎么解决的,怎么调试啊?

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

这是BUG,没有办法解决.......

回复

1173

帖子

3

TA的资源

五彩晶圆(初级)

想用一下这个MCU,但好像就是不能外扩内存,暂时都没用上

回复

5

帖子

0

TA的资源

一粒金砂(中级)

请问一下,如何在CCS5中同时调试F28M35的两个核。之前都是把M3核和c2000核分开调。现在需要将两个工程合并到一起调试,不知道在CCS中如何操作。谢谢~~

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

即使是,M3核与28X核分开调试,在调试28X核之前也要运行M3中的程序,把GPIO的权限给到28X侧

有问题,楼主单独建一个帖子,附上图片把问题阐述清楚吧

点评

谢谢,我搞明白啦。  详情 回复 发表于 2012-7-23 18:41

回复

5

帖子

0

TA的资源

一粒金砂(中级)

回复 19楼 hlx3012 的帖子

谢谢,我搞明白啦。

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表