K74B/app_Indie/usr/common/validation.c

191 lines
6.8 KiB
C
Raw Normal View History

2024-01-16 10:46:17 +08:00
#include <appConfig.h>
#if ENABLE_FUNCTION_VALIDATION == 1
#include <meta.h>
#include <validation.h>
#include <gpio_device.h>
#include <adc_device.h>
#include <clock_device.h>
#include <lin_device.h>
#include <hwProtection.h>
#include <adc_device.h>
#include <pwm_aux_device.h>
SYSCTRLA_SFRS_t sysCtrl;
void PWM0_0(void);
void SPI(void);
void UART0(void);
void CT3_COUNTER(void);
uint16_t PT0data=0;
uint16_t Rdata_SPI=0;
uint16_t Tdata_UART0=0X55,Rdata_UART0=0;
uint16_t CT3CV_data=0;
void PWM0_0(void)
{
SYSCTRLA_SFRS->DEBUG_ACCESS_KEY.DEBUG_ACCESS_KEY = 0X05U;
IOCTRLA_SFRS->PORT_GROUP_MUX[1] |= (uint32_t)0x02<<20; // PB5 0x2: PWM0_0.
IOCTRLA_SFRS->PORT_GROUP_MUX[1] |= (uint32_t)0x02<<24; //PB6 0x2: PWM0_1.
PWM_SFRS->CTRL0R.PT0RC = 1U;//0x1: PT0R is cleared, PT0 stops counting
PWM_SFRS->CTRL1R.CC1CNTS = 0;
PWM_SFRS->CTRL1R.CC2CNTS = 0;
PWM_SFRS->CTRL1R.CC3CNTS = 0;
PWM_SFRS->CTRL1R.PT0PRES = 1;//0x1: Divide by 2 48Mhz/2 = 24Mhz
PWM_SFRS->CTRL1R.PT0MODE = 0;//0x0: Edge_aligned_mode:
PWM_SFRS->PT0PERIOD = 100U*48U; //100us*2 = 5Khz
PWM_SFRS->DTCR.CCXDTE = 0;//0x0: DISABLED: Dead-time generation is disabled.
PWM_SFRS->DTCR.PT1DT = 0;
PWM_SFRS->DTCR.PT0DT = 0;
PWM_SFRS->CHREMAPR.PWM0RMP = 0;//0x0: Select CC0
PWM_SFRS->CHREMAPR.PWM1RMP = 0;//0x0: Select CC0
PWM_SFRS->CHREMAPR.PWM2RMP = 0;//0x0: Select CC0
PWM_SFRS->CHREMAPR.PWM3RMP = 0;//0x0: Select CC0
PWM_SFRS->CMPSTATR.CC00PS = 0;//0x0: CC0_0 drives passive level while CC0CS is 0, i.e. driven by CC0CS
PWM_SFRS->CMPSTATR.CC01PS = 0;
PWM_SFRS->CMPSTATR.CC10PS = 0;//0x0: CC1_0 drives passive level while CC0CS is 0, i.e. driven by CC0CS
PWM_SFRS->CMPSTATR.CC11PS = 0;
PWM_SFRS->CMPSTATR.CC20PS = 0;//0x0: CC2_0 drives passive level while CC0CS is 0, i.e. driven by CC0CS
PWM_SFRS->CMPSTATR.CC21PS = 0;
PWM_SFRS->CMPSTATR.CC30PS = 0;//0x0: CC3_0 drives passive level while CC0CS is 0, i.e. driven by CC0CS
PWM_SFRS->CMPSTATR.CC31PS = 0;
PWM_SFRS->PSL = 0X0;//0x0: Level_0: The passive level is 0
PWM_SFRS->MODCTRLR.MCEN = 0;//0x1: ENABLED: The modulation of the corresponding output signal by the multi-channel pattern according to bit field MCPTN is enabled
PWM_SFRS->MODCTRLR.CCXMODEN = 0XFF;//0x1: ENABLED: The modulation of the corresponding output signal by CC0~3 pattern is enabled
PWM_SFRS->MCOUTR.MCUPR= 1;//0x1: By_software: Bit field MCPTN is updated by MCPTNS immediately
PWM_SFRS->MCOUTR.MCPTNS = 0XFF;
PWM_SFRS->PULSE0R.PRISE0 = 0U;
PWM_SFRS->PULSE0R.PFALL0 = 2000U;
PWM_SFRS->CTRL0R.PT0UPES = 1;//0x1: PT0UPE is set, enabling update
PWM_SFRS->CTRL0R.PT0RS = 1;//0x1: PT0R is set, PT0 start counting
while(1){
PT0data = PWM_SFRS->PT0CV;
}
}
void SPI(void)
{
SYSCTRLA_SFRS->DEBUG_ACCESS_KEY.DEBUG_ACCESS_KEY = 0X05U;
IOCTRLA_SFRS->PORT_GROUP_MUX[0] |= (uint32_t)0x03<<20; //PA5 0x3: SCK.
IOCTRLA_SFRS->PORT_GROUP_MUX[0] |= (uint32_t)0x03<<16; //PA4 0x3: MOSI.
IOCTRLA_SFRS->PORT_GROUP_MUX[0] |= (uint32_t)0x03<<12; //PA3 0x3: MISO
SPI_SFRS->SPICTRL.FIFOSOFTRESET = 1;
while(SPI_SFRS->SPICTRL.FIFOSOFTRESET == 1);
SPI_SFRS->SPICTRL.SCKEXT = 2;
SPI_SFRS->SPICTRL.SPR = 3;//{10, 11}: System Clock / 4096 11.718KHZ
SPI_SFRS->SPICTRL.LPBK = 1;//0x1: Loopback enable. Set to enable loopback
SPI_SFRS->SPICTRL.ICNT = 0;//0x0: Interrupt is set after every completed transfer
SPI_SFRS->SPICTRL.CPOL = 0;//
SPI_SFRS->SPICTRL.CPHA = 0;//CPHA
SPI_SFRS->SPICTRL.ENA_REQ = 1;
while(SPI_SFRS->SPISTATUS.TXFIFOEMPTY == 1)
{
SPI_SFRS->TXDATA = 0x55;
}
if(SPI_SFRS->SPISTATUS.RXFIFOEMPTY == 0){
Rdata_SPI = SPI_SFRS->RXDATA;
}
}
void UART0(void)//<2F><>loop<6F><70><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>TX<54><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<C5BA><C5A3>ر<EFBFBD>ʱ<EFBFBD><CAB1>
{
SYSCTRLA_SFRS->DEBUG_ACCESS_KEY.DEBUG_ACCESS_KEY = 0X05U;
IOCTRLA_SFRS->PORT_GROUP_MUX[1] |= (uint32_t)0x02U; //PB0 0x2: TXD.
IOCTRLA_SFRS->PORT_GROUP_MUX[1] |= (uint32_t)0x03U<<12; //PB3 0x3: RXD.
UART0_SFRS->MSGCTRL.ENABLE = 0U;//0:Disable UART0
UART0_SFRS->MSGCTRL.LOOPENA = 0U;//Loopback enable. Set to enable loopback
UART0_SFRS->MSGCTRL.BREAKENA = 0U;
UART0_SFRS->MSGCTRL.STICKENA = 0U;
UART0_SFRS->MSGCTRL.PARODD = 0U;//0x0: ODD Parity
UART0_SFRS->MSGCTRL.PARENA = 1U;//Parity enable.
UART0_SFRS->MSGCTRL.STOP = 0U;//0x0: One stop bit
UART0_SFRS->MSGCTRL.SIZE = 3U;//Transmission word size.0x3: 8-bit
UART0_SFRS->MSGCTRL.TXXFERCNTCLR = 1U;//
UART0_SFRS->MSGCTRL.RXXFERCNTCLR = 1U;
UART0_SFRS->MSGCTRL.UFIFOSOFTRESET = 1U;
//Baud_rate = Fclk/OSR/(BAUDDIV+1+FDIV/8)
//48000000/16/(311+1+4/8)= 9600
UART0_SFRS->UARTBAUD.URETARD = 1;
UART0_SFRS->UARTBAUD.UADVANCE = 1;
UART0_SFRS->UARTBAUD.OSR = 16;//Over-sampling ratio. Valid OSR Range: 6 to 16.
UART0_SFRS->UARTBAUD.BAUDDIV = 311;//Baud rate divider.16bits
UART0_SFRS->UARTBAUD.FDIV = 4;//Fractional divider.3bits
UART0_SFRS->UARTFIFO.TXMULTIPLEXFERDONECNT = 4;//Transmit Data Count Interrupt. Valid Range: 1 to 16
UART0_SFRS->MSGCTRL.ENABLE = 1U;
while(UART0_SFRS->MSGCTRL.ENABLE_STS == 0);
Tdata_UART0 = 0X55;
UART0_SFRS->DATA.BYTE = Tdata_UART0;
while(UART0_SFRS->UARTINT.STATUS.TXDONE == 0U){}
UART0_SFRS->UARTINT.CLEAR.TXDONE = 1U;
// Tdata_UART0 = 0X56;
// UART0_SFRS->DATA.BYTE = Tdata_UART0;
if(UART0_SFRS->UARTINT.STATUS.RXDONE == 1)
{
Rdata_UART0 = UART0_SFRS->DATA.BYTE;
}
}
void CT3_COUNTER(void)
{
SYSCTRLA_SFRS->DEBUG_ACCESS_KEY.DEBUG_ACCESS_KEY = 0X05U;
IOCTRLA_SFRS->PORT_GROUP_MUX[2] |= (uint32_t)0x07U << 12; //PC3 0x7: PAUX[1]
IOCTRLA_SFRS->PORT_GROUP_MUX[2] |= (uint32_t)0x04U << 16; //PC4 0x4: CT3EUDB
CTT_SFRS->CTTINSR.SELCT3EUD = 1U;//0x1: Signal CT3EUDB is selected
CTT_SFRS->CT3CTRLR.CT3R = 0;//0x0: Timer CT3 stops
CTT_SFRS->CT3CTRLR.CT3EUDE = 0U;//0x0: Count direction is controlled by bit CT3UD; input CT3EUD is ignored
CTT_SFRS->CT3CTRLR.CT3UD = 0U;//0x0: Up: Timer CT3 counts up
CTT_SFRS->CT3CTRLR.CT3M = 7U;//0x7: Incremental Interface Mode (Edge Detection Mode)
CTT_SFRS->CT3CTRLR.CT3I = 2U;//Any transition (rising or falling edge) on CT3EUD
PWMAUX_Init(GROUP_GPIOC,GPIO_PORT_3,PWMAUX_CH1,PWMAUX_BASE_0,PWMAUX_CLK_DIV_1,1000*48);//1ms
PWMAUX_SetMatchValue(PWMAUX_CH1, 0, 1000*48/2);//PWMAUX1:PC3
CTT_SFRS->CT3CTRLR.CT3R = 1;//0x0: Timer CT3 stops
while(1)
{
CT3CV_data = CTT_SFRS->CT3CV;
}
}
void validation_main(void)
{
SYSCTRLA_SFRS->DEBUG_ACCESS_KEY.DEBUG_ACCESS_KEY = 0X05U;
//SYSCTRLA_REG_TRIM_ACCESS_KEY.TRIM_ACCESS_KEY = 0x0EU;
SYSCTRLA_SFRS->TRIM_ACCESS_KEY.TRIM_ACCESS_KEY = 0x0EU;
Clock_SystemMainClockInit(SYS_MAIN_CLOCK_DIV);
while(1);
}
#endif