⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utils.c

📁 tigersharc ts101 循环程序
💻 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 + -