タイマ割り込みで、多分こんなことも

次のように、”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の割り込み関数宣言 */



FPGAVerilogで記述した”スロットマシーン”

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++;
}