📄 os_ostimerl.c
字号:
#include "register_variant.h"
#define LED_CS2 (*((volatile unsigned short *)(0x08300000)))
#define KEY_VALUE (*(volatile unsigned char*)(switch_dummyAddress))
#define LAST_KEY_VAL (*(volatile unsigned char *)(buttonStatus))
#define LAST_LED_VAL (*(volatile unsigned char *)(ledStatusBuffer))
#define REG_OSCR (*(volatile unsigned long *)(osTimer_OSCR))
#define REG_OSSR (*(volatile unsigned long *)(osTimer_OSSR))
#define REG_OIER (*(volatile unsigned long *)(osTimer_OIER))
#define REG_ICPR (*(volatile unsigned long *)(int_ICPR))
void led_statusSet()
{
LED_CS2 = LAST_LED_VAL;
}
int button_statusFetch(void)
{
char i=0,j=8,left_move=1;
i = ~KEY_VALUE;
if (i!=00)
{
for(;j>0;j--)
if (i & 0x1)
break;
else
{
i=i>>1;
left_move ++;
}
}
else
left_move =0;
return left_move;
}
void identify()
{
unsigned long enable_bit=0x20000000;
char right_move=4;
char new_led_bit = 0x08;
for(; right_move>0; right_move--)
if (REG_ICPR & enable_bit)
{
new_led_bit = ~new_led_bit;
LAST_LED_VAL = LAST_LED_VAL & new_led_bit;
led_statusSet( );
REG_OIER = REG_OIER & new_led_bit;
REG_OSSR = REG_OSSR | (~new_led_bit);
break;
}
else
{
enable_bit = enable_bit >> 1;
new_led_bit = new_led_bit >> 1;
}
}
void applicationmode()
{
unsigned long reg_osmr ;
char irq_en_bit=0;
int key_val = 0;
LAST_LED_VAL = 0x0ff;
led_statusSet() ;
while(1)
{
key_val = button_statusFetch();
if (key_val != 0)
{
switch(key_val)
{
case 1 :
reg_osmr = osTimer_OSMR0;
irq_en_bit = 0x01;
break;
case 2 :
reg_osmr = osTimer_OSMR1;
irq_en_bit = 0x02;
break;
case 3 :
reg_osmr = osTimer_OSMR2;
irq_en_bit = 0x04;
break;
case 4 :
reg_osmr = osTimer_OSMR3;
irq_en_bit = 0x08;
break;
case 8:
REG_OIER = 0;
REG_OSSR = REG_OSSR;
LAST_LED_VAL = 0x0ff;
led_statusSet() ;
return;
default:
;
}
*(volatile unsigned long *)( reg_osmr) = REG_OSCR + osTimerPreDelay;
REG_OIER = REG_OIER | irq_en_bit ;
}
identify();
}
}
void dummyOs()
{
int led_sharp;
char button_val=0;
while(1)
{
led_sharp=ledShareInterval;
for(; led_sharp>0; led_sharp--)
{
button_val = button_statusFetch();
if (button_val != 0)
break;
}
if (LAST_KEY_VAL != button_val && button_val!=0) /*if the laster is same as the current value and key are pressed */
{
LAST_KEY_VAL = button_val;
applicationmode();
}
else
LAST_LED_VAL = ~LAST_LED_VAL;
led_statusSet();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -