📄 utils.c
字号:
//*********************************************************************
// File Name: utils.c
// Author : YangLi
// E-mail : yl@water.ac.cn
// Version : 1.0
// BeiJing ZHONGKEHAIXUN Science & Technology Co. Ltd.
// Copyright 2005
//*********************************************************************
#include <defts101.h>
#include <sysreg.h>
#include "utils.h"
void init_Tiger(void)
{
__builtin_sysreg_write(__SYSCON, 0x001A79E7); // Set SYSCON Register
__builtin_sysreg_write(__SDRCON, 0x5223); // Set SDRCON Register
}
void prep_leds(void)
{
__builtin_sysreg_write(__SQCTLST, (FLG2O|FLG3O)); // make flags 2 and 3 outputs
}
void set_flags_as_output(int mask)
{
if(mask & FLG0O)
{
__builtin_sysreg_write(__SQCTLST, FLG0O); // make flag 0 output
}
if(mask & FLG1O)
{
__builtin_sysreg_write(__SQCTLST, FLG1O); // make flag 1 output
}
}
void toggle_leds(int mask)
{
if(mask & FLG2)
{
if(__builtin_sysreg_read(__SQCTL) & FLG2)
{
__builtin_sysreg_write(__SQCTLCL, ~FLG2); //clear the flag bit
}
else
{
__builtin_sysreg_write(__SQCTLST, FLG2); // set the flag bit
}
}
if(mask & FLG3)
{
if(__builtin_sysreg_read(__SQCTL) & FLG3)
{
__builtin_sysreg_write(__SQCTLCL, ~FLG3); //clear the flag bit
}
else
{
__builtin_sysreg_write(__SQCTLST, FLG3); // set the flag bit
}
}
}
void toggle_flags(int mask)
{
if(mask & FLG0)
{
if(__builtin_sysreg_read(__SQCTL) & FLG0)
{
__builtin_sysreg_write(__SQCTLCL, ~FLG0); //clear the flag bit
}
else
{
__builtin_sysreg_write(__SQCTLST, FLG0); // set the flag bit
}
}
if(mask & FLG1)
{
if(__builtin_sysreg_read(__SQCTL) & FLG1)
{
__builtin_sysreg_write(__SQCTLCL, ~FLG1); //clear the flag bit
}
else
{
__builtin_sysreg_write(__SQCTLST, FLG1); // set the flag bit
}
}
}
void leds_off(int mask)
{
__builtin_sysreg_write(__SQCTLCL, ~(mask));
}
void leds_on(int mask)
{
__builtin_sysreg_write(__SQCTLST, mask);
}
void clr_flags(int mask)
{
__builtin_sysreg_write(__SQCTLCL, ~(mask));
}
void set_flags(int mask)
{
__builtin_sysreg_write(__SQCTLST, mask);
}
void init_timer(int timer, unsigned int hi, unsigned int lo)
{
if (timer == 0)
{
__builtin_sysreg_write(__TMRIN0H, hi); // set timer0 high count
__builtin_sysreg_write(__TMRIN0L, lo); // set timer0 low count
}
else if (timer == 1)
{
__builtin_sysreg_write(__TMRIN1H, hi); // set timer1 high count
__builtin_sysreg_write(__TMRIN1L, lo); // set timer1 low count
}
}
unsigned int start_timer(int timer)
{
if (timer == 0)
{
__builtin_sysreg_write(__SQCTLST, TMR0RN); // start timer0
return (__builtin_sysreg_read(__TIMER0L));
}
else if (timer == 1)
{
__builtin_sysreg_write(__SQCTLST, TMR1RN); // start timer1
return (__builtin_sysreg_read(__TIMER1L));
}
return 0;
}
unsigned int stop_timer(int timer)
{
if (timer == 0)
{
__builtin_sysreg_write(__SQCTLCL, ~TMR0RN); // start timer0
return (__builtin_sysreg_read(__TIMER0L));
}
else if (timer == 1)
{
__builtin_sysreg_write(__SQCTLCL, ~TMR1RN); // start timer1
return (__builtin_sysreg_read(__TIMER1L));
}
return 0;
}
unsigned int get_timer(int timer, unsigned int *hi, unsigned int *lo)
{
if (timer == 0)
{
*hi = __builtin_sysreg_read(__TIMER0H);
*lo = __builtin_sysreg_read(__TIMER0L);
}
else if (timer == 1)
{
*hi = __builtin_sysreg_read(__TIMER1H);
*lo = __builtin_sysreg_read(__TIMER1L);
}
return (*lo);
}
void irq_set_trigger(int irq, int type)
{
int mask = (irq == 0) ? IRQ0E :
(irq == 1) ? IRQ1E :
(irq == 2) ? IRQ2E : IRQ3E;
if(type == EDGE)
{
__builtin_sysreg_write(__SQCTLST, mask); // edge trigger
}
else
{
__builtin_sysreg_write(__SQCTLCL, ~mask); // level trigger
}
}
void delay(void)
{
unsigned int i;
for(i=0;i<0x100;i++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -