This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
pwm配置为a1,a2,a3为高电平,b1,b2,b3为低电平,但是芯片上电后,发现a1先高再低然后再高,b1先低在高然后再低,翻转三次后a1为常高,b2为常低,2,3也是同样现象,请问是什么原因。
根据您上述描述,这不是预期的行为
没有任何配置细节,我无法知道为什么会发生这种情况。
您是否遵循以下顺序:
*在PCLKCR1寄存器中启用ePWM模块时钟。
•将TBCLKSYNC设置为0。
•配置预分频器值和ePWM模式。
•将TBCLKSYNC设置为1。
您好,这是我的配置,请帮忙看一下是否配置正确,谢谢。
*在PCLKCR1寄存器中启用ePWM模块时钟。
•将TBCLKSYNC设置为0。
•配置预分频器值和ePWM模式。
•将TBCLKSYNC设置为1
DSP2833x_SysCtrl.c文件
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1
SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1; // ePWM2
SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1; // ePWM3
SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1; // ePWM4
SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1; // ePWM5
SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1; // ePWM6
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM
DSP2833x_EPwm.c文件
void
InitEPwm(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
InitEPwm1();
InitEPwm2();
InitEPwm3();
InitEPwm4();
InitEPwm5();
InitEPwm6();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
}
void InitEPwm1(void)
{
EPwm1Regs.TBPRD =PWM_PERIOD;// Set timer period 16KHz
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm1Regs.TBCTR = 0x0000; // Clear counter
// Setup compare
EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD>>1; //0% Duty EPwm1Regs.TBPRD*0.8
EPwm1Regs.CMPB = EPwm1Regs.CMPA.half.CMPA; //50% Duty
// Setup TBCLK
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// EPwm1Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO or PRD
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; //0:影子模式; 1:立即模式
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; //计数寄存器CTR=0是装载新的比较值
// Set actions
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A 斩波
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
// Active Low PWMs - Setup Deadband
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
// 设置ePWM中断生成
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // 在计数为零的时候生成中断事件
EPwm1Regs.ETSEL.bit.INTEN = 1; // 使能中断
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // 每个事件生成中断,选择INTCNT和INTPRD作为事件判断标志
// 设置ePWM的SOCA的生成
EPwm1Regs.ETSEL.bit.SOCAEN = 1; //
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; //等于PRD时触发启动转换ADC脉冲,上桥臂关闭中间采样 ET_CTR_PRD
EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; //电流环16KHz ET_1ST
EPwm1Regs.ETCLR.bit.SOCA = 1; //Clear SOCA flag
}
void InitEPwm2(void)
{
EPwm2Regs.TBPRD = EPwm1Regs.TBPRD;
EPwm2Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm2Regs.TBCTR = 0x0000; // Clear counter
// Setup compare
EPwm2Regs.CMPA.half.CMPA = EPwm2Regs.TBPRD>>1; //EPwm2Regs.TBPRD; //0% Duty
EPwm2Regs.CMPB = EPwm2Regs.CMPA.half.CMPA; //0% Duty
// Setup TBCLK
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// EPwm2Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO or PRD
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set actions
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A 斩波
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;
}
void InitEPwm3(void)
{
EPwm3Regs.TBPRD = EPwm1Regs.TBPRD;// Set timer period 20KHz=80/4000
EPwm3Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm3Regs.TBCTR = 0x0000; // Clear counter
// Setup compare
EPwm3Regs.CMPA.half.CMPA = EPwm3Regs.TBPRD>>1; //50% Duty
EPwm3Regs.CMPB = EPwm3Regs.CMPA.half.CMPA; //50% Duty
// Setup TBCLK
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// EPwm3Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO or PRD
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set actions
EPwm3Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A 斩波
EPwm3Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm3Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm3Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm3Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EALLOW;
//保护设置
EPwm3Regs.TZSEL.bit.CBC3 = TZ_ENABLE; //过流保护触发 cycle by cycle
EPwm3Regs.TZCTL.bit.TZA = TZ_FORCE_LO; //过流时PWMA输出高阻 TZ_HIZ
EPwm3Regs.TZCTL.bit.TZB = TZ_FORCE_LO; //过流时PWMB输出高阻 TZ_HIZ
EPwm3Regs.TZEINT.bit.CBC=1;
EPwm3Regs.TZCLR.all = 0; //清除所有中断标志
EDIS;
}
void InitEPwm4(void)
{
EPwm4Regs.TBPRD =EPwm1Regs.TBPRD;// Set timer period 16KHz
EPwm4Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm4Regs.TBCTR = 0x0000; // Clear counter
// Setup compare
EPwm4Regs.CMPA.half.CMPA = EPwm4Regs.TBPRD>>1; //50% Duty EPwm1Regs.TBPRD*0.8
EPwm4Regs.CMPB = EPwm4Regs.CMPA.half.CMPA; //50% Duty
// Setup TBCLK
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm4Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO or PRD
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; //0:影子模式; 1:立即模式
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; //计数寄存器CTR=0是装载新的比较值
// Set actions
EPwm4Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A 斩波
EPwm4Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm4Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm4Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm4Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EALLOW;
//保护设置 TZ4触发保护
EPwm4Regs.TZSEL.bit.CBC4 = TZ_ENABLE; //过流保护触发 cycle by cycle
EPwm4Regs.TZCTL.bit.TZA = TZ_FORCE_LO; //过流时PWMA输出高阻 TZ_HIZ
EPwm4Regs.TZCTL.bit.TZB = TZ_FORCE_LO; //过流时PWMB输出高阻 TZ_HIZ
EPwm4Regs.TZEINT.bit.CBC=1;
EPwm4Regs.TZCLR.all = 0; //清除所有中断标志
EDIS;
}
void InitEPwm5(void)
{
EPwm5Regs.TBPRD = EPwm1Regs.TBPRD;// Set timer period 20KHz=80/4000
EPwm5Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm5Regs.TBCTR = 0x0000; // Clear counter
// Setup compare
EPwm5Regs.CMPA.half.CMPA = EPwm5Regs.TBPRD>>1; //50% Duty
EPwm5Regs.CMPB = EPwm5Regs.CMPA.half.CMPA; //50% Duty
// Setup TBCLK
EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm5Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm5Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm5Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// EPwm5Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO or PRD
EPwm5Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm5Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm5Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set actions
EPwm5Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A 斩波
EPwm5Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm5Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm5Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm5Regs.DBCTL.bit.IN_MODE = DBA_ALL;
// EPwm5Regs.DBCTL.bit.IN_MODE = DBA_ALL; //输入都是PWMA
// EPwm5Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //B路不取反 IRS2103 负逻辑
// EPwm5Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //
//
// EPwm5Regs.DBRED = Dead_Time; //死区时间1us
// EPwm5Regs.DBFED = Dead_Time;
EALLOW;
//保护设置 TZ4触发保护
EPwm5Regs.TZSEL.bit.CBC4 = TZ_ENABLE; //过流保护触发 cycle by cycle
EPwm5Regs.TZCTL.bit.TZA = TZ_FORCE_LO; //过流时PWMA输出高阻 TZ_HIZ
EPwm5Regs.TZCTL.bit.TZB = TZ_FORCE_LO; //过流时PWMB输出高阻 TZ_HIZ
EPwm5Regs.TZEINT.bit.CBC=1;
EPwm5Regs.TZCLR.all = 0;
EDIS;
}
void InitEPwm6(void)
{
EPwm6Regs.TBPRD = EPwm1Regs.TBPRD;// Set timer period 20KHz=80/4000
EPwm6Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm6Regs.TBCTR = 0x0000; // Clear counter
// Setup compare
EPwm6Regs.CMPA.half.CMPA = EPwm6Regs.TBPRD>>1; //50% Duty
EPwm6Regs.CMPB = EPwm6Regs.CMPA.half.CMPA; //50% Duty
// Setup TBCLK
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm6Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm6Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1;
// EPwm6Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO or PRD
EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Set actions
EPwm6Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A 斩波
EPwm6Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm6Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm6Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm6Regs.DBCTL.bit.IN_MODE = DBA_ALL;
// EPwm6Regs.DBCTL.bit.IN_MODE = DBA_ALL; //输入都是PWMA
// EPwm6Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //B路不取反 IRS2103 负逻辑
// EPwm6Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //
//
// EPwm6Regs.DBRED = Dead_Time; //死区时间1us
// EPwm6Regs.DBFED = Dead_Time;
EALLOW;
//保护设置 TZ4触发保护
EPwm6Regs.TZSEL.bit.CBC4 = TZ_ENABLE; //过流保护触发 cycle by cycle
EPwm6Regs.TZCTL.bit.TZA = TZ_FORCE_LO; //过流时PWMA输出高阻 TZ_HIZ
EPwm6Regs.TZCTL.bit.TZB = TZ_FORCE_LO; //过流时PWMB输出高阻 TZ_HIZ
EPwm6Regs.TZEINT.bit.CBC=1;
EPwm6Regs.TZCLR.all = 0;
//清除所有中断标志
EDIS;
}
您好,main函数如下,我初始化了InitEPwm(void),,在这个函数中,有
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
和
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
我还在main函数中配置了死区
EALLOW;
EPwm1Regs.TZCLR.all = 0x0007;
EPwm2Regs.TZCLR.all = 0x0007;
EPwm3Regs.TZCLR.all = 0x0007;
EPwm4Regs.TZCLR.all = 0x0007;
EPwm5Regs.TZCLR.all = 0x0007;
EPwm6Regs.TZCLR.all = 0x0007;
EDIS;
请问会不会是这段函数的影响。
int main(void)
{
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
InitSysCtrl();
#ifndef __DEBUG
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
#endif
// Call Flash Initialization to setup flash waitstates
// This function must reside in RAM
#ifndef __DEBUG
InitFlash();
#endif
// Step 2. Initalize GPIO:
InitGpio();
InitEPwmGpio();
// Step 3. Initialize Flash
// Copy time critical code and Flash setup code to RAM
// This includes InitFlash();
// Step 4. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
InitPieVectTable();
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
EALLOW; // This is needed to write to EALLOW protected registers
// PieVectTable.ADCINT = &adc_isr;
// PieVectTable.EPWM1_INT = &epwm1_isr;
PieVectTable.XINT1 = &xint1_isr;
PieVectTable.XINT2 = &xint2_isr;
PieVectTable.SCIRXINTB = &scibRxFifoIsr;
PieVectTable.SCIRXINTC = &scicRxFifoIsr;
PieVectTable.XINT3 = &xint3_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
// InitAdc();
InitSci();
// PieCtrlRegs.PIEIER3.bit.INTx1 = 1; //PWM1
PieCtrlRegs.PIEIER8.bit.INTx5 = 1; //SCIRXINTC
PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //ADC
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; //XINT1
// PieCtrlRegs.PIEIER1.bit.INTx5 = 1; //XINT2
PieCtrlRegs.PIEIER9.bit.INTx3 = 1; //SCIRXINTB
PieCtrlRegs.PIEIER12.bit.INTx1 = 1; //XINT3
IER |= M_INT1 | M_INT8 | M_INT3 | M_INT9 | M_INT12;
EINT; // Enable Global interrupt INTM
ERTM;
EALLOW;
EPwm1Regs.TZCLR.all = 0x0007;
EPwm2Regs.TZCLR.all = 0x0007;
EPwm3Regs.TZCLR.all = 0x0007;
EPwm4Regs.TZCLR.all = 0x0007;
EPwm5Regs.TZCLR.all = 0x0007;
EPwm6Regs.TZCLR.all = 0x0007;
EDIS;
InitEPwm();
// Step 5. Initialize all the Device Peripherals:
// 外设初始化必须放在对外部设备使用之前
InitXintf();
EPwm1Regs.DBRED = 170;
EPwm1Regs.DBFED = 170;
EPwm2Regs.DBRED = 170;
EPwm2Regs.DBFED = 170;
EPwm3Regs.DBRED = 170;
EPwm3Regs.DBFED = 170;
EPwm4Regs.DBRED = 170;
EPwm4Regs.DBFED = 170;
EPwm5Regs.DBRED = 170;
EPwm5Regs.DBFED = 170;
EPwm6Regs.DBRED = 170;
EPwm6Regs.DBFED = 170;
EALLOW;
GpioCtrlRegs.GPACTRL.bit.QUALPRD0=1; // Qual period = SYSCLKOUT/2
GpioCtrlRegs.GPACTRL.bit.QUALPRD1=1; // Qual period = SYSCLKOUT/2
GpioCtrlRegs.GPACTRL.bit.QUALPRD2=1; // Qual period = SYSCLKOUT/2
GpioCtrlRegs.GPACTRL.bit.QUALPRD3=1; // Qual period = SYSCLKOUT/2
GpioCtrlRegs.GPCMUX2.bit.GPIO80 = 0; // GPIO
GpioCtrlRegs.GPCDIR.bit.GPIO80 = 1; // Mc output read enable
GpioDataRegs.GPCCLEAR.bit.GPIO80 = 1;
GpioCtrlRegs.GPCMUX2.bit.GPIO82 = 0; // GPIO
GpioCtrlRegs.GPCDIR.bit.GPIO82 = 1; // Mc output read enable
GpioDataRegs.GPCCLEAR.bit.GPIO82 = 1;
GpioCtrlRegs.GPCMUX2.bit.GPIO83 = 0; // GPIO
GpioCtrlRegs.GPCDIR.bit.GPIO83 = 1; // Mc output read enable
GpioDataRegs.GPCCLEAR.bit.GPIO83 = 1;
GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 0; // GPIO
GpioCtrlRegs.GPCDIR.bit.GPIO84 = 1; // Mc output read enable
GpioDataRegs.GPCCLEAR.bit.GPIO84 = 1;
GpioCtrlRegs.GPCMUX2.bit.GPIO85 = 0; // GPIO
GpioCtrlRegs.GPCDIR.bit.GPIO85 = 1; // Mc output read enable
GpioDataRegs.GPCCLEAR.bit.GPIO85 = 1;
GpioCtrlRegs.GPCMUX2.bit.GPIO86 = 0; // GPIO
GpioCtrlRegs.GPCDIR.bit.GPIO86 = 1; // Mc output read enable
GpioDataRegs.GPCCLEAR.bit.GPIO86 = 1;
GpioCtrlRegs.GPCMUX2.bit.GPIO87 = 0; // GPIO
GpioCtrlRegs.GPCDIR.bit.GPIO87 = 1; // Mc output read enable
GpioDataRegs.GPCCLEAR.bit.GPIO87 = 1;
GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 0; // GPIO
GpioCtrlRegs.GPBDIR.bit.GPIO39 = 1; // Mc output read enable
GpioDataRegs.GPBCLEAR.bit.GPIO39 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0; // GPIO
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1; // Mc output read enable
GpioDataRegs.GPACLEAR.bit.GPIO31 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0; // GPIO26 外同步中断
GpioCtrlRegs.GPADIR.bit.GPIO26 = 0; // GPIO26 = input
GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 1; // 3 samples
GpioIntRegs.GPIOXINT1SEL.all = 26; // Xint1 connected to GPIO26
GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0; // GPIO48 惯导中断
GpioCtrlRegs.GPBDIR.bit.GPIO48 = 0; // input
GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 1; // 3 samples
GpioIntRegs.GPIOXINT3SEL.all = 48; // Xint3 connected to GPIO48
EDIS;
// External Interrupt 1 Control Register
XIntruptRegs.XINT1CR.bit.POLARITY = 1; // Rising edge interrupt
XIntruptRegs.XINT1CR.bit.ENABLE = 1; // Enable XINT1
XIntruptRegs.XINT2CR.bit.POLARITY = 1; // Rising edge interrupt
XIntruptRegs.XINT2CR.bit.ENABLE = 1; // Enable XINT2
XIntruptRegs.XINT3CR.bit.POLARITY = 1; // Rising edge interrupt
XIntruptRegs.XINT3CR.bit.ENABLE = 1; // Enable XINT3
// Enable global Interrupts and higher priority real-time debug events:
EnableInterrupts();
// Wait for ADC interrupt
while(1)
{
if(ScicRegs.SCIRXST.bit.RXERROR)
{
ScicRegs.SCICTL1.bit.SWRESET = 0;
ScicRegs.SCIFFRX.bit.RXFIFORESET = 0;
ScicRegs.SCICTL1.bit.SWRESET = 1;
ScicRegs.SCIFFRX.bit.RXFIFORESET = 1;
}
}
}