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

📄 tone.c

📁 YAMAHA的铃音芯片的测试程序
💻 C
字号:
#include "pccdef.h"
#include "predef.h"
#include "Madevdrv.h"
#include "Machdep.h"

int test_tone(void)
{
	UINT16 base_time;
	UINT8  packet[5];
	UINT8  packet_buf[40];
	UINT8  vo_volume, num=0;
	UINT32 reg_index, pitch;
	UINT8  data, i;
	UINT16 voice_address=0x0400;
	
	
	/* Allocate sequencer */
	base_time = 0x0D80;  /* 4ms */
	packet[0] = (UINT8)(  MA_SEQUENCE       & 0x7F );	/* address */
	packet[1] = (UINT8)( (MA_SEQUENCE >> 7) | 0x80 );
	packet[2] = (UINT8)( (base_time   >> 7) & 0x7F );	/* data */
	packet[3] = (UINT8)(  base_time         & 0x7F );
	packet[4] = (UINT8)(  MA_INT_POINT      | 0x80 );
	
	MaDevDrv_SendDirectPacket( packet, 5 );
	
	data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_SEQUENCE+2), 2 );
	printf_uart2("\nMA_INT_POINT = %x", data);
	
	/* Allocate Timer#1 */
	packet[0] = (UINT8)(  MA_TIMER_1_TIME		& 0x7F );	/* address */
	packet[1] = (UINT8)( (MA_TIMER_1_TIME >> 7) | 0x80 );
	packet[2] = (UINT8)(  100            & 0x7F );	/* time count = 100 */
	/* mode=1(for sequencer) oneshot=0(continous counting) star=1 */
	packet[3] = (UINT8)( 0x5 | 0x80 ); 
	
	MaDevDrv_SendDirectPacket( packet, 4 );
	
	data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_TIMER_1_TIME+1), 2 );
	printf_uart2("\nMA_TIMER1_CTRL = %x", data);
	
	
	reg_index = (UINT32)(MA_FM_VOICE_ADDRESS);
	pitch = 0x1951;
	vo_volume = 127;
	
	packet_buf[num++] = (UINT8)( 0x80 );       /* delta time */
	packet_buf[num++] = (UINT8)(  (UINT16)MA_NOP_2       & 0x7F );	/* reg adrs */
	packet_buf[num++] = (UINT8)( ((UINT16)MA_NOP_2 >> 7) | 0x80 );			
	packet_buf[num++] = (UINT8)(  0x00            | 0x80 );         /* data */
	
	packet_buf[num++] = (UINT8)( 0x80 );	/* delta time */
	/* KeyOn */
	reg_index += 5;
	/*MAKE_ADDRESS_PART( seq_id, num, reg_index )*/
	packet_buf[num++] = (UINT8)(  reg_index       & 0x7F );			
	packet_buf[num++] = (UINT8)( (reg_index >> 7) | 0x80 );						
	/*MAKE_RST( seq_id, num, old_ch )*/
	packet_buf[num++] = (UINT8)( (0x10 + 0) | 0x80 );
	

	/*MAKE_TIMER_PART( seq_id, num, delta_time )*/
    packet_buf[num++] = (UINT8)( 0x80 );						
	/*MAKE_NOP( seq_id, num, (UINT16)MA_NOP_2 )*/
	packet_buf[num++] = (UINT8)(  (UINT16)MA_NOP_2       & 0x7F );			
	packet_buf[num++] = (UINT8)( ((UINT16)MA_NOP_2 >> 7) | 0x80 );			
	packet_buf[num++] = (UINT8)(  0x00            | 0x80 );	


	/*MAKE_TIMER_PART( seq_id, num, delta_time )*/
    packet_buf[num++] = (UINT8)( 0x80 );						
	reg_index -= 5;
	/*MAKE_ADDRESS_PART( seq_id, num, reg_index )*/
	packet_buf[num++] = (UINT8)(  reg_index       & 0x7F );			
	packet_buf[num++] = (UINT8)( (reg_index >> 7) | 0x80 );	
	/*MAKE_KEY_ON( seq_id, num, voice_info.address, vo_volume, pitch, ch )*/
	packet_buf[num++] = (UINT8)( (voice_address >> 7)  & 0x7F );			
	packet_buf[num++] = (UINT8)(  voice_address        & 0x7F );			
	packet_buf[num++] = (UINT8)(  vo_volume       & 0x7C );			
	packet_buf[num++] = (UINT8)( (pitch >> 7)     & 0x7F );			
	packet_buf[num++] = (UINT8)(  pitch           & 0x7F );			
	packet_buf[num++] = (UINT8)( (0x40 + 0)      | 0x80 );	
	
	/*machdep_WriteStatusFlagReg( MA_DELAYED_WRITE_REG ); 
    for(i = 0; i < num ; i++)
	{
		machdep_WriteDataReg( packet_buf[i] );
	}
    machdep_WriteStatusFlagReg( 0x80 );*/
    
    data = machdep_ReadStatusFlagReg();
    printf_uart2("\nStatus Flag = %x", data);
    
    MaDevDrv_SendDelayedPacket( packet_buf, num );
    
    for(i = 0; i < 6 ; i++)
    {
      data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(i), 2 );
      printf_uart2("\nFM_Voice #%d = %x", i, data);
    }  
    
  
    /* start sequencer */
	packet[0] = (UINT8)(  MA_START_SEQ       & 0x7F ); /* address */
	packet[1] = (UINT8)( (MA_START_SEQ >> 7) | 0x80 );
	packet[2] = (UINT8)(  0x81 );                      /* data */
	MaDevDrv_SendDirectPacket( packet, 3 );
	
	data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_START_SEQ), 2 );
	printf_uart2("\nMA_SEQ_START = %x", data);
	
	return 1;  
	
}	

int state_scan(void)
{
    UINT8 data;
    UINT8 packet[3];
    
    
    data = machdep_ReadStatusFlagReg();
    printf_uart2("\nStatus Flag = %x", data);
    
    data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_START_SEQ), 2 );
	printf_uart2("\nMA_SEQ_START = %x", data);
    
    /* start sequencer */
	packet[0] = (UINT8)(  MA_START_SEQ       & 0x7F ); /* address */
	packet[1] = (UINT8)( (MA_START_SEQ >> 7) | 0x80 );
	packet[2] = (UINT8)(  0x81 );                      /* data */
	MaDevDrv_SendDirectPacket( packet, 3 );
    
    data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_START_SEQ), 2 );
	printf_uart2("\nMA_SEQ_START = %x", data);
	
	data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_TIMER_1_TIME+1), 2 );
	printf_uart2("\nMA_TIMER1_CTRL = %x", data);
	
	data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_SEQUENCE+2), 2 );
	printf_uart2("\nMA_INT_POINT = %x", data);
	
    return 1;
}    		 
    	

⌨️ 快捷键说明

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