您好!
我正在使用 TM4C1231E6PZ 微控制器并执行事件计数器操作。
我无法在定时器寄存器中加载值(使用 ROM_TimerLoadSet (Timer1_base、timer_A、0); )。
我将其配置为 Timer1A 的上数事件计数器模式。 其余所有带有 UART7和定时器0的代码工作正常。
有人可以对此提供帮助吗?
Kiran
代码如下所示。
void counter1_init()
{
//
//启用此示例使用的外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
//
//将 PM0配置为计时器1的 CCP0引脚。
//
ROM_GPIOPinTypeTimer (GPIO_PORTF_BASE、GPIO_PIN_2);
ROM_GPIOPinConfigure (GPIO_PF2_T1CCP0);
//
//将定时器配置为下降沿计数模式。
//
ROM_TimerConfigure (Timer1_base、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_COUNT_UP));
ROM_TimerControlEvent (Timer1_base、timer_A、timer_event_POS_EDGE);
ROM_TimerLoadSet (Timer1_base、timer_A、0);
//
//启用计时器。
//
ROM_TimerEnable (Timer1_base、timer_A);
}
我将发送其余代码供参考。
#include
#include
#include "inc/hw_memmap.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
#include "driverlib/rom.h"
#include "delay.h"
#include "init.h"
#include "促 动器.h"
#include "lcd.h"
#include "rtc.h"
const unsigned char a_Msg1[85]="机电 一体化系统"\
"私人有限公司。 "\
"版本 KBJNLACTV1.0 "\
"日期:2017年4月21日";
typedef unsigned char tBoolean ;
tBoolean bToggle;
unsigned char a_asci[10];
long int lCurrentCount=0、lOldCount = 5000;
int main (空)
{
unsigned long ulDirection;
long int lCount=0;
//
//将时钟设置为直接从晶体运行。
//
ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);
init_pinconfig();
delay_ms (1);
init_lcd();
delay_ms (1);
CLEAR_LCD();
Display_LCD (A_Msg1);
delay_ms (1000);
timer0_init();
counter1_init();
uart7_init();
delay_ms (1);
while (1)
{
lCount = ROM_TimerValueGet (Timer1_base、timer_A);
if (lCount!= 0)
{
ulDirection = ROM_GPIOPinRead (GPIO_PORTF_BASE、DIRN);
if (ulDirection)(指令)
{
lCurrentCount = lCurrentCount + lCount;
}
其他
{
lCurrentCount = lCurrentCount - lCount;
}
ROM_TimerLoadSet (Timer1_base、timer_A、0);
十进制到 ASCII (lCount、6);
A_ASCII[6]='\0';
Display_LCD_line (Page2、A_ASCII);
}
if (bToggle) ROM_GPIOPinWrite (GPIO_Porta_base、DIRN_RLY、DIRN_RLY_ON);
ELSE ROM_GPIOPinWrite (GPIO_PORta_base、DIRN_RLY、DIRN_RLY_OFF);
delay_ms (1000);
}
}
//
//
//第一个计时器中断的中断处理程序。
//
//
空 Timer0IntHandler (空)
{
//
//清除计时器中断。
//
ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
bToggle =~bToggle;
}
//
//
// UART 中断处理程序。
//
//
无效
UART7IntHandler (空)
{
uint32_t ui32Status;
unsigned long ulUart7In;
//
//获取中断状态。
//
ui32Status = ROM_UARTIntStatus (UART7_BASE、TRUE);
//
//清除已发出的中断。
//
ROM_UARTIntClear (UART7_BASE、ui32Status);
//
//在接收 FIFO 中有字符时循环。
//
while (ROM_UARTCharsAvail (UART7_BASE))
{
//
//从 UART 读取下一个字符并将其写回 UART。
//
ulUart7In = ROM_UARTCharGetNonBlocking (UART7_BASE);
ROM_GPIOPinWrite (GPIO_PORTB_BASE、RS485、RS485_TX_ENABLE);
delay_ms (1);
ROM_UARTCharPutNonBlocking (UART7_BASE、ulUART7In);
delay_ms (1);
ROM_GPIOPinWrite (GPIO_PORTB_BASE、RS485、RS485_RX_ENABLE);
}
}
void init_pinconfig()
{
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_GPIOPinTypeGPIOInput (GPIO_PORTK_base、GPIO_PIN_3);//自动
ROM_GPIOPinTypeGPIOInput (GPIO_PORTB_BASE、GPIO_PIN_2);//手动
ROM_GPIOPinTypeGPIOInput (GPIO_PORTK_base、GPIO_PIN_1);//句柄
ROM_GPIOPinTypeGPIOInput (GPIO_PORTK_base、GPIO_PIN_0);//NOT_OP
ROM_GPIOPinTypeGPIOInput (GPIO_PORTC_BASE、GPIO_PIN_4);//远程
ROM_GPIOPinTypeGPIOInput (GPIO_PORTG_base、GPIO_PIN_4);//代理 DN
ROM_GPIOPinTypeGPIOInput (GPIO_PORTG_base、GPIO_PIN_5);//代理启动
HWREG (GPIO_PORTF_BASE_GPIO_O_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTF_BASE_GPIO_O_CR)|= GPIO_PIN_0;
ROM_GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、GPIO_PIN_2);//ROTN
ROM_GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、GPIO_PIN_3);//DIRN
ROM_GPIOPinTypeGPIOInput (GPIO_Porte _BASE、GPIO_PIN_2);/C1.
ROM_GPIOPinTypeGPIOInput (GPIO_Porth_BASE、GPIO_PIN_0);//C2
ROM_GPIOPinTypeGPIOInput (GPIO_Porth_BASE、GPIO_PIN_1);//C3
ROM_GPIOPinTypeGPIOInput (GPIO_Porth_BASE、GPIO_PIN_2);//C4
ROM_GPIOPinTypeGPIOInput (GPIO_Porte _BASE、GPIO_PIN_4);//C5
ROM_GPIOPinTypeGPIOInput (GPIO_PORTC_BASE、GPIO_PIN_7);//down
ROM_GPIOPinTypeGPIOInput (GPIO_PORTC_BASE、GPIO_PIN_6);//停止
ROM_GPIOPinTypeGPIOInput (GPIO_PORTC_BASE、GPIO_PIN_5);//up
//输出引脚配置
ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_3);//MOTOR_ON
ROM_GPIOPinWrite (GPIO_Porta_base、电机、MOTOR_OFF);
ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_4);//DIRN_RLY
ROM_GPIOPinWrite (GPIO_PORta_base、DIRN_RLY、DIRN_RLY_OFF);
ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_5);//SD
ROM_GPIOPinWrite (GPIO_Porta_base、SD、SD_off);
ROM_GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、GPIO_PIN_3);//R1
ROM_GPIOPinWrite (GPIO_Porte _BASE、ROW1、ROW1_DISABLE);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTJ_BASE、GPIO_PIN_2);//R2
ROM_GPIOPinWrite (GPIO_PORTJ_BASE、ROW2、ROW2_DISABLE);
ROM_GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、GPIO_PIN_5);//R3
ROM_GPIOPinWrite (GPIO_Porte _BASE、Row3、Row3_disable);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTG_base、GPIO_PIN_3);//SDA
ROM_GPIOPinWrite (GPIO_PORTG_base、SDA、SDA_set);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTG_base、GPIO_PIN_2);//SCL
ROM_GPIOPinWrite (GPIO_PORTG_BASE、SCL、SCL_SET);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、GPIO_PIN_5);//485
ROM_GPIOPinWrite (GPIO_PORTB_BASE、RS485、RS485_RX_ENABLE);
// LCD 引脚配置
ROM_GPIOPinTypeGPIOOutput (GPIO_Porth_BASE、GPIO_PIN_4);//rw
ROM_GPIOPinTypeGPIOOutput (GPIO_Porth_BASE、GPIO_PIN_5);//RS
ROM_GPIOPinTypeGPIOOutput (GPIO_Porth_BASE、GPIO_PIN_6);//RST
ROM_GPIOPinTypeGPIOOutput (GPIO_Porth_BASE、GPIO_PIN_7);//EN
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_0);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_1);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_2);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_3);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_4);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_5);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_6);
HWREG (GPIO_PORTD_BASE + GPIO_O_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTD_BASE + GPIO_O_CR)= 0xff;
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_7);
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、GPIO_PIN_3);//打开
ROM_GPIOPinWrite (GPIO_PORTB_BASE、LCD、LCD_ON);// LCD 模块启用
}
void // Timer0初始化
空 timer0_init()
{
//
//启用此示例使用的外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
//
//启用处理器中断。
//
ROM_IntMasterEnable();
//
//配置两个32位周期定时器。
//
ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、ROM_SysCtlClockGet ());
//
//设置计时器超时的中断。
//
ROM_IntEnable (INT_TIMER0A);
ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
//
//启用计时器。
//
ROM_TimerEnable (TIMER0_BASE、TIMER_A);
}
void timer0_disable()
{
ROM_TimerDisable (TIMER0_BASE、TIMER_A);
}
void uart7_init()
{
//
//启用此示例使用的外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART7);
//
//启用处理器中断。
//
ROM_IntMasterEnable();
//
//将 GPIO A0和 A1设置为 UART 引脚。
//
ROM_GPIOPinConfigure (GPIO_PE0_U7RX);
ROM_GPIOPinConfigure (GPIO_PE1_U7TX);
ROM_GPIOPinTypeUART (GPIO_Porte _BASE、GPIO_PIN_0 | GPIO_PIN_1);
//
//将 UART 配置为115、200、8-N-1操作。
//
ROM_UARTConfigSetExpClk (UART7_BASE、ROM_SysCtlClockGet ()、19200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//
//启用 UART 中断。
//
ROM_IntEnable (INT_UART7);
ROM_UARTIntEnable (UART7_BASE、UART_INT_RX | UART_INT_RT);
}