/*EISINE.C - SINE WITH 4 POINTS USING EXTERNAL INTERRUPT */ #include "aiccomc.c" /*AIC comm routines */ int AICSEC[4] = {0x162C,0x1,0x4892,0x67}; /*AIC data */ int data_out, loop = 0; /*declare global variables */ int sin_table[4] = {0,1000,0,-1000}; /*values for sinewave*/ int ampt_ctrl = 10; int delay_cnt = 0; void c_int10() { if (delay_cnt < 500) delay_cnt++; else if (delay_cnt == 500) { asm(" AND 0FFFFFFF7h,IF"); /*set INT3 = 0 */ asm(" OR 00000008h,IE"); /*set EINT3 = 1*/ } else asm(" OR 00000008h,IE"); } void c_int04() { asm(" AND 0FFFFFFF7h,IE"); /*set EINT3 = 0*/ delay_cnt = 0; if (ampt_ctrl < 10) ampt_ctrl++; else ampt_ctrl = 0; } void c_int05() { int out; out = sin_table[loop] * ampt_ctrl * 0.1; PBASE[0x48] = out << 2; /*output value from sine table*/ if (loop < 3) ++loop; /*increment loop counter < 3 */ else loop = 0; /*reset loop counter */ } main() { PBASE[0x38] = 0x000030D4; /*set timer 1 period */ PBASE[0x30] = 0x000003C1; /*set timer 1 control register*/ asm(" OR 00000208h,IE"); /*enable EINT3 & ETINT1*/ AICSET_I(); /*configure AIC */ for (;;); /*wait for interrupt */ }