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

📄 fiq.bak

📁 ADI公司的关于光通讯模块的监控程序,在KEIL FOR ARM 的编译环境编译.程序大小约12K,芯片是ADu7020.
💻 BAK
字号:
// fiq.c
/********************************************************************/
/*                                                                  */
/*      FIQ ISR                                                     */
/*                                                                  */
/********************************************************************/

#include <ADuC7020.h>
#include "common.h"
 
 
void FIQ_Handler (void) __fiq {

    static BYTE byte_addr0 = 0x00;
    static BYTE byte_addr2 = 0x00;
    int status = I2CSSTA; 

    #if DEBUG == 1                
    GP1SET = 0x00800000;                
    #endif   

      
    /***** Slave TX *****/
    if((status & 0x0004) == 0x0004){                    // slave transmitter interrupt?
        I2C0FSTA |= 0x100;                              // flush TX FIFO
        if((status&0x1800)==0){                         // ID decode bit is 00?
       	    I2CSTX = A0h[byte_addr0];                   // set TX data
       	    byte_addr0++;                               // increment byte address
       	    I2CSTX = A0h[byte_addr0];                   // set TX data
        }
        else{
       	    I2CSTX = A2h[byte_addr2];                   // set TX data
       	    byte_addr2++;                               // increment byte address
       	    I2CSTX = A2h[byte_addr2];                   // set TX data
        }
        I2CCFG = 0x4001;                                // clear bit9, enable Slave Tx FIFO request interrupt
    }        

    /***** Slave RX *****/
    if((status & 0x0008) == 0x0008){                    // slave receiver intterupt

        if(i2c_first == TRUE){                          // first slave-receiver INT?
            if((status&0x1800)==0) byte_addr0=I2CSRX;   // get byte address
            else byte_addr2 = I2CSRX;                   
            i2c_first = FALSE;
        }

        else{
            if((status&0x1800)==0){
                A0h[byte_addr0] = I2CSRX;               // get byte data
                byte_addr0++;                           // increment address
                i2c_receive = 0xA0;
            }
            else{
                A2h[byte_addr2] = I2CSRX;              // save received byte data
                byte_addr2++;
                i2c_receive = 0xA2;
                if((byte_addr2==248)||(byte_addr2==249)) dac_update=1;
                if((byte_addr2==250)||(byte_addr2==251)) dac_update=2;
            }
        }
    }

    /***** Stop Condition *****/
    if((status & 0x0400) == 0x0400){                   // STOP detect
        I2C0FSTA |= 0x100;                              // flush TX FIFO
        i2c_first = TRUE;
        if(I2CCFG == 0x4001){
            if((status&0x1800)==0)byte_addr0--;       // decrement byte address
            else byte_addr2--; 
            I2CCFG = 0x4201;                            // set bit9, clear Slave Tx FIFO request interrupt 
        }
    }

    #if DEBUG == 1                
    GP1CLR = 0x00800000;           
    #endif
    
    return;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -