⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 priohigh.c

📁 freescale最新的16位单片机
💻 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 + -