📄 priohigh.c
字号:
#include "main.h"
#include "spi.h"
#include <hidef.h>
extern Byte fm_status, fm_task, fm_action0, fm_action1, fm_action2, fm_action3,
fm_action4, fm_action5, fm_action6, fm_action7, fm_action8, fm_action9,
fm_action10, fm_action11, fm_action12, fm_action13, fm_action14;
extern Byte last_action0, last_action1, last_action2, last_action3,
last_action4, last_action5, last_action6, last_action7, last_action8,
last_action9, last_action10, last_action11, last_action12, last_action13,
last_action14;
extern Word fm_analog1, fm_analog2, fm_analog3, fm_analog4, fm_analog5,
fm_analog6, fm_analog7, fm_analog11, fm_analog12, fm_analog13,
fm_analog14, fm_analog21, fm_analog22, fm_analog23, fm_analog24;
extern Byte lastmsgU201, lastmsgU202;
extern UNION16 lastmsgU401, lastmsgU402, lastmsgU403, lastmsgU501, lastmsgU601, lastmsgU605;
extern SPI24 lastmsgU404, lastmsgU405;
// last fail of each device
extern Byte failCAN, failLINx, failJAGUAR, failPUMA, failCOSS,
lastfailCAN, lastfailLIN, lastfailJAGUAR, lastfailPUMA, lastfailCOSS,
lastfaildevice;
extern Byte countercheck; // counter of cycles 30 ms; value is <0,7>
extern TASK arrayTask[SIZE_TASK_ARRAY];
extern Byte actualTask; // pointer to actualy solved task in arrayTask
void PriorityHigh (Byte actual)
{
Byte iSCI5CR2, iCAN0TIER, iCAN0RIER, iPIEJ, temp8;
Word iXGMCTL;
SPI24 temp24;
switch (arrayTask[actual].number)
{
case MANUAL_GO_TO_FM:
arrayTask[actual].priority = 0; // erase task from list
break;
case LOWPWR_GO_TO_SLEEP: // Sleep mode enter procedure
RST_U401 = 0; // U401 - MC 33580 (JAGUAR) go to sleep mode
RST_U402 = 0; // U402 - MC 33874 (PUMA) go to sleep mode
EN_U403 = 0; // U403 - MC 33879 (COSS) go to sleep mode
EN_U605 = 0; // U605 - MC 33879 (COSS) go to sleep mode
CSB_U404 = 0; // U404 - MC33972 (MSDI) go to sleep mode
temp24.comm = U404_SLEEP_COMMAND;
temp24.data.w = U404_SLEEP_INTR_OFF;
temp24 = ReadWriteSPI24bit(temp24); //
CSB_U404 = 1;
CSB_U405 = 0; // U405 - MC33972 (MSDI) go to sleep mode
temp24.comm = U405_SLEEP_COMMAND;
temp24.data.w = U405_SLEEP_INTR_OFF;
temp24 = ReadWriteSPI24bit(temp24); //
CSB_U405 = 1;
EN_U301 = 0; // U301 - MC33661 (LIN) go to sleep mode
DisableInterrupts;
CSB_U201 = 0;
// Disable wake-up inputs
temp8 = ReadWriteSPI8bit(U201_WUR, U201_WRITE, ZERO);
// Set NOSTOP in RCR register
temp8 = ReadWriteSPI8bit(U201_RCR, U201_WRITE, U201_NOSTOP);
// Sleep mode enter
temp8 = ReadWriteSPI8bit(U201_MCR, U201_WRITE, U201_SLEEP);
CSB_U201 = 1;
CSB_U202 = 0;
// Configure L0, L1 low level and L2, L3 pins high level sensitive
temp8 = ReadWriteSPI8bit(U202_WUR, U202_WRITE, ZERO);
// Clear BATFAIL bit in MCR by reading MCR
temp8 = ReadWriteSPI8bit(U202_MCR, U202_READ, ZERO);
// Set NOSTOP in RCR register
temp8 = ReadWriteSPI8bit(U202_RCR, U202_WRITE, U202_NOSTOP);
// Sleep mode enter
temp8 = ReadWriteSPI8bit(U202_MCR, U202_WRITE, U202_SLEEP);
CSB_U202 = 1;
for EVER;
break;
case LOWPWR_GO_TO_FULLSTOP:
case LOWPWR_GO_TO_PSEUDOSTOP:
CSB_U201 = 0;
// Disable wake-up inputs
temp8 = ReadWriteSPI8bit(U201_WUR, U201_WRITE, ZERO);
// Set NOSTOP in RCR register
temp8 = ReadWriteSPI8bit(U201_RCR, U201_WRITE, U201_NOSTOP);
// Sleep mode enter
temp8 = ReadWriteSPI8bit(U201_MCR, U201_WRITE, U201_SLEEP);
CSB_U201 = 1;
CSB_U202 = 0;
// Configure L0, L1 low level and L2, L3 pins high level sensitive
temp8 = ReadWriteSPI8bit(U202_WUR, U202_WRITE, ZERO);
// Clear BATFAIL bit in MCR by reading MCR
temp8 = ReadWriteSPI8bit(U202_MCR, U202_READ, ZERO);
// Set NOSTOP in RCR register
temp8 = ReadWriteSPI8bit(U202_RCR, U202_WRITE, U202_WDSTOP);
// Sleep mode enter
temp8 = ReadWriteSPI8bit(U202_MCR, U202_WRITE, U202_STOP);
CSB_U202 = 1;
DisableInterrupts;
IRQCR_IRQEN = 1;
EnableInterrupts;
CLKSEL_PSTP = 0; // Full Stop mode activate
CLKSEL_PLLSEL = 0; // System Clock = OSCCLK
PLLCTL_PLLON = 0; // PLL is turned OFF
__asm ANDCC #0x7F; // clear S bit = enable stop mode
__asm STOP;
/*
DisableInterrupts;
iXGMCTL = XGMCTL;
XGMCTL_XGIE = 0;
iSCI5CR2 = SCI5CR2;
SCI5CR2 = 0;
iCAN0TIER = CAN0TIER;
CAN0TIER = 0;
iCAN0RIER = CAN0RIER;
CAN0RIER = 0;
iPIEJ = PIEJ;
PIEP = 0;
PIEJ = 0;
PIEH = 0; // PortH - Interrupt disable register
IRQCR_IRQEN = 1;
if (arrayTask[actual].number == LOWPWR_GO_TO_FULLSTOP)
CLKSEL_PSTP = 0; // Full Stop mode activate
if (arrayTask[actual].number == LOWPWR_GO_TO_PSEUDOSTOP)
CLKSEL_PSTP = 1; // Pseudo Stop mode activate
CLKSEL_PLLSEL = 0; // System Clock = OSCCLK
PLLCTL_PLLON = 0; // PLL is turned OFF
EnableInterrupts;
__asm ANDCC #0x7F; // clear S bit = enable stop mode
__asm STOP;
// wake-up and wake-up measurement
DisableInterrupts;
// PIEJ = iPIEJ;
XGMCTL = iXGMCTL;
SCI5CR2 = iSCI5CR2;
CAN0TIER = iCAN0TIER;
CAN0RIER = iCAN0RIER;
*/
/* Init MC33742. SBC enters Normal mode, after Watchdog was triggered.
Watchdog is initialized as 350ms timeout */
CSB_U202 = 0;
temp8 = ReadWriteSPI8bit(U202_TIM, U202_WRITE, U202_350MS);
CSB_U202 = 1;
fm_action14 = 0;
// fm_action14 = fm_action14 + 1;
arrayTask[actual].priority = 0; // erase task from list
break;
case LOWPWR_WD_TIMEOUT:
arrayTask[actual].priority = 0; // erase task from list
break;
case LOWPWR_WD_WINDOW_OUT:
arrayTask[actual].priority = 0; // erase task from list
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -