CC1310点灯记录
前言
本篇记录描述的是如何基于示例工程修改为空白模板,并完成点灯操作,CCS自建工程使用方法暂未摸透。
操作
大致步骤如下:
1. 导入示例代码
2. 编译示例代码
3. 修改芯片参数(型号、FLASH、RAM)
4. 修改相关多余外设配置
5. 修改实际硬件LED IO口
1.导入示例代码
1.1导入步骤
-
点击File->import
-
在弹出的串口中选择CCS Projects,点击Next
-
选择示例路径
-
选择CCS编译器版本导入
-
Finish完成导入
示例路径在CCS安装路径下,以下路径供参考D:\CCS\simplelink_cc13x0_sdk_4_20_02_07\examples\nortos\CC1310_LAUNCHXL\drivers
其中simplelink_cc13x0_sdk_4_20_02_07需要下载安装,具体安装方式忘记录
1.2导入步骤图示
导入完示例工程结构如图
2.编译示例代码
编译步骤:
-
选中示例(示例后有Active - Debug)
-
点击小锤子进行编译
-
在控制台查看编译结果
3.修改示例代码
由于示例代码是基于CC1310F128芯片下的开发板,所以需要修改芯片以及外设配置,需要修改的内容如下:
- targetConfigs文件下是芯片配置文件,此时点开可见为CC1310F128.ccxml,需修改
- CC1310_LAUNCHXL_NoRTOS.cmd是功能芯片内存映射文件,其中包括FALSH、RAM大小,需修改
- 原工程配置了LED等外设,IO与实际电路不同,需修改
修改前工程配置如图
3.1修改芯片参数
3.1.1修改芯片型号
-
右键工程文件夹,选择Properties
-
点击General,芯片Core选择CC1310F64
-
点击应用并关闭
修改芯片型号图示
3.1.2修改映射文件
双击cmd文件修改FLASH、RAM大小如下并保存
#define FLASH_BASE 0x0
#define FLASH_SIZE 0x10000
#define RAM_BASE 0x20000000
#define RAM_SIZE 0x4000
编译一下,依旧无报错
修改后如图
3.2修改原本外设对应IO
首先打开主函数浏览一遍,发现只有Board_init、mainThread函数是可以跳转(按住Ctrl鼠标点击)并编辑的
/** ======== main ========*/
int main(void){
/* Call driver init functions */
Board_init();
/* Start NoRTOS */
NoRTOS_start();
/* Call mainThread function */
mainThread(NULL);
while (1) {}
}
Board_init函数如下
/** ======== Board_init ========*/
void Board_init(void){
CC1310_LAUNCHXL_initGeneral();
}
/* 然后调用以下函数*/
/** ======== CC1310_LAUNCHXL_initGeneral ========*/
void CC1310_LAUNCHXL_initGeneral(void){
Power_init();
if (PIN_init(BoardGpioInitTable) != PIN_SUCCESS) {
/* Error with PIN_init */
while (1);
}
/* Perform board-specific initialization */
Board_initHook();
}
其中Power_init()函数不可编辑,必须调用,BoardGpioInitTable 是引脚定义可以编辑修改,跳转如下
/** =============================== PIN ===============================*/
#include <ti/drivers/PIN.h>
#include <ti/drivers/pin/PINCC26XX.h>
const PIN_Config BoardGpioInitTable[] = {
CC1310_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
CC1310_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
CC1310_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
CC1310_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
CC1310_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN, /* External flash chip select */
CC1310_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN, /* UART RX via debugger back channel */
CC1310_LAUNCHXL_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL, /* UART TX via debugger back channel */
CC1310_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master out - slave in */
CC1310_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master in - slave out */
CC1310_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI clock */
PIN_TERMINATE
};
按照实际需求修改LED引脚即可
- 点击CC1310_LAUNCHXL_PIN_RLED跳转到.h下修改LED引脚
- 根据需求注释已初始化PIN,此处只需点灯,因此全部注释
- 按照示例新增LED引脚初始化配置
回到Board_init,Board_initHook函数是外部flash初始化配置,用不上,直接注释
编译后报错,双击报错跳转
发现是PWM绑定的LED被注释了,改成未使用即可
重新编译,无报错
接下来进入"主函数",CCS中真正主函数名称为mainThread(null),其中包括了GPIO初始化 ,GPIO设置等,这和之前的BoardGpioInitTable不一样,前者是IO定义以及声明,此处的GPIO_init才是正式初始化操作,但内部实现无法查看
/* Call mainThread function */ mainThread(NULL);
mainThread示例如下:
/** ======== mainThread ========*/
void *mainThread(void *arg0){
/* Call driver init functions */
GPIO_init();
/* Configure the LED and button pins */
GPIO_setConfig(Board_GPIO_LED0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig(Board_GPIO_LED1, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig(Board_GPIO_BUTTON0, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
/* Turn on user LED */
GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_ON);
/* install Button callback */
GPIO_setCallback(Board_GPIO_BUTTON0, gpioButtonFxn0);
/* Enable interrupts */
GPIO_enableInt(Board_GPIO_BUTTON0);
/** If more than one input pin is available for your device, interrupts will be enabled on Board_GPIO_BUTTON1.**/
if (Board_GPIO_BUTTON0 != Board_GPIO_BUTTON1) {
/* Configure BUTTON1 pin */
GPIO_setConfig(Board_GPIO_BUTTON1, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
/* Install Button callback */
GPIO_setCallback(Board_GPIO_BUTTON1, gpioButtonFxn1);
GPIO_enableInt(Board_GPIO_BUTTON1);
}
return (NULL);
}
该示例是配置了LED和按键,当两个按键按下其中一个时触发对应的回调函数,让分别对应的LED翻转电平,因此我们点灯只需要设置引脚模式,再写电平即可,修改后“主函数”如下
但由于此处IO口不是我们需要的,因此点击 Board_GPIO_LED0 跳转到Board.h新增一个Board_GPIO_RUNLED或者自己按格式命名,
再继续点击CC1310_LAUNCHXL_GPIO_LED_RED跳转,修改枚举CC1310_LAUNCHXL_GPIOName,两处修改如下图,注意最底下的CC1310_LAUNCHXL_GPIOCOUNT不可删除或注释,在其他文件中有调用,用于初始化IO数量
再回到“主函数”修改参数,如下图
编译查看是否正常
点击报错进行跳转,发现是定义的LCD等、SPI_CS、SDSPI_CS引脚被我们注释了由于这些是普通IO,不是功能模组映射,所以不能去CC1310_LAUNCHXL.h修改宏,直接注释相关代码,如下图
完成后编译一下有报错,发现是主函数中按键回调函数的IO未定义,双击跳转
用不到,直接注释再次编译无报错
OK,到这里原本导入的工程已经修改为通用空白模板了,但是还不是完全十分规范的空模板,比如CC1310_LAUNCHXL.h中还是定义了有一个LCD屏幕、有一个SD等等,但是不影响我们点灯操作。
3.3修改硬件LED IO
但此时烧录肯定是不会亮灯的,原因是我们只定义IO初始化表,只声明了有一个IO想用来控制LED,但没配置具体是那个IO口,所以要去CC1310_LAUNCHXL.c中配置LED对应的IO口,找到gpioPinConfigs,修改如下之后编译,点击FLASH即可烧录,如图烧录完后就可看到板子上的LED亮了。