TI中文支持网
TI专业的中文技术问题搜集分享网站

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

使用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内驱动库的意思吗?还是说哪里操作不对了?

Terry Han:

用ROM中的驱动库

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

gaoyang9992006:

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,重新编译工程。

shadow:

回复 Terry Han:

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

shadow:

回复 gaoyang9992006:

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

Terry Han:

回复 shadow:

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

shadow:

回复 Terry Han:

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

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

user5826235:

回复 gaoyang9992006:

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

赞(0)
未经允许不得转载:TI中文支持网 » cc3200如何使用ROM中的驱动库?
分享到: 更多 (0)