📄 mx21_gpt.c
字号:
/**********************************************************************
*
* (C) COPYRIGHT 2004 FREESCALE, INC.
* ALL RIGHTS RESERVED
*
*
* Group/Division: WMSG/MMDO
*
* Description:
*
* Related Specifications:
*
* Errata:
*
* File Name: MX21_GPT.c
* Revision Number: 0.1
* Author(s): Ryan Johnson
* Date created: 27 May 2004
* Revision History:
* Date Rev Description
* ---- --- -----------
* 28May04 0.1 First draft
*
**********************************************************************/
#include "MX21_GPT.h"
//WaitCycles
void
gpt3_WaitCycles(uint32_t cycles)
{
uint32_t _fclk_perclk1_ratio = ( PLLCLK_PCDR1.bits.PERDIV1 + 1 + (PLLCLK_CSCR.bits.PRESC) + 1 - 1 )
/((PLLCLK_CSCR.bits.PRESC) + 1);
gpt3_EN(Disable);
gpt3_Clock(GPT_PERCLK1);
gpt3_SetPrescaler(0);
gpt3_RestartMode();
//gpt3_ForgetfulCounter();
if(_fclk_perclk1_ratio==1){
_fclk_perclk1_ratio = ( (PLLCLK_CSCR.bits.PRESC) +1 + PLLCLK_PCDR1.bits.PERDIV1 + 1 - 1 )
/(PLLCLK_PCDR1.bits.PERDIV1 + 1);
gpt3_SetComparator(cycles * _fclk_perclk1_ratio);
} else {
gpt3_SetComparator((cycles + _fclk_perclk1_ratio - 1)/_fclk_perclk1_ratio);
}
gpt3_EN(Enable);
do {
int q=0;
} while (!gpt3_CompareInterruptStatus());
gpt3_ClearCompare();
gpt3_EN(Disable);
return;
}
//WaitTime
void
gpt3_WaitTime(uint32_t microseconds)
{
gpt3_EN(Disable);
gpt3_Clock(GPT_32KHZ);
gpt3_SetPrescaler(0);
gpt3_RestartMode();
//gpt3_ForgetfulCounter();
gpt3_SetComparator(microseconds/60 + (microseconds+61)/62);
gpt3_EN(Enable);
while (1 != gpt3_CompareInterruptStatus());
gpt3_ClearCompare();
gpt3_EN(Disable);
return;
}
//SetComparator
void
gpt1_SetComparator(uint32_t COMPARE)
{
GPT1_TCMP.bits.COMPARE=COMPARE;
return;
}
void
gpt2_SetComparator(uint32_t COMPARE)
{
GPT2_TCMP.bits.COMPARE=COMPARE;
return;
}
void
gpt3_SetComparator(uint32_t COMPARE)
{
GPT3_TCMP.bits.COMPARE=COMPARE;
return;
}
//SoftReset
void
gpt1_SoftReset(void)
{
GPT1_TCTL.bits.SWR=1;
return;
}
void
gpt2_SoftReset(void)
{
GPT2_TCTL.bits.SWR=1;
return;
}
void
gpt3_SoftReset(void)
{
GPT3_TCTL.bits.SWR=1;
return;
}
//CounterClear
void
gpt1_CounterClear(uint32_t EN)
{
GPT1_TCTL.bits.CC=EN;
return;
}
void
gpt2_CounterClear(uint32_t EN)
{
GPT2_TCTL.bits.CC=EN;
return;
}
void
gpt3_CounterClear(uint32_t EN)
{
GPT3_TCTL.bits.CC=EN;
return;
}
//PulseLow
void
gpt1_PulseLow(void)
{
GPT1_TCTL.bits.OM=0;
return;
}
void
gpt2_PulseLow(void)
{
GPT2_TCTL.bits.OM=0;
return;
}
void
gpt3_PulseLow(void)
{
GPT3_TCTL.bits.OM=0;
return;
}
//Toggle
void
gpt1_Toggle(void)
{
GPT1_TCTL.bits.OM=1;
return;
}
void
gpt2_Toggle(void)
{
GPT2_TCTL.bits.OM=1;
return;
}
void
gpt3_Toggle(void)
{
GPT3_TCTL.bits.OM=1;
return;
}
//RestartMode
void
gpt1_RestartMode(void)
{
GPT1_TCTL.bits.FRR=0;
return;
}
void
gpt2_RestartMode(void)
{
GPT2_TCTL.bits.FRR=0;
return;
}
void
gpt3_RestartMode(void)
{
GPT3_TCTL.bits.FRR=0;
return;
}
//FreeRunMode
void
gpt1_FreeRunMode(void)
{
GPT1_TCTL.bits.FRR=1;
return;
}
void
gpt2_FreeRunMode(void)
{
GPT2_TCTL.bits.FRR=1;
return;
}
void
gpt3_FreeRunMode(void)
{
GPT3_TCTL.bits.FRR=1;
return;
}
//SetCaptureTrigger
void
gpt1_SetCaptureTrigger(gpt_cap gpt_trigger_type)
{
GPT1_TCTL.bits.CAP=gpt_trigger_type;
return;
}
void
gpt2_SetCaptureTrigger(gpt_cap gpt_trigger_type)
{
GPT2_TCTL.bits.CAP=gpt_trigger_type;
return;
}
void
gpt3_SetCaptureTrigger(gpt_cap gpt_trigger_type)
{
GPT3_TCTL.bits.CAP=gpt_trigger_type;
return;
}
//CaptureInterrupt
void
gpt1_CaptureInterrupt(uint32_t EN)
{
GPT1_TCTL.bits.CAPT_EN=EN;
return;
}
void
gpt2_CaptureInterrupt(uint32_t EN)
{
GPT2_TCTL.bits.CAPT_EN=EN;
return;
}
void
gpt3_CaptureInterrupt(uint32_t EN)
{
GPT3_TCTL.bits.CAPT_EN=EN;
return;
}
//CompareInterrupt
void
gpt1_CompareInterrupt(uint32_t EN)
{
GPT1_TCTL.bits.COMP_EN=EN;
return;
}
void
gpt2_CompareInterrupt(uint32_t EN)
{
GPT2_TCTL.bits.COMP_EN=EN;
return;
}
void
gpt3_CompareInterrupt(uint32_t EN)
{
GPT3_TCTL.bits.COMP_EN=EN;
return;
}
//Clock
void
gpt1_Clock(gpt_clock_type gpt_clock)
{
GPT1_TCTL.bits.CLKSOURCE=gpt_clock;
return;
}
void
gpt2_Clock(gpt_clock_type gpt_clock)
{
GPT2_TCTL.bits.CLKSOURCE=gpt_clock;
return;
}
void
gpt3_Clock(gpt_clock_type gpt_clock)
{
GPT3_TCTL.bits.CLKSOURCE=gpt_clock;
return;
}
//EN
void
gpt1_EN(uint32_t EN)
{
GPT1_TCTL.bits.TEN=EN;
return;
}
void
gpt2_EN(uint32_t EN)
{
GPT2_TCTL.bits.TEN=EN;
return;
}
void
gpt3_EN(uint32_t EN)
{
GPT3_TCTL.bits.TEN=EN;
return;
}
//SetPrescaler
void
gpt1_SetPrescaler(uint32_t gpt_prescaler)
{
GPT1_TPRER.bits.PRESCALER=gpt_prescaler;
return;
}
void
gpt2_SetPrescaler(uint32_t gpt_prescaler)
{
GPT2_TPRER.bits.PRESCALER=gpt_prescaler;
return;
}
void
gpt3_SetPrescaler(uint32_t gpt_prescaler)
{
GPT3_TPRER.bits.PRESCALER=gpt_prescaler;
return;
}
//CaptureInterruptStatus
uint32_t
gpt1_CaptureInterruptStatus(void)
{
return GPT1_TSTAT.bits.CAPT;
}
uint32_t
gpt2_CaptureInterruptStatus(void)
{
return GPT2_TSTAT.bits.CAPT;
}
uint32_t
gpt3_CaptureInterruptStatus(void)
{
return GPT3_TSTAT.bits.CAPT;
}
//CompareInterruptStatus
uint32_t
gpt1_CompareInterruptStatus(void)
{
return GPT1_TSTAT.bits.COMP;
}
uint32_t
gpt2_CompareInterruptStatus(void)
{
return GPT2_TSTAT.bits.COMP;
}
uint32_t
gpt3_CompareInterruptStatus(void)
{
return GPT3_TSTAT.bits.COMP;
}
//ClearCapture
void
gpt1_ClearCapture(void)
{
GPT1_TSTAT.bits.CAPT=1;
return;
}
void
gpt2_ClearCapture(void)
{
GPT2_TSTAT.bits.CAPT=1;
return;
}
void
gpt3_ClearCapture(void)
{
GPT3_TSTAT.bits.CAPT=1;
return;
}
//ClearCompare
void
gpt1_ClearCompare(void)
{
GPT1_TSTAT.bits.COMP=1;
return;
}
void
gpt2_ClearCompare(void)
{
GPT2_TSTAT.bits.COMP=1;
return;
}
void
gpt3_ClearCompare(void)
{
GPT3_TSTAT.bits.COMP=1;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -