在线时间93 小时
UID13486
注册时间2014-9-1
NXP金币26
TA的每日心情 | 开心 2024-3-22 17:30 |
---|
签到天数: 7 天 [LV.3]偶尔看看II
高级会员
- 积分
- 920
- 最后登录
- 2024-4-18
|
板子收到有段时间了,刚收到时遇到个坑,示例代码没有关狗,烧进去就变砖了,也没仔细看手册,扔了段时间。这几天得空重新找出来,慢慢啃手册,写了个看门狗的操作宏,端口操作的宏。灯也是要亮瞎狗眼的节奏,把限流的电阻换成了5.1K,看着顺眼多了。
/*
* wdt.h
*
* Created on: Jul 9, 2020
* Author: Haifeng
*/
#ifndef WDT_H_
#define WDT_H_
#define WDT_UnLock() do{ \
WDOG_CNT = 0xc520; \
WDOG_CNT = 0xd928; \
}while(0)
//默认使用1K时钟,设定时间单位为ms,最长时间65535ms
#define WDT_Init(Value) do{ \
DisableInterrupts; \
WDT_UnLock(); \
WDOG_TOVAL = Value; \
WDOG_CS2 = WDOG_CS2_CLK_MASK; \
WDOG_CS1 = WDOG_CS1_EN_MASK; \
EnableInterrupts; \
}while(0)
#define WDT_Clr() do{ \
WDOG_CNT = 0xA602U; \
WDOG_CNT = 0xB480U; \
}while(0)
#endif /* WDT_H_ */
/*
* gpio.h
*
* Created on: Jul 6, 2020
* Author: Haifeng
*/
#ifndef PORT_H_
#define PORT_H_
//bit0 = outpu, bit1 = inputt, bit2 = pull
enum{
PORT_MODE_OUT = 0x01,
PORT_MODE_IN_NULL = 0x02,
PORT_MODE_IN_PULL = 0x06,
};
enum{
PTA,
PTB,
PTC,
PTD,
PTE,
PTF,
PTG,
PTH,
};
#define PORT_Init(PORTx, PINx, Value, MODEx) do{ \
if(MODEx & 0x01) PORT_##PORTx##OE |= (1 << PINx); \
else PORT_##PORTx##OE &= (~(1 << PINx)); \
if(MODEx & 0x02) PORT_##PORTx##IE |= (1 << PINx); \
else PORT_##PORTx##IE &= (~(1 << PINx)); \
if(MODEx & 0x04) PORT_##PORTx##PE |= (1 << PINx); \
else PORT_##PORTx##PE &= (~(1 << PINx)); \
if(Value != 0) PORT_##PORTx##D |= (1 << PINx); \
else PORT_##PORTx##D &= (~(1 << PINx)); \
}while(0)
#define PORT_PinWrite(PORTx, PINx, Value) do{ \
if(Value != 0) PORT_##PORTx##D |= (1 << PINx); \
else PORT_##PORTx##D &= (~(1 << PINx)); \
}while(0)
#define PORT_PinRead(PORTx, PINx) ((PORT_##PORTx##D & (~(1 << PINx))) ? 1 : 0)
#endif /* GPIO_H_ */
/*
* led.h
*
* Created on: Jul 6, 2020
* Author: Haifeng
*/
#ifndef LED_H_
#define LED_H_
#define LED1_Init() PORT_Init(PTE, 7, 0, PORT_MODE_OUT)
#define LED1_Write(Value) PORT_PinWrite(PTE, 7, Value)
#define LED2_Init() PORT_Init(PTG, 0, 0, PORT_MODE_OUT)
#define LED2_Write(Value) PORT_PinWrite(PTG, 0, Value)
#define LED3_Init() PORT_Init(PTG, 1, 0, PORT_MODE_OUT)
#define LED3_Write(Value) PORT_PinWrite(PTG, 1, Value)
#define LED4_Init() PORT_Init(PTG, 2, 0, PORT_MODE_OUT)
#define LED4_Write(Value) PORT_PinWrite(PTG, 2, Value)
#define LED5_Init() PORT_Init(PTG, 3, 0, PORT_MODE_OUT)
#define LED5_Write(Value) PORT_PinWrite(PTG, 3, Value)
#define LED6_Init() PORT_Init(PTH, 2, 0, PORT_MODE_OUT)
#define LED6_Write(Value) PORT_PinWrite(PTH, 2, Value)
#define LED7_Init() PORT_Init(PTH, 6, 0, PORT_MODE_OUT)
#define LED7_Write(Value) PORT_PinWrite(PTH, 6, Value)
#define LED8_Init() PORT_Init(PTH, 7, 0, PORT_MODE_OUT)
#define LED8_Write(Value) PORT_PinWrite(PTH, 7, Value)
extern void LED_Init(void);
extern void LED_Display(unsigned char Value);
#endif /* LED_H_ */
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
void DELAY_Ms(int tMs)
{
int tUs;
while(tMs--)
{
tUs = 250;
while(tUs --);
}
}
void main(void)
{
unsigned char i = 0x00;
WDT_Init(10000);
DisableInterrupts;
/* include your code here */
LED_Init();
for(;;)
{
WDT_Clr(); /* feeds the dog */
LED_Display(~i++);
/*
if((i & 0x80) == 0)
{
i = (i << 1) | 0x01;
}
else
{
i = 0;
}
*/
DELAY_Ms(250);
} /* loop forever */
/* please make sure that you never leave main */
}
|
|