工具/软件:Code Composer Studio
我已获取其中一个TI驱动器示例(看门狗),并尝试修改以包含一些代码来驱动音频蜂鸣器。 我以为我已经解决了这个问题,但现在我遇到了一个新的错误。 注意使用CCS Desktop是一种不可启动的操作。 我想为CCS云找到一个简单的解决方案。 我不理解消息中所指的“默认工具命令”。
我正在使用在另一个项目(BUZZer.c和BUCZZer.h)中找到的以下代码。 我修正的唯一代码行是蜂鸣器。c,在这里我更改了定时器参考库
#include <ti/devices/cc26x0/driverlib/timer.h>
/**===========================================================================================
*@文件 蜂鸣器.c
*
**@简介 基于PWM的蜂鸣器接口。
*===========================================================================================================================================================
*/*----------------------------------
*包括
*----------------------------------
*//
TI RTOS驱动程序
#include <ti/drivers/Power.h>
#include <ti/drivers/power/PowerCC26XX.h>//
临时PWM解决方案,直接在DriverLib
//(直到计时器RTOS驱动程序到位)
#include <ti/drivers/pinCC26XX.h>
#include <ti/devices/cc26x0/蜂
鸣器<!-----!--batt低-------------------------------------------------------------------------------------------------------------------
*局部变量
*----------------------------------
*/
static PIN_handle hPin = NULL;
/*----------------------------------
*公共职能
*----------------------------------
*
///..................
*@fn. BuzzerOpen
*
**@简介 初始化蜂鸣器
*
**@描述 初始化引脚和PWM
*
**@返回 -
*/
void buzzerOpen (PIN_handle hGpioPin)
{
hpin = hGpioPin;
//打开GPT0和GPIO的Periph功率域和时钟
POWER_setDependency (PowerCC26XX_Periph_GPT0);
POWER_setConstraint (PowerCC26XX_SB_Disallow);
//指定GPT0
TimerConfigure(GPT0_base, timer_CFG_Split_pair | timer_CFG_A_PWM);
//为PWM输出配置引脚
PINCC26XX_setMux (hPin,Board_B蜂 鸣器,IOC_PORT_MCU_PORT_EVENT0);
}/*******************************************************************************
*@fn. buzzerSetFrequency
*
**@简介 设置频率(3Hz - 8 KHz)
*
*@返回 如果频率在范围
*/
bool buzzerSetFrequency (uint16_t freq)
{
uINT32_t刻度;
UINT32_t loadLow;
UINT32_t loadHigh;
UINT32_t matchLow;
UINT32_t matchHigh;
IF (频率< BUZZER_FREQ_MIN &&频率> BUZZER_FREQ_MAX)
{
返回false;
}
//重新配置期间停止计时器
TimerDisable (GPT0_BASE,TIMER_A);
//计算计时器负载和匹配值
ticks = 4800万 / freq;
loadLow = ticks和0x0000FFFF;
loadHigh =(tick & 0x00FF0000)>> 16;
matchLow =(tick / 2)& 0x0000FFFF;
matchHigh =(ticks / 2)和0x00FF0000)>> 16;
//设置计时器负载
TimerLoadSet(GPT0_base, timer_A,loadLow);
TimerPrescaleSet (GPT0_BASE,TIMER_A,loadHigh);
//设置计时器匹配
TimerMatchSet(GPT0_base, timer_both, matchLow);
TimerPrescaleMatchSet (GPT0_BASE,TIMER_A,matchHigh);
//启动计时器
TimerEnable (GPT0_BASE,TIMER_A);
返回true;
}/***********************************************************************
*@fn. BuzzerClose
*
**@简介 关闭蜂鸣器接口
*
**@返回 -*/
void buzzerClose()
{
//将引脚配置为GPIO
PINCC26XX_setMux (hPin,Board_p蜂 鸣器,IOC_PORT_GPIO);
//关闭GPT0的Periph功率域和时钟
Power_releaseDependency (PowerCC26XX_Periph_GPT0);
power_releaseConstraint (PowerCC26XX_SB_disallow);
}
蜂鸣器.h:
/**===========================================================================================
*@文件buzzer.h
*
*@基于PWM的短蜂鸣器接口。
*
*===========================================================================================================================================================
*/
#ifndef _b蜂 鸣器_H_
#define _b蜂 鸣器_H_
/*----------------------------------
*包括
*----------------------------------
*/
包含"Board.h"
/*----------------------------------
*常量
*----------------------------------
*/
#define蜂鸣器_FREQ_MIN 3.
#define buzer_FREQ_MAX 8000
/*----------------------------------
*功能
*----------------------------------
*/
void buzzerOpen(PIN_handle hPinGpio);
布尔buzzerSetFrequency (uint16_t频率);
void buzzerClose(void);
#endif
我的主项目文件watchdog.c修改如下:
/*
========= watchdog.c.===
*/
#include <unistd.h>
#include <stdbool.h>
#include <stdint.h>/*
TI-RTOS头文件*/
#include <ti/drivers/PIN.h>
#include <ti/drivers/Watchdog.h>
/* example/Board Header文件*/
#include "Board.h"
/#p蜂
鸣
器*用于此应用程序的频率/#frequency 1000
/* PIN_Config表的全局内存存储*/
static PIN_State ledPinState;
static PIN_State buttonPinState;
//static PIN_State buzzerPinState;
/*引脚驱动器手柄*/
static PIN_handle ledPinHandle;
static PIN_handle buttonPinHandle;
static PIN_handle buzzerPinHandle;
/*
应用程序LED最初配置
为DIPin 0。
*/
PIN_Config ledPinTable[]={
Board_PIN_LED0 | PIN_GPIO输出_EN | PIN_GPIO低| PIN_PushPull | PIN_DRVSTR_MAX,
PIN_TERMINATE
};/*
应用程序按钮插针配置表:
*/
PIN_Config按钮插针表[]={
Board_PIN_BUTTON0 | PIN_INT_EN | PIN_PLUPUP | PIN_IRQ_POSedge,
PIN_TERMINATE
};/*
应用程序蜂鸣器针脚配置表:
*- Board_PIN_BUZZER最初关闭。
*/
PIN_Config buzzerPinTable[]={
Board_PIN_B蜂 鸣器| PIN_GPIO输出_EN | PIN_GPIO低| PIN_PushPull | PIN_DRVSTR_MAX,
PIN_TERMINATE
};
bool serviceFlag = TRUE;
bool watchdogExpirred = FALSE;
Watchdog手柄watchdogHandle;
/*
=== watchdogCallback =========
*监视器中断回调函数。
*/
void watchdogCallback (uintpttr_t未使用)
{
/* Clear watchdog interrupt flag */
看门狗清除(watchdogHandle);
watchdogExpirred =真;
/*在此处插入超时处理代码。 */
}/*
==== pinButtonFxn =========
*用于BOARD_PIN_BUTTON0上GPIO中断的回调函数。
*/
void pinButtonFxn (PIN_handle handle,PIN_ID pinId)
{
/*清除serviceFlag以停止持续为看门狗提供服务*/
serviceFlag = false;
}/*
=== 主====
*/
void *mainThread (void *arg0)
{
Watchdog Params参数;
/*呼叫板初始化函数*/
看门狗_init();
/* LED针脚开路*/
ledPinHandle = PIN_open(&ledPinState, ledPinTable);
IF (!ledPinHandle){
/*初始化主板LED针脚时出错*/
同时(1);}
/*关闭用户LED */
PIN_setOutputValue (ledPinHandle,Board_PIN_LED0,0);
/*设置按键引脚的回叫*/
buttonPinHandle = PIN_OPEN (&buttonPinState,buttonPinTable);
IF (!buttonPinHandle){
/*初始化按钮针脚时出错*/
同时(1);}
如果(PIN_registerIntCb(butonPinHandle,&pinButtonFxn)!=0){
/*注册按钮回调函数时出错*/
同时(1);}
PIN_setInterrupt (buttonPinHandle,Board_PIN_BUTTON0|PIN_IRQ_POSedge);
/*创建并启用禁用重置的监视程序*/
Watchdog Params_init(¶ms);
params.callbackFxn =(Watchdog Callback) watchdogCallback;
Params.resetMode = Watchdog重设关闭;
watchdogHandle = Watchdog打开(Board_WATCHDOG0,¶ms);
如果(watchdogHandle == NULL){
/*打开监视程序时出错*/
同时(1);}
/*输入连续循环*/
同时(true){
/*如果serviceFlag为true */,则服务监视程序
如果(serviceFlag){
Watchdog清除(watchdogHandle);
}
/*如果看门狗自上次启动后过期,打开LED */
如果(watchdogExpirred){
PIN_setOutputValue (ledPinHandle,Board_PIN_LED0,1);
//打开声音
BuzzerOpen(ButonPinHandle);
buzzerSetFrequency (蜂鸣器频率);
睡眠(5);
看门狗清除(watchdogHandle);
serviceFlag =真;
watchdogExpirred =假;
PIN_setOutputValue (ledPinHandle,Board_PIN_LED0,0);
//关闭声音
buzzerClose();
}
}
}
然后,我将以下内容添加到我的本地Board.h文件中:
#define Board_GPIO蜂鸣器 CC2640R2_LAUNCHXL_GPIO蜂鸣器
#define Board_PIN_p蜂 鸣器 CC2640R2_LAUNCHXL_PIN_BUZZER
/*蜂鸣器*/ #定义CC2640R2_LAUNCHXL_PIN_BUZZER ioID_15.
/*!
*@def CC2640R2_LAUNCHLX_GPIOName
*@GPIO名称的简明枚举
*/
typedef enum CC2640R2_LAUNCCHXL_GPIOName {
CC2640R2_LAUNCHXL_GPIO _S1 = 0,
CC2640R2_LAUNCHXL_GPIO_S2,
CC2640R2_LAUNCHXL_GPIO蜂鸣器,
CC2640R2_LAUNCHXL_GPIO_LED_GREEN,
CC2640R2_LAUNCHXL_GPIO_LED_RED,
CC2640R2_LAUNCHXL_GPIO_SPI_FLASH_CS,
CC2640R2_LAUNCCHXL_GPIOCOUNT
} CC2640R2_LAUNCCHXL_GPIOName;
gPIO_PinConfig gpioPinConfig[]={
/*输入引脚*/
GPIOCC26XX_DIO_13 | GPIO_CFG_IN_PU | GPIO _CFG_IN_INT_INT_Rising,/*按钮0 */
GPIOCC26XX_DIO_14 | GPIO_CFG_IN_PU | GPIO _CFG_IN_INT_INT_Rising,/*按钮1 */
/*输出引脚*/
GPIOCC26XX_DIO_15 | GPIO_CFG_OUT _STD | GPIO_CFG_OUT _STR_HIGH | GPIO_CFG_OUT低,/*音调蜂鸣器*/
GPIOCC26XX_DIO_07 | GPIO_CFG_OUT _STD | GPIO_CFG_OUT _STR_HIGH | GPIO_CFG_OUT低,/*绿色LED */
GPIOCC26XX_DIO_06 | GPIO_CFG_OUT _STD | GPIO_CFG_OUT _STR_HIGH | GPIO_CFG_OUT低,/*红色LED */
/* SPI Flash CSN */
GPIOCC26XX_DIO_20 | GPIO_CFG_OUT _STD | GPIO_CFG_OUT _STR_HIGH | GPIO _CFG_OUT _HIGH
,};
Const PIN_Config BoardGpioInitTable[]={
CC2640R2_LAUNCHXL_PIN_BUZZER | PIN_GPIO OUTPUT EN | PIN_GPIO低| PIN_PushPull | PIN_DRVSTR_MAX, /*新蜂鸣器输出定义*/
CC2640R2_LAUNCHXL_PIN_RLED | PIN_GPIO输出_EN | PIN_GPIO低| PIN_PushPull | PIN_DRVSTR_MAX, /* LED最初关闭*/
CC2640R2_LAUNCHXL_PIN_GLED | PIN_GPIO输出_EN | PIN_GPIO低| PIN_PushPull | PIN_DRVSTR_MAX, /* LED最初关闭*/
CC2640R2_LAUNCCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PLEUP | PIN_IRQ_BOTHEDGES | PIN_HYSTESIS, /*按钮处于活动状态,低*/
CC2640R2_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PLEUP | PIN_IRQ_BOTHEDGES | PIN_HYSTESIS, /*按钮处于活动状态,低*/
CC2640R2_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO输出_EN | PIN_GPIO _HIGH | PIN_PushPull | PIN_DRVSTR_MIN,/*外部闪存芯片选择*/
CC2640R2_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_Pulldown, /* UART RX,通过调试器背面通道*/
CC2640R2_LAUNCHXL_UART_TX | PIN_GPIO输出_EN | PIN_GPIO _HIGH | PIN_PushPull, /* UART TX,通过调试器背面通道*/
CC2640R2_LAUNCCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_Pulldown, /* SPI主输出-从输入*/
CC2640R2_LAUNCCHXL_SPI0_miso | PIN_INPUT_EN | PIN_Pulldown, /* SPI主输入-从输出*/
CC2640R2_LAUNCCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_Pulldown, /* SPI时钟*/
PIN_TERMINATE
};