📄 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))
#define REG_MDREFR (*(volatile unsigned long *)(mem_MDREFR))
#define REG_MDCNFG (*(volatile unsigned long *)(mem_MDCNFG))
#define REG_PSSR (*(volatile unsigned long *)(pwm_PSSR))
int LAST_KEY_VAL=0,LAST_LED_VAL=0,count;
volatile unsigned long temp;
unsigned long * addr;
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();
}
}
void post_initGpio()
{
*((volatile unsigned long *)(gpio_GPDR2))=initGpio_GPDR2;
*((volatile unsigned long *)(gpio_GAFR2L))=initGpio_GAFR2L;
}
void post_initMem()
{
*((volatile unsigned long *)(osTimer_OSMR3))=REG_OSCR+0x100000;
REG_OIER=0x8;
while((REG_OSSR&0x8)==0)
;
REG_OIER=0;
REG_OSSR=REG_OSSR; //clear ostimer3 int status
temp=REG_MDREFR;
temp=temp|(0x10000);
REG_MDREFR=temp;
temp=temp^(0x400000);
REG_MDREFR=temp;
temp=temp|(0x8000);
REG_MDREFR=temp;
REG_MDREFR=initMem_MDREFR;
REG_MDCNFG=(~initMem_MDCNFG)&(0x1);
REG_PSSR=REG_PSSR;
// unsigned long * addr=(unsigned long *)(0x0a0000000);
addr=(unsigned long *)(0x0a0000000);
count=0x8;
while(count!=0)
{
temp=*addr;
count--;
}
REG_MDCNFG=initMem_MDCNFG;
*((volatile unsigned long *)(mem_MDMRS))=initMem_MDMRS;
*((volatile unsigned long *)(mem_MSC0))=initMem_MSC0;
*((volatile unsigned long *)(mem_MSC1))=initMem_MSC1;
*((volatile unsigned long *)(mem_MSC2))=initMem_MSC2;
}
void post_initVariant()
{
*((volatile unsigned long *)(pwmEmulatorStatus))=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -