www.pudn.com > rfid.rar > hardware.c, change:2012-04-22,size:2951b


/******************************************************************************* 
 * 文件名称:hardware.c 
 * 功    能:毫秒级延时函数、定时器A设置、时钟配置、定时器A0中断服务函数 
 * 作    者:Ronnie 
 * 公    司:湘潭斯凯电子科技有限公司 
 *           www.sikai-tech.com 
 * 日    期:2011-06-22 
 ******************************************************************************/ 
 
 
/* 包含头文件 */ 
/********************************************************************/ 
#include "hardware.h" 
#include "spi.h" 
/********************************************************************/ 
 
 
/********************************************************************* 
 * 函数名称:delay_ms 
 * 功    能:毫秒级延时函数 
 * 入口参数:n_ms  延时长度 
 * 出口参数:无 
 * 返 回 值:无 
 ********************************************************************/ 
void delay_ms(unsigned int n_ms)  
{ 
  unsigned int ii1, ii0; 
     
  for(ii0=n_ms; ii0>0; ii0--)  
  { 
    ii1 = 0x07FF; 
    do (ii1--); 
    while (ii1 != 0); 
  } 
} 
 
 
/********************************************************************* 
 * 函数名称:CounterSet 
 * 功    能:定时器A设置 
 * 入口参数:无 
 * 出口参数:无 
 * 返 回 值:无 
 ********************************************************************/ 
void CounterSet(void) 
{ 
  /* 复位定时器A*/ 
  TACTL |= TACLR; 
  TACTL &= ~TACLR; 
   
  /* ACLK,8分频,中断使能,定时器停止 */ 
  TACTL |= TASSEL0 + ID1 + ID0; 
	 
  TAR = 0x0000; 
   
  /* 使能比较中断 */ 
  TACCTL0 |= CCIE; 
} 
 
 
/********************************************************************* 
 * 函数名称:OSCsel 
 * 功    能:时钟配置 
 * 入口参数:mode  时钟模式 
 * 出口参数:无 
 * 返 回 值:无 
 ********************************************************************/ 
void OSCsel(unsigned char mode) 
{ 
  unsigned int ii1; 
 
  /* 使用外部时钟源 */ 
  if(mode == 0x00) 
  { 
    BCSCTL1 |= XTS + XT2OFF; 
    BCSCTL3 |= LFXT1S1; 
    do 
    { 
      IFG1 &= ~OFIFG;                    
      for (ii1 = 0xFF; ii1 > 0; ii1--);  
    }while ((IFG1 & OFIFG) == OFIFG); 
    BCSCTL2 |= SELM1 + SELM0 + SELS; 
    return; 
  } 
  /* 使用内部DCO */ 
  else 
  { 
    DCOCTL |= DCO0 + DCO1 + DCO2; 
    BCSCTL1 |= XT2OFF + XTS + RSEL0 + RSEL1 + RSEL2; 
    BCSCTL2 &= ~(SELM1 + SELM0 + SELS + DCOR); 
    return; 
  } 
} 
 
 
/********************************************************************* 
 * 函数名称:TimerAhandler 
 * 功    能:定时器A0中断服务函数 
 * 入口参数:无 
 * 出口参数:无 
 * 返 回 值:无 
 ********************************************************************/ 
#pragma vector=TIMERA0_VECTOR 
__interrupt void TimerAhandler(void) 
{	 
  unsigned char Register[2]; 
 
  stopCounter; 
	 
  Register[0] = IRQStatus; 
  Register[1] = IRQMask; 
  ReadCont(Register, 2); 
 
  *Register = *Register & 0xF7; 
	 
  if(*Register == 0x00 || *Register == 0x80)  
    i_reg = 0x00; 
  else 
    i_reg = 0x01; 
	 
  __low_power_mode_off_on_exit(); 
}