📄 myset.c
字号:
#define PORTF_FER (unsigned short*)0xffc03200
#define PORTF_DIR (unsigned short*)0xffc00730
#define PORTF_SET (unsigned short*)0xffc00708
#define PORTF_TOG (unsigned short*)0xffc0070c
#define PORTF_INEN (unsigned short*)0xffc00740
#define PORTF_EDGE (unsigned short*)0xffc00738
#define PORTF_BOTH (unsigned short*)0xffc0073c
#define PORTF_MASKA (unsigned short*)0xffc00710
#define PORTF_MASKB (unsigned short*)0xffc00720
#define PORTF_MASKA_SET (unsigned short*)0xffc00718
#define PORTF_MASKB_SET (unsigned short*)0xffc00728
#define PORTF_MASKA_CLEAR (unsigned short*)0xffc00714
#define PORTF_MASKB_CLEAR (unsigned short*)0xffc00724
#define PORTF_POLAR (unsigned short*)0xffc00734
#define PORTF_CLEAR (unsigned short*)0xffc00704
#define SIC_IMASK (unsigned long*)0xffc0010c
#define IMASK (unsigned long*)0xffe02104
#define IVG12 (unsigned long*)0xffe02030
#define SIC_ISR (unsigned long*)0xffc00120
#define TIMER_ENABEL (unsigned short*)0xffc00680
#define TIMER_DISABLE (unsigned short*)0xffc00684
#define TIMER2_CONFIG (unsigned short*)0xffc00620
#define TIMER2_COUNTER (unsigned long*)0xffc00624
#define TIMER2_PERIOD (unsigned long*)0xffc00628
#define TIMER2_WIDTH (unsigned long*)0xffc0062c
#define TIMER_STATUS (unsigned long*)0xffc00688
#define TIMER5_CONFIG (unsigned short*)0xffc00650
#define TIMER5_COUNTER (unsigned long*)0xffc00654
#define TIMER5_PERIOD (unsigned long*)0xffc00658
#define TIMER5_WIDTH (unsigned long*)0xffc0065c
extern void set_led(unsigned led_no);
#include "myset.h"
#include "my_config.h"
// #include <sys/exception.h>
#define PB_EVENT 0x08000000UL
#define PF5_BP4 0x20
#define TIMER2_EVENT 0x00200000UL
#define TIMER5_EVENT 0x01000000UL
#define TIMIL2 0x4
#define TIMIL5 0x20000
unsigned tmr5_ticks = 0;
#pragma interrupt_level_12
static void key_isr(int _r0x, int _r1x, int _r2x)
{
unsigned long *p = SIC_ISR;
unsigned long *q = TIMER_STATUS;
unsigned long n = *p;
unsigned long old_stats = 0UL;
asm("[--sp] = reti;");
do
{
if(n & PB_EVENT)
{
set_led(PF_LED5);
old_stats |= PB_EVENT;
}
else if(n & TIMER2_EVENT)
{
asm("nop;");
old_stats |= TIMER2_EVENT;
}
else if(n & TIMER5_EVENT)
{
asm("nop;");
old_stats |= TIMER5_EVENT;
}
tsk_delay(120);
n = *p;
n &= ~old_stats;
}
while(n);
asm("reti = [sp++];");
*q = 0x000f000f;
p = (unsigned long*)PORTF_CLEAR;
*(unsigned short*)p = 0xffff;
}
void gpio_init(void)
{
unsigned short *p = PORTF_FER;
unsigned long *q;
*p = 0x8000;
asm("ssync;");
p = PORTF_INEN;
*p |= 0x80b0;
p = PORTF_DIR;
*p |= 0x0fc0;
asm("ssync;");
p = PORTF_SET;
*p |= 0x0fc0;
asm("ssync;");
p = PORTF_EDGE;
*p |= 0xb0;
p = PORTF_MASKA_SET;
*p |= 0xb0;
q = SIC_IMASK;
*q |= 0x09200000;
q = IMASK;
*q |= 0x1000;
q = IVG12;
*q = (unsigned long)&key_isr;
p = TIMER2_CONFIG;
*p = 0x1d;
q = TIMER2_PERIOD;
*q = 0x5200;
q = TIMER2_WIDTH;
*q = 0x100;
p = TIMER5_CONFIG;
*p = 0x1d;
q = TIMER5_PERIOD;
*q = 0x5300;
q = TIMER5_WIDTH;
*q = 0x100;
p = TIMER_ENABEL;
*p = 0x4;
}
#pragma optimize_for_speed
void set_led(unsigned led_no)
{
unsigned short *p = PORTF_TOG;
*p |= led_no;
asm("ssync;");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -