本帖最后由 hotpower 于 2010-12-27 03:54 编辑
1.comIRQ.h- #include "main.h"
- #ifndef __NUC1xxcomIRQ_H__
- #define __NUC1xxcomIRQ_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef void (*CALLBACK)(void);//回调函数指针
- #define interface struct
- typedef interface ICom_IRQ_Interface ICom_IRQ_Interface;//接口定义
- typedef struct ICom_IRQVtbl//回调函数指针或回调函数数组结构
- {
- union{
- CALLBACK FunctionArray[32];//回调函数数组
- struct{//回调函数指针结构
- void (*BOD_IRQCallbackPtr)(void);//0 DrvSYS.C已使用
- void (*WDT_IRQCallbackPtr)(void);//1
- void (*EINT0_IRQCallbackPtr)(void);//2
- void (*EINT1_IRQCallbackPtr)(void);//3
- void (*GPAB_IRQCallbackPtr)(void);//4
- void (*GPCDE_IRQCallbackPtr)(void);//5
- void (*PWMA_IRQCallbackPtr)(void);//6
- void (*PWMB_IRQCallbackPtr)(void);//7
- void (*TMR0_IRQCallbackPtr)(void);//8
- void (*TMR1_IRQCallbackPtr)(void);//9
- void (*TMR2_IRQCallbackPtr)(void);//10
- void (*TMR3_IRQCallbackPtr)(void);//11
- void (*UART02_IRQCallbackPtr)(void);//12
- void (*UART1_IRQCallbackPtr)(void);//13
- void (*SPI0_IRQCallbackPtr)(void);//14
- void (*SPI1_IRQCallbackPtr)(void);//15
- void (*SPI2_IRQCallbackPtr)(void);//16
- void (*SPI3_IRQCallbackPtr)(void);//17
- void (*I2C0_IRQCallbackPtr)(void);//18
- void (*I2C1_IRQCallbackPtr)(void);//19
- void (*CAN0_IRQCallbackPtr)(void);//20
- void (*CAN1_IRQCallbackPtr)(void);//21
- void (*SD_IRQCallbackPtr)(void);//22
- void (*USBD_IRQCallbackPtr)(void);//23
- void (*PS2_IRQCallbackPtr)(void);//24
- void (*ACMP_IRQCallbackPtr)(void);//25
- void (*PDMA_IRQCallbackPtr)(void);//26
- void (*I2S_IRQCallbackPtr)(void);//27
- void (*PWRWU_IRQCallbackPtr)(void);//28 DrvSYS.C已使用
- void (*ADC_IRQCallbackPtr)(void);//29
- void (*DAC_IRQCallbackPtr)(void);//30
- void (*RTC_IRQCallbackPtr)(void);//31
- }FunctionPtr;
- };
- }ICom_IRQVtbl, *pICom_IRQVtbl;//回调函数指针或回调函数数组结构
- interface ICom_IRQ_Interface//回调函数COM接口
- {
- ICom_IRQVtbl Callback;//回调函数指针或回调函数数组结构
- volatile int Count;//已成功安装的回调函数的个数
- };
- extern ICom_IRQ_Interface IComIRQ;//回调函数COM接口全局变量
- extern bool InstallIRQCallbackFunction(unsigned int IRQn, CALLBACK pFunction);//安装回调函数
- extern bool UnInstallIRQCallbackFunction(unsigned int IRQn);//卸载已安装的回调函数
- #ifdef __cplusplus
- }
- #endif
- #endif//__NUC1xxcomIRQ_H__
2.comIRQ.cpp3.main.cpp-
- #include "main.h"
- __noinit__ volatile unsigned int SystemRamTest;// = 0x19591119;//RAM不初始化
- volatile unsigned int ErrorCount = 0;
- /*-------------------------------------------
- 注意:
- 1.全局类对象实例的构造函数运行级别高于main()
- 2.类的构造函数的运行次序与申请次序一样
- --------------------------------------------*/
- SystemObj System;//自动调用构造函数
- SysTickObj SystemTick;//自动调用构造函数
- TimerObj Timer;//自动调用构造函数
- RtcObj Rtc;//自动调用构造函数
- I2cObj I2c;//自动调用构造函数
- WdtObj Wdt;//自动调用构造函数
- TargetObj Target;//自动调用构造函数
- /*-------------------------------------------
- main()将在以上构造函数的后面运行
- --------------------------------------------*/
- int main()
- {
- unsigned char Data;
- unsigned char TxBuff[] = "0123456789ABCDEF";
- unsigned char RxBuff[] = "FEDCBA9876543210";
- /*
- String s, s1 = "212";
- s = s1 + "212";
- if (s == "1212")
- {
- __NOP();
- }
- */
- /*
- String s, s1, s2;
- s1 = "ded";
- s2 = "sdfdf";
- s = s1 + s2;
- s += s1;
- s += s2;
- s += "abcdef";
- s = s1 + s2;
- s = s1 + "323";
- s = s1 + "45";
- */
- __enable_irq();//开中断
- InstallIRQCallbackFunction(I2C0_IRQn, &I2cObj::Exec);//安装I2C回调函数,并打开I2C中断
- // UnInstallIRQCallbackFunction(I2C0_IRQn);//卸载I2C回调函数并关闭I2C中断
- if (I2c.WriteBuffer(0, TxBuff, 8) != I2C_BUS_OK)
- {
- __NOP();//写入AT24C02失败
- }
- if (I2c.ReadBuffer(0, RxBuff, 8) != I2C_BUS_OK)
- {
- __NOP();//读出AT24C02失败
- }
- if (I2c.WriteByte(0, 0x55) != I2C_BUS_OK)
- {
- __NOP();//写入AT24C02失败
- }
- if (I2c.ReadByte(0, Data) != I2C_BUS_OK)
- {
- __NOP();//读出AT24C02失败
- }
- while(1)
- {
- if (SystemTick.Timer.Bits.T500mS)//0.5S到
- {
- PortLed.DOUT.Bits.PinLed ^= 1;//LED闪烁
- SystemTick.Timer.Bits.T500mS = 0;
- }
- SystemTick.Timer.Bits.IntFlag = 0;//清除中断标志(主程序看门狗)
- ::ErrorCount ++;//节拍中断看门狗
- if (::ErrorCount > 0x8888)
- {
- __NOP();//10mS节拍中断错误停在此处!!!
- }
- }
- }
- /*
- .\;
- ..\..\..\..\CMSIS\CM0\CoreSupport;
- ..\..\..\..\CMSIS\CM0\DeviceSupport\Nuvoton\NUC1xx;
- ..\..\..\Include;
- ..\..\..\Include\Driver;
- ..\..\..\Include\NUC1xx-LB_002
- .\;.\CMSIS\CM0\CoreSupport;.\CMSIS\CM0\DeviceSupport\Nuvoton\NUC1xx;.\CMSIS\CM0\DeviceSupport\Nuvoton\NUC1xx\startup;.\System;
- */
- /*
- */
4.回调函数指针及数组与COM接口技术的艳照
4.1 回调函数安装计数艳照
4.2 回调函数COM接口指针艳照
4.3 回调函数COM接口数组艳照

|