タイマ割り込みで、多分こんなことも
次のように、”pragma interrupt(関数名)”でいくつもタイマ割り込み関数を宣言すれば、別々のタイマ割り込みをやってくれるようになってくれるはず。
#include <3048f.h> #include <myfunc.h> #pragma interrupt(intimia1) /* ITU1の割り込み関数宣言 */ #pragma interrupt(intimia2) /* ITU2の割り込み関数宣言 */ #pragma interrupt(intimia3) /* ITU1の割り込み関数宣言 */ #pragma interrupt(intimia4) /* ITU1の割り込み関数宣言 */ #pragma interrupt(intimia5) /* ITU1の割り込み関数宣言 */
module SW_INTERFACE( xRES ,SW ,Y ); input xRES; input SW; output Y; reg [3:0] SLOTSIG; parameter even = 1'b0; parameter odd = 1'b1; parameter SLOT_START = 1'b0; parameter SLOT_STOP = 1'b1; //assgin SLOTSIG = (SLOTSIG >= 4'h2) ? 1'b0; assign Y = (SLOTSIG[0] == even)? SLOT_STOP:SLOT_START; always@(posedge SW or negedge xRES) begin if(xRES == 1'b0) SLOTSIG <= 1'b0; else SLOTSIG <= ~SLOTSIG; end endmodule
/*--------------------------------------------------------------*/ /* メイン */ /*--------------------------------------------------------------*/ /* void main(void) { InitSH (); } */ void main(void) { // ITU1.TCR.BYTE = 0x23; /* GRAコンペアマッチ clock 1/8 */ CMT0.CMCSR.BIT.CKS = 0x00; // ITU1.GRA = 0x4E20; /* GRAを4E20に設定 約10ms*/ CMT0.CMCNT = 0x4E20; // ITU1.TIER.BYTE = 0xF9; /* ITU1のGRAによるコンペアマッチ割込みを許可*/ CMT0.CMCSR.BIT.CMIE = 0xF9; // ITU.TSTR.BIT.STR1 = 0; /* カウント停止状態 */ CMT.CMSTR.BIT.STR0 = 0; // ITU2.TCR.BYTE = 0x23; /* GRAコンペアマッチ clock 1/8 */ CMT1.CMCSR.BIT.CKS = 0x00; // ITU2.GRA = 0x2710; /* GRAを2710に設定 約5ms*/ CMT1.CMCNT = 0x4E20; // ITU2.TIER.BYTE = 0xF9; /* ITU2のGRAによるコンペアマッチ割込みを許可*/ CMT1.CMCSR.BIT.CMIE = 0xF9; // ITU.TSTR.BIT.STR2 = 0; /* カウント停止状態 */ CMT.CMSTR.BIT.STR1 = 0; test_val01 = 0x0000; test_val02 = 0x0000; while(1); } void intimia1(void) { test_val01++; } void intimia2(void) { test_val02++; }