📄 utilities.c
字号:
/**************************************************************
* Includes
**************************************************************/
#include <hidef.h> /* for EnableInterrupts macro */
#include "device_header.h" /* include peripheral declarations */
#include "pub_def.h"
#include "MC13192_hw_config.h"
#include "simple_mac.h"
#include "drivers.h"
#include <MC9S08GB60.h> /* include peripheral declarations */
#include "port_config_GB60EVB.h"
extern INT16 Timer_Expired_1;
extern INT16 Timer_Expired_2;
extern INT16 Timer_Counter;
extern INT16 Timer_Goal;
/**************************************************************
* Function: Initialize Timer 1 channel 0 for n mS compare
* Parameters: none
* Return: none
**************************************************************/
void Timer_Init(void)
{
//Prescale by 128, giving 16 uS per count at 8Mhz bus
//Use bus clock
TPM1SC = 0b00001111;
TPM1C0SC = 0b00010000; //Output compare, no pin use
TPM1MODH = 0; //No modulus counting
TPM1MODL = 0;
}
/**************************************************************
* Function: Start Timer 1 channel 0 for value*10mS compare
* Parameters: 8-bit delay value - pass number in increments of
* 10 mS; eg, for 3 seconds pass 300.
* Return: none
**************************************************************/
void Start_Timer_1(UINT16 value)
{
INT8 dummy;
Timer_Counter = 0;
Timer_Goal = value; //Save number of 10mS counts needed
TPM1CNTL = dummy; // Dummy write resets this counter
// Put 10mS (625 = 0x0271) into compare registers
TPM1C0VL = 0x71;
TPM1C0VH = 0x02;
dummy = TPM1C0SC; //Dummy read & write to clear any pending interrupt
TPM1C0SC_CH0F = 0;
TPM1C0SC_CH0IE = 1; //Enable compare interrupt
Timer_Expired_1 = FALSE;
Timer_Expired_2 = FALSE;
}
/**************************************************************
* Function: Reset Timer mS timer to avoid timeout
* Parameters: none
* Return: none
**************************************************************/
void Reset_Timer_1(void)
{
INT8 dummy;
TPM1CNTL = dummy; // Dummy write resets this counter
}
/**************************************************************
* Function: Stop mS timer
* Parameters: none
* Return: none
**************************************************************/
void Stop_Timer_1(void)
{
TPM1C0SC_CH0IE = 0; //Disable interrupt from this timer
Timer_Expired_1 = FALSE;
Timer_Expired_2 = FALSE;
}
/**************************************************************
* Function: Interrupt ISR for mS timer
* Parameters: none
* Return: none
**************************************************************/
interrupt 8 void Vtpm1c0_isr()
{
INT8 dummy;
Timer_Counter++; //Increment 10mS total
TPM1CNTL = dummy; // Dummy write resets the main counter
if (Timer_Counter >= Timer_Goal)
{
TPM1C0SC_CH0IE = 0; //Disable interrupt from this timer
Timer_Expired_1 = TRUE; //Set flag
Timer_Expired_2 = TRUE;
}
dummy = TPM1C0SC; //Dummy read & write to clear the interrupt
TPM1C0SC_CH0F = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -