260 lines
7.6 KiB
C
260 lines
7.6 KiB
C
|
|
/*
|
||
|
|
******************************************************************************
|
||
|
|
* @file apt32f102_lpt.c
|
||
|
|
* @author APT AE Team
|
||
|
|
* @version V1.08
|
||
|
|
* @date 2021/06/21
|
||
|
|
******************************************************************************
|
||
|
|
*THIS SOFTWARE WHICH IS FOR ILLUSTRATIVE PURPOSES ONLY WHICH PROVIDES
|
||
|
|
*CUSTOMER WITH CODING INFORMATION REGARDING THEIR PRODUCTS.
|
||
|
|
*APT CHIP SHALL NOT BE HELD RESPONSIBILITY ADN LIABILITY FOR ANY DIRECT,
|
||
|
|
*INDIRECT DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF
|
||
|
|
*SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
|
||
|
|
*CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.AND APT CHIP RESERVES
|
||
|
|
*THE RIGHT TO MAKE CHANGES IN THE SOFTWARE WITHOUT NOTIFICATION
|
||
|
|
******************************************************************************
|
||
|
|
*/
|
||
|
|
|
||
|
|
/* Includes ------------------------------------------------------------------*/
|
||
|
|
#include "apt32f102_lpt.h"
|
||
|
|
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT RESET CLEAR ALL REGISTER
|
||
|
|
//EntryParameter:NONE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_DeInit(void)
|
||
|
|
{
|
||
|
|
LPT->CEDR = 0xBE980000;
|
||
|
|
LPT->RSSR = LPT_RESET_VALUE;
|
||
|
|
LPT->PSCR = LPT_RESET_VALUE;
|
||
|
|
LPT->CR = 0X00010010;
|
||
|
|
LPT->SYNCR = LPT_RESET_VALUE;
|
||
|
|
LPT->PRDR = LPT_RESET_VALUE;
|
||
|
|
LPT->CMP = LPT_RESET_VALUE;
|
||
|
|
LPT->CNT = LPT_RESET_VALUE;
|
||
|
|
LPT->TRGFTCR = LPT_RESET_VALUE;
|
||
|
|
LPT->TRGFTWR = LPT_RESET_VALUE;
|
||
|
|
LPT->EVTRG = LPT_RESET_VALUE;
|
||
|
|
LPT->EVPS = LPT_RESET_VALUE;
|
||
|
|
LPT->EVSWF = LPT_RESET_VALUE;
|
||
|
|
LPT->RISR = LPT_RESET_VALUE;
|
||
|
|
LPT->MISR = LPT_RESET_VALUE;
|
||
|
|
LPT->IMCR = LPT_RESET_VALUE;
|
||
|
|
LPT->ICR = LPT_RESET_VALUE;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT IO Init
|
||
|
|
//EntryParameter:LPT_OUT_PA09,LPT_OUT_PB01,LPT_IN_PA10,
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_IO_Init(LPT_IOSET_TypeDef IONAME)
|
||
|
|
{
|
||
|
|
if(IONAME==LPT_OUT_PA09)
|
||
|
|
{
|
||
|
|
GPIOA0->CONHR=(GPIOA0->CONHR & 0XFFFFFF0F)|0x00000080;
|
||
|
|
}
|
||
|
|
if(IONAME==LPT_OUT_PB01)
|
||
|
|
{
|
||
|
|
GPIOB0->CONLR=(GPIOB0->CONLR & 0XFFFFFF0F)|0x00000080;
|
||
|
|
}
|
||
|
|
if(IONAME==LPT_IN_PA10)
|
||
|
|
{
|
||
|
|
GPIOA0->CONHR=(GPIOA0->CONHR & 0XFFFFF0FF)|0x00000800;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT Init
|
||
|
|
//EntryParameter:
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_Configure(LPT_CLK_TypeDef CLKX,LPT_CSS_TypeDef CSSX,LPT_SHDWSTP_TypeDef SHDWSTPX,LPT_PSCDIV_TypeDef PSCDIVX,U8_T FLTCKPRSX,LPT_OPM_TypeDef OPMX)
|
||
|
|
{
|
||
|
|
LPT->CEDR |=CLKX| CSSX| SHDWSTPX| (FLTCKPRSX<<8);
|
||
|
|
LPT->PSCR = PSCDIVX;
|
||
|
|
LPT->CR |=OPMX;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT DEBUG MODE
|
||
|
|
//EntryParameter:
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_Debug_Mode(FunctionalStatus NewState)
|
||
|
|
{
|
||
|
|
if (NewState != DISABLE)
|
||
|
|
{
|
||
|
|
LPT->CEDR |= LPT_DEBUG_MODE;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
LPT->CEDR &= ~LPT_DEBUG_MODE;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT Period / Compare set
|
||
|
|
//EntryParameter:
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_Period_CMP_Write(U16_T PRDR_DATA,U16_T CMP_DATA)
|
||
|
|
{
|
||
|
|
LPT->PRDR =PRDR_DATA;
|
||
|
|
LPT->CMP =CMP_DATA;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT COUNTER set
|
||
|
|
//EntryParameter:
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_CNT_Write(U16_T CNT_DATA)
|
||
|
|
{
|
||
|
|
LPT->CNT =CNT_DATA;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT read counters
|
||
|
|
//EntryParameter:
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
U16_T LPT_PRDR_Read(void)
|
||
|
|
{
|
||
|
|
return LPT->PRDR;
|
||
|
|
}
|
||
|
|
U16_T LPT_CMP_Read(void)
|
||
|
|
{
|
||
|
|
return LPT->CMP;
|
||
|
|
}
|
||
|
|
U16_T LPT_CNT_Read(void)
|
||
|
|
{
|
||
|
|
return LPT->CNT;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT ControlSet Init
|
||
|
|
//EntryParameter:
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_ControlSet_Configure(LPT_SWSYN_TypeDef SWSYNX,LPT_IDLEST_TypeDef IDLESTX,LPT_PRDLD_TypeDef PRDLDX,LPT_POL_TypeDef POLX,
|
||
|
|
LPT_FLTDEB_TypeDef FLTDEBX,LPT_PSCLD_TypeDef PSCLDX,LPT_CMPLD_TypeDef CMPLDX)
|
||
|
|
{
|
||
|
|
LPT->CR |= SWSYNX| IDLESTX| PRDLDX| POLX| FLTDEBX| FLTDEBX| CMPLDX;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT SYNC Init
|
||
|
|
//EntryParameter:
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_SyncSet_Configure(LPT_TRGENX_TypeDef TRGENX,LPT_OSTMDX_TypeDef OSTMDX,LPT_AREARM_TypeDef AREARMX)
|
||
|
|
{
|
||
|
|
LPT->SYNCR |= TRGENX| OSTMDX| AREARMX;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT Trigger Init
|
||
|
|
//EntryParameter:
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_Trigger_Configure(LPT_SRCSEL_TypeDef SRCSELX,LPT_BLKINV_TypeDef BLKINVX,LPT_CROSSMD_TypeDef CROSSMDX,LPT_TRGSRC0_TypeDef TRGSRC0X,
|
||
|
|
LPT_ESYN0OE_TypeDef ESYN0OEX,U16_T OFFSET_DATA,U16_T WINDOW_DATA,U8_T TRGEC0PRD_DATA)
|
||
|
|
{
|
||
|
|
LPT->TRGFTCR |= SRCSELX| BLKINVX| CROSSMDX;
|
||
|
|
LPT->TRGFTWR |= OFFSET_DATA |(WINDOW_DATA<<16);
|
||
|
|
LPT->EVTRG |= TRGSRC0X |ESYN0OEX;
|
||
|
|
LPT->EVPS |=TRGEC0PRD_DATA;
|
||
|
|
}
|
||
|
|
void LPT_Trigger_EVPS(U8_T TRGEC0PRD_DATA,U8_T TRGEV0CNT_DATA)
|
||
|
|
{
|
||
|
|
LPT->EVPS |= TRGEC0PRD_DATA |(TRGEV0CNT_DATA<<16);
|
||
|
|
}
|
||
|
|
void LPT_Trigger_Cnt(U8_T TRGEV0CNT_DATA)
|
||
|
|
{
|
||
|
|
LPT->EVPS |= (TRGEV0CNT_DATA<<16);
|
||
|
|
}
|
||
|
|
void LPT_Soft_Trigger(void)
|
||
|
|
{
|
||
|
|
LPT->EVSWF = 0X01;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
// LPT start
|
||
|
|
//EntryParameter:NONE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_Start(void)
|
||
|
|
{
|
||
|
|
LPT->RSSR |= 0X01;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
// LPT stop
|
||
|
|
//EntryParameter:NONE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_Stop(void)
|
||
|
|
{
|
||
|
|
LPT->RSSR &= 0XFFFFFFFE;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
// LPT soft reset
|
||
|
|
//EntryParameter:NONE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_Soft_Reset(void)
|
||
|
|
{
|
||
|
|
LPT->RSSR |= (0X5<<12);
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
// LPT soft reset at once sync mode
|
||
|
|
//EntryParameter:NONE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_REARM_Write(void)
|
||
|
|
{
|
||
|
|
LPT->SYNCR |= (0X1<<16);
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
// LPT soft read at once sync mode
|
||
|
|
//EntryParameter:NONE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
U8_T LPT_REARM_Read(void)
|
||
|
|
{
|
||
|
|
uint8_t value = 0;
|
||
|
|
uint32_t dat = 0;
|
||
|
|
dat=(LPT->SYNCR)&(1<<16);
|
||
|
|
if (dat)
|
||
|
|
{
|
||
|
|
value = 1;
|
||
|
|
}
|
||
|
|
return value;
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT inturrpt Configure
|
||
|
|
//EntryParameter:LPT_IMSCR_X,NewState
|
||
|
|
//NewState:ENABLE,DISABLE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_ConfigInterrupt_CMD(FunctionalStatus NewState,LPT_IMSCR_TypeDef LPT_IMSCR_X)
|
||
|
|
{
|
||
|
|
if (NewState != DISABLE)
|
||
|
|
{
|
||
|
|
LPT->IMCR |= LPT_IMSCR_X;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
LPT->IMCR &= ~LPT_IMSCR_X;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT Interrupt enable
|
||
|
|
//EntryParameter:NONE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_INT_ENABLE(void)
|
||
|
|
{
|
||
|
|
INTC_ISER_WRITE(LPT_INT);
|
||
|
|
}
|
||
|
|
/*************************************************************/
|
||
|
|
//LPT Interrupt disable
|
||
|
|
//EntryParameter:NONE
|
||
|
|
//ReturnValue:NONE
|
||
|
|
/*************************************************************/
|
||
|
|
void LPT_INT_DISABLE(void)
|
||
|
|
{
|
||
|
|
INTC_ICER_WRITE(LPT_INT);
|
||
|
|
}
|