📄 hardware.c
字号:
#include "include.h"
void DelayMs(unsigned int n_ms) {
unsigned int i = 0x2EE0;
while(n_ms --)
{
while(i --);
}
}
void CounterSet(void)
{
TACTL |= TASSEL_2 + ID1 + ID0 + TACLR; //SCLK, div 8, interrupt enable, timer stoped
TAR = 0;
TACCTL0 |= CCIE; //compare interrupt enable
TACTL &= ~TACLR; //reset the timerA
}
void InitSysClk(void)
{
BCSCTL1 = CALBC1_12MHZ; //Set DCO to 12MHz
DCOCTL = CALDCO_12MHZ;
BCSCTL2 = DIVS_1 + DIVM_1;
}
//**********************************************************************************
// 功能描述 : 接收中断服务程序
// 输入参数 : 无
// 返回参数 : 无
//**********************************************************************************
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerAhandler(void)
{
unsigned char Register;
stopCounter; // 停止接收超时定时器
irqCLR; // 清除中断标志
Register = IRQStatus; // IRQ 状态地址
ReadSingle(&Register, 1); //读状态IRQ状态寄存器
Register = Register & 0xF7; //消除奇偶位
if(Register == 0x00)
{
i_reg = 0x00; // 无任何中断,接收超时
}
else
{
i_reg = 0x01; // 如果有中断发生, 但是已经清除了PORT2的IRQ中断标志,发送: 发送还没有结束
}
LPM0_EXIT;
}
//**********************************************************************************
// 功能描述 : IRQ中断服务程序
// 输入参数 : 无
// 返回参数 : 无
//**********************************************************************************
#pragma vector = PORT1_VECTOR
__interrupt void IRQ(void)
{
unsigned char Register[2];
stopCounter; // 停止超时计数器
do
{
irqCLR; //PORT2 interrupt flag clear
Register[0] = IRQStatus;
ReadSingle(Register, 1); // 读IRQ状态寄存器
if(*Register == 0xA0) // TX active and only 3 bytes left in FIFO
{
goto FINISH;
}
InterruptHandlerReader(&Register[0]);
} while((irqPORT & irqPIN) == irqPIN);
FINISH:
LPM0_EXIT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -