CC26xx PWM

来源:互联网 发布:日本软件下载网站 编辑:程序博客网 时间:2024/06/09 14:36

CC26xx PWM使用定时做的,请查看下面代码分析。

#ifndef EXCLUDE_IO/* -----------------------------------------------------------------------------*  Includes* ------------------------------------------------------------------------------*/// TI RTOS drivers#include <ti/drivers/Power.h>#include <ti/drivers/power/PowerCC26XX.h>// Temporary PWM solution directly on DriverLib// (until a Timer RTOS driver is in place)#include <ti/drivers/pin/PINCC26XX.h>#include <driverLib/timer.h>#include "sensortag_buzzer.h"/* -----------------------------------------------------------------------------*  Local variables* ------------------------------------------------------------------------------*/static PIN_Handle hPin = NULL;/* -----------------------------------------------------------------------------*  Public Functions* ------------------------------------------------------------------------------*//******************************************************************************* * @fn          SensorTagBuzzer_open * * @brief       Initialize the Buzzer * * @descr       Initializes pin and PWM * * @return      - */void SensorTagBuzzer_open(PIN_Handle hGpioPin){    hPin = hGpioPin;    // Turn on PERIPH power domain and clock for GPT0 and GPIO    Power_setDependency(PowerCC26XX_PERIPH_GPT0);    Power_setConstraint(PowerCC26XX_SB_DISALLOW);    // Assign GPT0    TimerConfigure(GPT0_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PWM);    // Configure pin for PWM output    PINCC26XX_setMux(hPin, Board_BUZZER, IOC_PORT_MCU_PORT_EVENT0);}/******************************************************************************* * @fn          SensorTagBuzzer_setFrequency * * @brief       Set the frequency (3Hz - 8 KHz) * * @return      return true if the frequency is within range */bool SensorTagBuzzer_setFrequency(uint16_t freq){    uint32_t ticks;    uint32_t loadLow;    uint32_t loadHigh;    uint32_t matchLow;    uint32_t matchHigh;    if (hPin == NULL)    {        // Make sure the pin is not used when not open        return false;    }    if (freq < BUZZER_FREQ_MIN && freq > BUZZER_FREQ_MAX)    {        return false;    }    // Stop timer during reconfiguration    TimerDisable(GPT0_BASE, TIMER_A);    // Calculate timer load and match values    ticks = 48000000 / freq;    loadLow = ticks & 0x0000FFFF;    loadHigh = (ticks & 0x00FF0000) >> 16;    matchLow = (ticks / 2) & 0x0000FFFF;    matchHigh = ((ticks / 2) & 0x00FF0000) >> 16;    // Set timer load    TimerLoadSet(GPT0_BASE, TIMER_A, loadLow);    TimerPrescaleSet(GPT0_BASE, TIMER_A, loadHigh);    // Set timer match    TimerMatchSet(GPT0_BASE, TIMER_BOTH, matchLow);    TimerPrescaleMatchSet(GPT0_BASE, TIMER_A, matchHigh);    // Start timer    TimerEnable(GPT0_BASE, TIMER_A);    return true;}/******************************************************************************* * @fn          SensorTagBuzzer_close * * @brief       Closes the buzzer interface * * @return      - */void SensorTagBuzzer_close(void){    if (hPin != NULL)    {        // Configure pin as GPIO        PINCC26XX_setMux(hPin, Board_BUZZER, IOC_PORT_GPIO);        // Turn off PERIPH power domain and clock for GPT0        Power_releaseDependency(PowerCC26XX_PERIPH_GPT0);        Power_releaseConstraint(PowerCC26XX_SB_DISALLOW);        hPin = NULL;    }}#endif // EXCLUDE_IO


原创粉丝点击