📄 elcd.c
字号:
//DESCRIPTION :
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetReadOnPolarity(ELCD_read_on_polarity_t polarity){
SetGroupBits32(ELCD_ONOFFTIME_REG, ELCD_ONOFFTIME_REG_RON_POLARITY_POS, ELCD_ONOFFTIME_REG_RON_POLARITY_NUMB, polarity);
}
//---------------------------------------------------------
//NAME : ELCD_SetWriteOnPolarity
//DESCRIPTION :
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetWriteOnPolarity(ELCD_write_on_polarity_t polarity){
SetGroupBits32(ELCD_ONOFFTIME_REG, ELCD_ONOFFTIME_REG_WON_POLARITY_POS, ELCD_ONOFFTIME_REG_WON_POLARITY_NUMB, polarity);
}
//---------------------------------------------------------
//NAME : ELCD_SetWriteOnPulse
//DESCRIPTION : To define the number of FCLK cycle(s) for the "write on" pulse
//PARAMETERS : nb_fclk_cycles is the desired number of FCLK cycle(s) for the "write on" pulse
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetWriteOnPulse(UWORD8 nb_fclk_cycles){
SetGroupBits32(ELCD_ONOFFTIME_REG, ELCD_ONOFFTIME_REG_WRITE_ON_POS, ELCD_ONOFFTIME_REG_WRITE_ON_NUMB, nb_fclk_cycles-1);
}
//---------------------------------------------------------
//NAME : ELCD_SetWriteOffPulse
//DESCRIPTION : To define the number of FCLK cycle(s) for the "write off" pulse
//PARAMETERS : nb_fclk_cycles is the desired number of FCLK cycle(s) for the "write off" pulse
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetWriteOffPulse(UWORD8 nb_fclk_cycles){
SetGroupBits32(ELCD_ONOFFTIME_REG, ELCD_ONOFFTIME_REG_WRITE_OFF_POS, ELCD_ONOFFTIME_REG_WRITE_OFF_NUMB, nb_fclk_cycles-1);
}
//---------------------------------------------------------
//NAME : ELCD_SetReadOnPulse
//DESCRIPTION : To define the number of FCLK cycle(s) for the "read on" pulse
//PARAMETERS : nb_fclk_cycles is the desired number of FCLK cycle(s) for the "read on" pulse
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetReadOnPulse(UWORD8 nb_fclk_cycles){
SetGroupBits32(ELCD_ONOFFTIME_REG, ELCD_ONOFFTIME_REG_READ_ON_POS, ELCD_ONOFFTIME_REG_READ_ON_NUMB, nb_fclk_cycles-1);
}
//---------------------------------------------------------
//NAME : ELCD_SetReadOffPulse
//DESCRIPTION : To define the number of FCLK cycle(s) for the "read off" pulse
//PARAMETERS : nb_fclk_cycles is the desired number of FCLK cycle(s) for the "read off" pulse
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetReadOffPulse(UWORD8 nb_fclk_cycles){
SetGroupBits32(ELCD_ONOFFTIME_REG, ELCD_ONOFFTIME_REG_READ_OFF_POS, ELCD_ONOFFTIME_REG_READ_OFF_NUMB, nb_fclk_cycles-1);
}
//---------------------------------------------------------
//NAME : ELCD_SetPrescaler
//DESCRIPTION : FCLK = OCPCLK / (prescaler+1)
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetPrescaler(UWORD8 prescaler){
SetGroupBits32(ELCD_ONOFFTIME_REG, ELCD_ONOFFTIME_REG_PRESCALER_POS, ELCD_ONOFFTIME_REG_PRESCALER_NUMB, prescaler);
}
//---------------------------------------------------------
//NAME : ELCD_SetDMAorIT
//DESCRIPTION : To programme Tx & Rx FIFO threshold
//PARAMETERS : 1st is Tx FIFO threshold, 2nd is the Rx one
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetDMAorIT(UWORD8 tx_threshold, UWORD8 rx_threshold, ELCD_dma_it_t mode){
ELCD_DMAIT_REG = (UWORD32)( ((UWORD32)tx_threshold << ELCD_DMAIT_REG_TXFIFO_THRESHOLD_POS) | ((UWORD32)rx_threshold << ELCD_DMAIT_REG_RXFIFO_THRESHOLD_POS) | (UWORD32)mode );
}
//---------------------------------------------------------
//NAME : ELCD_SetDmaLcdTxMode
//DESCRIPTION : To programme the DMA LCD channel use
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetDmaLcdTxMode(void){
ELCD_DMAIT_REG = DMA_LCD;
}
//---------------------------------------------------------
//NAME : ELCD_SetBusSize
//DESCRIPTION : To set the Data Bus size
//PARAMETERS : desired bus_size can be :
//
// BUS_SIZE_6_BITS,
// BUS_SIZE_8_BITS,
// BUS_SIZE_9_BITS,
// BUS_SIZE_12_BITS,
// BUS_SIZE_16_BITS,
// BUS_SIZE_18_BITS,
// BUS_SIZE_24_BITS
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_SetBusSize(ELCD_bus_size_t bus_size){
SetGroupBits32(ELCD_ELCDCTL_REG, ELCD_ELCDCTL_REG_BUS_SIZE_POS, ELCD_ELCDCTL_REG_BUS_SIZE_NUMB, bus_size);
}
//---------------------------------------------------------
//NAME : ELCD_EnableRxPacking
//DESCRIPTION : To Enable RX Packing
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS : ELCD Bus size must be less than 16-bit
//---------------------------------------------------------
void ELCD_EnableRxPacking(void){
SetGroupBits32(ELCD_ELCDCTL_REG, ELCD_ELCDCTL_REG_RX_PACKING_POS, ELCD_ELCDCTL_REG_RX_PACKING_NUMB, 1);
}
//---------------------------------------------------------
//NAME : ELCD_InsertDummyReadCycles
//DESCRIPTION : To specify the number of dummy read cycle
// 00: 0 dummy read cycle
// 01: 1 dummy read cycle
// 10: 2 dummy read cycles
// 11: reserved
// These dummy reads will be add only for the first read access
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_InsertDummyReadCycles(ELCD_dummy_read_cycles_t nb_cycles){
SetField32(ELCD_ELCDCTL_REG, NDUMMY, nb_cycles);
}
//---------------------------------------------------------
//NAME : ELCD_DisableRxPacking
//DESCRIPTION : To Disable RX Packing
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_DisableRxPacking(void){
SetGroupBits32(ELCD_ELCDCTL_REG, ELCD_ELCDCTL_REG_RX_PACKING_POS, ELCD_ELCDCTL_REG_RX_PACKING_NUMB, 0);
}
//---------------------------------------------------------
//NAME : ELCD_SendCommand
//DESCRIPTION : Send a command to the External LCD controler on the ELCD bus
//PARAMETERS : command to send to external LCd controler & CS on which it will be performed (nCS1 or nCS0)
//RETURN VALUE: TEST_OK if command has been sent before time out, TEST_BAD else...
//LIMITATIONS : command is in fact 24-bit wide
//---------------------------------------------------------
UWORD16 ELCD_SendCommand(UWORD32 *p_command, ELCD_cs_type cs, UWORD8 nb_command){
UWORD32 register_value = ELCD_ELCDCTL_REG;
UWORD32 i = ELCD_CMDTX_END_TIMEOUT;
UWORD8 j;
ELCD_CMDTX_REG = *p_command++; // Command value
register_value &= (UWORD32)~( (1 << ELCD_ELCDCTL_REG_ELCD_DNC_POS) ); // To clear the DnC field to select Control instead of Data
register_value |= ( (1 << ELCD_ELCDCTL_REG_ELCD_NCS1_POS) | (1 << ELCD_ELCDCTL_REG_ELCD_NCS0_POS) ); // To ensure than no CS is active
register_value &= ~(UWORD32)(cs); // To activate the desired CS
ELCD_ELCDCTL_REG = register_value;
for ( j = nb_command-1; j > 0; j--){
// waiting loop for CMD_TX register to be ready to accept the next command data
while ( !GetGroupBits32(ELCD_STATUS_REG, ELCD_STATUS_REG_CMDTX_END_POS, ELCD_STATUS_REG_CMDTX_END_NUMB) && (i > 0) )
i--;
if (i == 0) return TEST_BAD;
ELCD_CMDTX_REG = *p_command++; // next Command value
}
// Each command has been put on the ELCD Bus, we must wait for the fsm to come back into idle before releasing the CS & DnC
i = ELCD_CMDTX_END_TIMEOUT;
while ( !GetGroupBits32(ELCD_STATUS_REG, ELCD_STATUS_REG_IDLE_POS, ELCD_STATUS_REG_IDLE_NUMB) && (i > 0) )
i--;
// Release the CS & DnC
register_value |= (UWORD32)( (1 << ELCD_ELCDCTL_REG_ELCD_NCS1_POS) | (1 << ELCD_ELCDCTL_REG_ELCD_NCS0_POS) );
register_value |= (1 << ELCD_ELCDCTL_REG_ELCD_DNC_POS);
ELCD_ELCDCTL_REG = register_value;
// return OK if time out didn't occured
if (i == 0)
return TEST_BAD;
else
return TEST_OK;
}
//---------------------------------------------------------
//NAME : ELCD_ReleaseResetPin
//DESCRIPTION : Control of ELCD_nRESET pin : set value to 1
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_ReleaseResetPin(void){
SetGroupBits32(ELCD_ELCDCTL_REG, ELCD_ELCDCTL_REG_ELCD_NRESET_POS, ELCD_ELCDCTL_REG_ELCD_NRESET_NUMB, 1);
}
//---------------------------------------------------------
//NAME : ELCD_ResetExternalLCD
//DESCRIPTION : Control of ELCD_nRESET pin : set value to 0
//PARAMETERS :
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_ResetExternalLCD(void){
SetGroupBits32(ELCD_ELCDCTL_REG, ELCD_ELCDCTL_REG_ELCD_NRESET_POS, ELCD_ELCDCTL_REG_ELCD_NRESET_NUMB, 0);
}
//---------------------------------------------------------
//NAME : ELCD_EnableIT
//DESCRIPTION : To enable the ELCD Tx & Rx ITs generation from ELCD I/F
//
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_EnableIT(void){
UWORD32 register_value = ELCD_DMAIT_REG;
register_value |= ( 1 << ELCD_DMAIT_REG_IT_RX_EN_POS | 1 << ELCD_DMAIT_REG_IT_TX_EN_POS | 1 << ELCD_DMAIT_REG_TX_MODE_POS );
ELCD_DMAIT_REG = register_value;
}
//---------------------------------------------------------
//NAME : ELCD_DisableIT
//DESCRIPTION : To disable the ELCD Tx & Rx ITs generation from ELCD I/F
//
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_DisableIT(void){
UWORD32 register_value = ELCD_DMAIT_REG;
register_value &= ~( 1 << ELCD_DMAIT_REG_IT_RX_EN_POS | 1 << ELCD_DMAIT_REG_IT_TX_EN_POS );
ELCD_DMAIT_REG = register_value;
}
//---------------------------------------------------------
//NAME : ELCD_DisableTXIT
//DESCRIPTION : To disable the ELCD Tx ITs generation from ELCD I/F
//
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_DisableTXIT(void){
UWORD32 register_value = ELCD_DMAIT_REG;
register_value &= ~( 1 << ELCD_DMAIT_REG_IT_TX_EN_POS );
ELCD_DMAIT_REG = register_value;
}
//---------------------------------------------------------
//NAME : ELCD_DisableRXIT
//DESCRIPTION : To disable the ELCD Rx ITs generation from ELCD I/F
//
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_DisableRXIT(void){
UWORD32 register_value = ELCD_DMAIT_REG;
register_value &= ~( 1 << ELCD_DMAIT_REG_IT_RX_EN_POS );
ELCD_DMAIT_REG = register_value;
}
//---------------------------------------------------------
//NAME : ELCD_DisableTXDMAreq
//DESCRIPTION : To disable the ELCD Tx DMA requests generation from ELCD I/F
//
//RETURN VALUE:
//LIMITATIONS :
//---------------------------------------------------------
void ELCD_DisableTXDMAreq(void){
UWORD32 register_value = ELCD_DMAIT_REG;
register_value &= ~( 1 << ELCD_DMAIT_REG_DMA_TX_EN_POS );
ELCD_DMAIT_REG = register_value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -