Thread 中讨论的其他器件:EK-TM4C1294XL、 TPS2052
工具/软件:Code Composer Studio
这是 PWM 的驱动程序代码、发现以下错误。
//
//
// pinout.c -用于配置 EK-TM4C1294XL 上的器件引脚的函数。
//
//版权所有(c) 2013-2016 Texas Instruments Incorporated。 保留所有权利。
//软件许可协议
//
//德州仪器(TI)仅提供和使用此软件
//专门用于 TI 的微控制器产品。 该软件归其所有
// TI 和/或其供应商、受适用版权保护
//法律。 您不能将此软件与"病毒"开源软件结合使用
//软件,以便形成一个更大的程序。
//
//此软件按“原样”提供,且存在所有故障。
//不作任何明示、暗示或法定的保证,包括但
//不限于对适销性和适用性的暗示保证
//此软件的特定用途。 TI 不得以任何方式进行
//情况,对特殊、偶然或从属事件负责
//任何原因造成的损害。
//
//这是 EK-TM4C1294XL 固件包版本2.1.3.156的一部分。
//
//
#include
#include
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "drivers/pinout.h"
//
//
//! 添加组 pinout_API
//! @{
//
//
//
//
//! 针对 EK-TM4C1294XL 上的标准用法配置器件引脚。
//!
//! \param bethernet 是一个布尔值、用于确定以太网引脚的功能。
//! 如果真以太网引脚配置为以太网 LED。 GPIO 是否为假
//! 可供应用使用。
//! \param bUSB 是用于确定 USB 引脚功能的布尔值。 如果是真正的 USB
//! 引脚配置为供 USB 使用。 如果为 false、则 USB 引脚可用于
//! 应用程序用作 GPIO。
//!
//! 此函数用于启用 GPIO 模块并配置器件引脚
//! EK-TM4C1294XL 上的默认标准用法。 应用程序
//! 器件引脚的替代配置无法调用
//! 此功能、并负责配置所有器件
//! 引脚、也可以在调用此引脚后重新配置所需的器件引脚
//! 功能。
//!
//! \无返回。
//
//
无效
PinoutSet (bool bEthernet、bool bUSB)
{
//
//启用所有 GPIO 外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
//
// PA0-1用于 UART0。
//
ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//
// PB0-1/PD6/PL6-7用于 USB。
// PQ4可用作此板上的电源故障检测,但不能用作
//硬件外设电源故障输入引脚。
//
if (bUSB)
{
HWREG (GPIO_PORTD_BASE + GPIO_O_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTD_BASE + GPIO_O_CR)= 0xff;
ROM_GPIOPinConfigure (GPIO_PD6_USB0EPEN);
ROM_GPIOPinTypeUSBAnalog (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);
ROM_GPIOPinTypeUSBDigital (GPIO_PORTD_BASE、GPIO_PIN_6);
ROM_GPIOPinTypeUSBAnalog (GPIO_PORTL_BASE、GPIO_PIN_6 | GPIO_PIN_7);
ROM_GPIOPinTypeGPIOInput (GPIO_PORTQ_BASE、GPIO_PIN_4);
}
其他
{
//
//保持 USB 使用的大多数引脚的默认配置。
//向 PD6添加下拉电阻以关闭 TPS2052开关
//
ROM_GPIOPinTypeGPIOInput (GPIO_PORTD_BASE、GPIO_PIN_6);
MAP_GPIOPadConfigSet (GPIO_PORTD_base、GPIO_PIN_6、GPIO_Strength _2mA、
GPIO_PIN_TYPE_STD_WPD);
}
//
// PF0/PF4用于以太网 LED。
//
if (bethernet)
{
//
//此应用程序要配置以太网 LED 功能。
//
ROM_GPIOPinConfigure (GPIO_PF0_EN0LED0);
ROM_GPIOPinConfigure (GPIO_PF4_EN0LED1);
GPIOPinTypeEthernetLED (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4);
}
其他
{
//
//此应用程序不希望以太网 LED 功能配置为
//用于 LED 驱动的标准输出。
//
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4);
//
//将 LED 默认为关闭。
//
ROM_GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4、0);
MAP_GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_4、
GPIO_Strength _12mA、GPIO_PIN_TYPE_STD);
}
//
// PJ0和 J1用于用户按钮
//
ROM_GPIOPinTypeGPIOInput (GPIO_PORTJ_BASE、GPIO_PIN_0 | GPIO_PIN_1);
ROM_GPIOPinWrite (GPIO_PORTJ_BASE、GPIO_PIN_0 | GPIO_PIN_1、0);
//
// PN0和 PN1用于用户 LED。
//
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1);
MAP_GPIOPadConfigSet (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1、
GPIO_Strength _12mA、GPIO_PIN_TYPE_STD);
//
//将 LED 默认为关闭。
//
ROM_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1、0);
}
//
//
//! 此函数将状态写入 LED 组。
//!
//! param ui32LEDDMASK 是一个位掩码、应通过此掩码来更改 GPIO
//! 调用。
//! \param ui32LEDValue 是在之后应用到 LED 的新值
//! ui32LEDMASK。
//!
//! 第一个参数充当掩码。 仅限掩码中已设置的位
//! 将对应于可能发生变化的 LED。 掩码未设置的 LED
//! 不会改变。 这与 GPIOPinWrite 的工作方式相同。 在应用后
//! 屏蔽将每个未屏蔽的 LED 的设置写入相应的
//! 通过 GPIOPinWrite 的 LED 端口引脚。
//!
//! \无返回。
//
//
无效
LEDWrite (uint32_t ui32LEDMASK、uint32_t ui32LEDValue)
{
//
//检查掩码并按照指示设置或清除 LED。
//
if (ui32LEDDMASK 和 CLP_D1)
{
if (ui32LEDValue 和 CLP_D1)
{
GPIOPinWrite (CLP_D1_PORT、CLP_D1_PIN、CLP_D1_PIN);
}
其他
{
GPIOPinWrite (CLP_D1_PORT、CLP_D1_PIN、0);
}
}
if (ui32LEDDMASK 和 CLP_D2)
{
if (ui32LEDValue 和 CLP_D2)
{
GPIOPinWrite (CLP_D2_PORT、CLP_D2_PIN、CLP_D2_PIN);
}
其他
{
GPIOPinWrite (CLP_D2_PORT、CLP_D2_PIN、0);
}
}
if (ui32LEDDMASK 和 CLP_D3)
{
if (ui32LEDValue 和 CLP_D3)
{
GPIOPinWrite (CLP_D3_PORT、CLP_D3_PIN、CLP_D3_PIN);
}
其他
{
GPIOPinWrite (CLP_D3_PORT、CLP_D3_PIN、0);
}
}
if (ui32LEDDMASK 和 CLP_D4)
{
if (ui32LEDValue 和 CLP_D4)
{
GPIOPinWrite (CLP_D4_PORT、CLP_D4_PIN、CLP_D4_PIN);
}
其他
{
GPIOPinWrite (CLP_D4_PORT、CLP_D4_PIN、0);
}
}
}
//
//
//! 此函数将状态读取到 LED 组。
//!
//! \param pui32LEDValue 是一个指向 LED 值存储位置的指针。
//!
//! 此函数读取 CLP LED 的状态并存储该状态
//! pui32LEDValue 指向的变量中的信息。
//!
//! \无返回。
//
//
空 LEDRead (uint32_t * pui32LEDValue)
{
*pui32LEDValue=0;
//
//读取引脚状态并根据需要设置变量位。
//
if (GPIOPinRead (CLP_D4_port、CLP_D4_PIN))
{
*pui32LEDValue |= CLP_D4;
}
//
//读取引脚状态并根据需要设置变量位。
//
if (GPIOPinRead (CLP_D3_PORT、CLP_D3_PIN))
{
*pui32LEDValue |= CLP_D3;
}
//
//读取引脚状态并根据需要设置变量位。
//
if (GPIOPinRead (CLP_D2_PORT、CLP_D2_PIN))
{
*pui32LEDValue |= CLP_D2;
}
//
//读取引脚状态并根据需要设置变量位。
//
if (GPIOPinRead (CLP_D1_PORT、CLP_D1_PIN))
{
*pui32LEDValue |= CLP_D1;
}
}
//
//
//关闭 Doxygen 组。
//! @}
//
//