使用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]存的值是多少?