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.

cc3200如何使用ROM中的驱动库?

Other Parts Discussed in Thread: CC3200, CC3200SDK

使用ccs7.1,sdk 1.3。

芯片版本信息如下

[09:51:02] Begin GetVersion operation.
[09:51:02] INFO: > Executing Operation: Connect
[09:51:04] INFO: setting break signal
[09:51:04] INFO: connection succeeded
[09:51:04] INFO: getting storage list
[09:51:05] INFO: > Executing Operation: GetVersion
[09:51:05] INFO: reading version info
[09:51:05] INFO: > Bootloader version: 2.0.3.2
[09:51:05] INFO: > Chipset version: 19
[09:51:05] INFO: > Executing Operation: Disconnect
[09:51:05] Operation GetVersion returned.

blink例子直接运行可以跑,但是在ccs的predefined symbols填入TARGET_IS_CC3200,则无法运行。

TARGET_IS_CC3200 不是使用ROM内驱动库的意思吗?还是说哪里操作不对了?

  • 用ROM中的驱动库

    在CC3200的内部进行函数调用的过程中会自动的索引到ROM中的底层驱动函数

  • 1.2  CC3200 ROM中的驱动库

    用户的应用程序可以调用ROM中的设备驱动函数。CC3200SDK包中有整个驱动库的源代码,开发者可以用驱动库建立一个应用,在RAM中直接调用这些驱动函数。

    这一章的目的是告诉开发者怎样使用驱动函数,重写驱动函数,扩展新的驱动函数

    1.2.1  访问ROM中的驱动库

    在ROM空间中,通过以下重定向列表,可以调用到相应的ROM API,同时在兼容现有API的基础上,允许未来进行扩展。在以后的ROM版本中,API的存放位置可能会改变,但是API列表不会改变。

    API列表分为两部分:主列表和次列表。主列表中,一个外设对应一个地址指针,这个指针指向此外设的次列表空间;每一种外设对应有一个次列表,次列表中包含有外设相关的所有API地址。

    主列表在ROM中的地址为0x0000040C,以下表中列表举了一小部分API列表:

    ROM_INTERRUPTTABLE的地址为0x0000041C,ROM_IntMasterEnable()函数的地址为ROM_INTERRUPTTABLE地址向后偏移4。

    ROM_APITABLE是一个存放在地址0x0000040C上的指针。

    ROM_INTERRUPTTABLE是一个存放在地址ROM_APITABLE[4]上的指针数据。

    ROM_INTERRUPTTABLE [1]表示一个函数指针,这个指针指向ROM_IntMasterEnable函数。

    1.2.2  将ROM API链接到用户程序

    1.        所有用到驱动库API的.c文件必须按顺序包含以下头文件:

                                                    i.             • #include rom.h
    • #include rom_map.h

    2.        所有工程文件必须添加定义:define TARGET_IS_CC3200

    3.        调用API时,必须在前边加MAP_;如,要调用UARTCharPut,就要调用MAP_UARTCharPut.任何对API的改动或扩展也要遵守这个原则。

    4.        重新编译相关的工程。

    1.2.3  重定义ROM API

    对ROM API重定义后,API是存放在RAM中的,调用RAM的API代码。

    1.        在文件\driverlib\rom_patch.h 中声明需要重定义的API函数

    2.        例如:要重定义MAP_UARTCharPut和MAP_UARTBreakCtl,则在rom_patch.h文件中添加:

    a)        • #undef ROM_UARTCharPut
    • #undef ROM_UARTBreakCtl  

    3.        重新编译相关工程

    1.2.4  完全使用RAM中的驱动库

    删除全局定义define TARGET_IS_CC3200,重新编译工程。

  • 那使用ROM内部函数是否需要 填入 TARGET_IS_CC3200 ?

  • 我在properties-build-arm compiler-predefined symbols中 配置了 TARGET_IS_CC3200  但是无效果啊,程序根本就跑不动

  • 建议直接下载TI官方的SDK例程,并且安装在默认的路径下,打开SDK的工程就可以直接使用了

  • 实际上,我就是用官方sdk的工程,看了说明,要求加入TARGET_IS_CC3200,但在sdk里边却发现并没有define TARGET_IS_CC3200

    因此提出疑问,官方sdk是否使用了ROM内置驱动库

  • 请教一下问题: 在1.2.1中提到 “ROM_INTERRUPTTABLE [1]表示一个函数指针,这个指针指向ROM_IntMasterEnable函数”,这里的ROM_IntMasterEnable函数的地址是多少呢?怎么确定的啊?也就是问"ROM_INTERRUPTTABLE是一个存放在地址ROM_APITABLE[4]"中的ROM_APITABLE[4]存的值是多少?