Thread 中讨论的其他器件: EK-TM4C123GXL、 TM4C123
工具/软件:Code Composer Studio
大家好、我想休眠10分钟、之后、我的程序应该进入正常运行2分钟、然后再进入休眠10分钟。 通过这种方式、应以这种方式重复整个周期。 是否可以在 tm4c123gh下午6时执行此方法?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
大家好、我想休眠10分钟、之后、我的程序应该进入正常运行2分钟、然后再进入休眠10分钟。 通过这种方式、应以这种方式重复整个周期。 是否可以在 tm4c123gh下午6时执行此方法?
您好、Siva、
我为 EK-TM4C123GXL LaunchPad 准备了一个示例项目(如下所示)、其中包括在50秒后启动休眠、并每120秒从休眠模式唤醒。 启用 RTC 后 RGB LED 启动、50秒后关闭、然后每120秒打开和关闭一次。
Ralphi Jacobi、您好!
在下面的这个代码中、我已添加到以下 API 中、并参考您的示例代码
1. HibernateRequest();
HibernateRTCGet ();
HibernateWakeSet (HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_RTC);
我的目标是获取 RTC 计数器的当前值、如果该值为50、则应启动休眠。 之后、只要 RTC 匹配发生、它就会从休眠中唤醒。 请确认上述条件是否得到正确满足。 如果需要进一步修改、请向我提供帮助。
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_hibernate.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/hibernate.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "tm4c123ghp6.h"
#include
空 uart0_init()
{
SYSCTL_RCGCUART_R |=0x00000001;
SYSCTL_RCGCGPIO_R |=0x00000001;
SYSCTL_RCGCHIB_R |=0x00000001;
GPIO_PORta_lock_R |=0x4C4F434B;
GPIO_PORta_CR_R |=0x00000003;
GPIO_Porta_DEN_R |=0x00000003;
GPIO_PORta_AFSEL_R |=0x00000003;
GPIO_Porta_PCTL_R |=0x00000011;
UART0_CTL_R &=~0x00000001;
UART0_IBRD_R =104;
UART0_FBRD_R=11;
UART0_LCRH_R |=0x00000060;
UART0_CC_R |=0x00000000;
UART0_CTL_R |=0x00000301;
}
void U0_SEND (无符号字符 k)
{
while (((UART0_FR_R & 0x00000020)!=0);
UART0_DR_R =k;
}
void U0_print (无符号字符*p)
{
while (* p)
{
U0_SEND (*p++);
}
}
空延迟(unsigned int x)
{
unsigned int i、j;
for (i=0;<x;i++))
{
对于(j=0;<x;j++)
{
}
}
}
无效休眠 ISRHandler (无效)
{
uint32_t ui32Status;
ui32Status = HibernateIntStatus (真);
HibernateIntClear (ui32状态);
if (ui32Status 和 HIBERNATE_INT_RTC_MATH_0)
{
u0_print ("在休眠状态下、INTeruppt \r\n");
uint32_t ui32RTCMatch;
ui32RTCMatch = HibernateRTCGet ();
HibernateRTCMatchSet (0、ui32RTCMatch + 200);
IF (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_3))
{
U0_PRINT ("休眠状态下指示灯熄灭\r\n);
延迟(1000);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0x00);
}
其他
{
U0_PRINT ("休眠状态指示灯亮起\r\n);
延迟(1000);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0x08);
}
}
}
void main (void)
{
long i=0;
uart0_init();
U0_PRINT ("UART0 initialized\r\n");
延迟(3000);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_3);
SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
HibernateEnableExpClk (0);
while (!(HWREG (HIB_RIS)& HIB_RIS_WC));
HibernateClockConfig (HIBERNATE_OSC_LOWDRIVE);
HibernateRTCSet (0);
HibernateRTCMatchSet (0.5);
HibernateIntEnable (HIBERNATE_INT_RTC_MATH_0);
HibernateRTCTrimSet (0x7FFF);
HibernateRTCEnable();
HibernateWakeSet (HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_RTC);
IntEnable (INT_HIBERNATE_TM4C123);
IntMasterEnable();
uint32_t ui32Status;
unsigned char bubuff [100]={0};
unsigned char test[3]="50";
while (1)
{
u0_print ("在 main\r\n"中);
延迟(1000);
i++;
延迟(1000);
ui32Status = HIB_RTCC_R;
memset (buff、0、sizeof (buff));
ltoa (ui32Status、buff);
U0_PRINT (缓冲器);
U0_print ("\r\n");
if (strcmp (buff、test)==0)
{
U0_PRINT ("\n\r Hibernate Requested\r\n");
HibernateRequest();
}
}
}
您好、Siva、
啊,是的,我忘了加入 HibernateRequest();在 ISR 处理结束时,谢谢您的关注,我专注于 RTC 计时。
那么、代码中唯一的区别是它、而不是设置
HibernateRTCMatchSet (0、50);//设置初始匹配值以在50秒后触发 RTC
您需要通过 HibernateRTCMet 手动检查计数、并确定何时从此处进入休眠模式。