亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? livemidi.c

?? iar workbrench for scr16c sound
?? C
字號:
/*
 *-----------------------------------------------------------------------------
 *                                                                             
 *               @@@@@@@      *   @@@@@@@@@           *                                     
 *              @       @             @               *                            
 *              @             *       @      ****     *                                 
 *               @@@@@@@      *       @     *    *    *                              
 *        ___---        @     *       @     ******    *                                 
 *  ___---      @       @     *       @     *         *                             
 *   -_          @@@@@@@  _   *       @      ****     *                               
 *     -_                 _ -                                                     
 *       -_          _ -                                                       
 *         -_   _ -        s   e   m   i   c   o   n   d   u   c   t   o   r 
 *           -                                                                    
 *                                                                               
 * (C) Copyright SiTel Semiconductor BV, unpublished work.
 * This computer program includes Confidential, Proprietary Information and
 * is a Trade Secret of SiTel Semiconductor BV.
 * All use, disclosure, and/or reproduction is prohibited unless authorized
 * in writing. All Rights Reserved.
 * This source-code is solely intended as example code. The code may only be 
 * used for study and demo purposes. SiTel Semiconductor can not be held liable 
 * for damages or project-delays caused by bugs in this code.
 *----------------------------------------------------------------------------
********************************************************************************
**
** Project:      Example Midi Player
**
** Description   : Midi player
**
** Limitations   : Ansi-C
**
** Errors        : none
**
** Author        : Jose Mortensen (jmortensen@cfl.rr.com)
**
********************************************************************************
**
** $Author: helsloot $
** $Date: Tue May  2 14:56:40 2006 $
** $Source: /services/syncdata/hazelaar/8500/server_vault/applab/14430/sw/midiplayer_combined/applications/src/livemidi.c.rca $
** $Revision: 1.3 $
** $State: Experimental $
**
*******************************************************************************/

#include "midilib.h"

/*********************************************************************
 *  THE MIDI LIBRARY CONTROL VARS                                    *
 *********************************************************************/

   __no_init gdsp_scp_t      scp_code[128]   @ SHARED_BASE_ADDR;
   __no_init gdsp_mem_t      gdsp_mem   @ "SHARED_RAM";
   __no_init sound_state_t   sound      @ "DATA_RAM";
   __no_init int16           dacout     @ 0xbfe6;  

   __no_init uint16 pre_scale @ 0x8100;
   __no_init uint16 volume @ 0x8102;
   __no_init uint16 assert_code @ 0x8104;
 
   #define SONG_LENGTH  6000
   uint8           song_data[SONG_LENGTH];       
   mtrk_chunk_t    song_track;
   uint32          ticks;
   

   // midi tx rx buffers
   #define UART_BUFFER_SIZE 128
   
   uint8 uart_buffer[UART_BUFFER_SIZE];

   uint8 *  p_uart_rx = uart_buffer;
   uint8 *  p_midi_rx = uart_buffer;


   // Keyboard control
   typedef enum {
      idle = 0,
      play,
      record,
      hold,
      reset,
      bdown = 11,
      click,
      bdown2 = 21,
      double_click,
      } state_t;
      
   int16    dev_state;

   
   
   #define COUTER_SENSIBILITY 20
   #define COUTER_HOLD       400


/*********************************************************************
 *  INITIALIZATION STUFF                                             *
 *********************************************************************/

void chip_init()
{
   __disable_interrupt();

   SET_FREEZE_REG_bit.FRZ_WDOG = 1;              // turn off watchdog
   BAT_CTRL_REG_bit.REG_ON = 1;                  // disable battery control on P1.7
  
   CODEC_MIC_REG = 0x0004;                     // Set MIC powered down
   CODEC_LSR_REG = 0x0892;                       // Loud speaker 
   CODEC_VREF_REG = 0x0014;
   CODEC_ADDA_REG = 0x0000;    // power the ADDA
   CODEC_TONE_REG = 0x0317;

   CLASSD_CTRL_REG = 0x0008;

    // -- CODEC2 Inits ?!?!?
   *((uint16 *)0xFFE230) = 0000;
   *((uint16 *)0xFFE232) = 0012;
   *((uint16 *)0xFFE234) = 0000;
   *((uint16 *)0xFFE236) = 0000;

    // setting 20Mhz to CR16C, 40 Mhz GenDSP
   CLK_CTRL_REG = 0x001a;                        // Switch Xtal as SCLK                
   PLL_DIV_REG = 0x6180;

#ifdef __CODEC_16KHZ__
   PER_DIV_REG = 0x0009;
   CODEC_DIV_REG = 0x0092;                      // 16kHz CODEC
#else
   PER_DIV_REG = 0x0009;
   CODEC_DIV_REG = 0x0089;                      // 8kHz CODEC
#endif

   DSP_ADDR_REG = 0x0000;                        // set scp offset to 0
   DSP_STATUS_REG = 0x0000;                      // Clear DSP status                     
   DSP_CTRL_REG = 0x0000;                        // Power up                           


   ACS3_CTRL_REG = 0x20;                         // maximum access speed to flash                 
   CLK_DIV_REG = 1;                              // CR16C 10 MHz 

   // Interrupt Setting.
   INT0_PRIORITY_REG_bit.DSP_INT_PRIO =  0x0007; // 0 - 7
   DSP_INT_MASK_REG = MIDI_IRQ; 
   RESET_INT_PENDING_REG = 0xFFFF;               // clear all interrupts pending
   __set_PSR_I_bit();
   __enable_interrupt();
}



void enable_uart(void)
{
   __disable_interrupt();
   P0_DIR_REG_bit.P0_0_DIR = 1;              // P0.0 output TX
   P0_DIR_REG_bit.P0_1_DIR = 0;              // P0.1 input RX
   P0_IN_OUT_DATA_REG_bit.P0_1_DATA = 0;     // Pull down at RX pin
   P0_MODE_REG_bit.P0_0_MODE = 1 ;           // UART TX switched to P0.0
   P0_UART_CTRL_REG_bit.BAUDRATE = 0x3;      // Enable UART Baud 115200
   P0_UART_CTRL_REG_bit.UART_TEN = 0x1;      // Enable UART TX
   P0_UART_CTRL_REG_bit.UART_REN = 0x1;      // Enable UART RX
   
   
   INT1_PRIORITY_REG_bit.UART_RI_INT_PRIO = 1;  // Receive priority

   RESET_INT_PENDING_REG = 0xFFFF;           // clear all interrupts pending
   __enable_interrupt();
   
 }


void timer_init(void)
{
/* Timer Setup*/
   
   TIMER1_RELOAD_M_REG = (0x1680>>2); // 50 ms
   TIMER1_RELOAD_N_REG = (0x1680>>2); // 50 ms
   
   
   TIMER_CTRL_REG_bit.CLK_DIV8 = 0; // 
   TIMER_CTRL_REG_bit.CLK_CTRL1 = 1; // 115.2 Khz
   TIMER_CTRL_REG_bit.TIM1_MODE = 1; // timer mode 2
   TIMER_CTRL_REG_bit.TIM1_CTRL = 1; // enable timer 1
   
   INT0_PRIORITY_REG_bit.TIM1_INT_PRIO = 1;                    // 
}

/*********************************************************************
 *  THE MIDI SEQUENCER INTERRUPT  ( Used by the sequencer if enabled)*
 *********************************************************************/


#pragma vector=DSP_INT
__interrupt 
void midi_interrupt(void)
{
   uint16 status;
   status = DSP_STATUS_REG;
   RESET_INT_PENDING_REG_bit.DSP_INT_PEND = 1;
}

/*********************************************************************
 *  THE MIDI SERIAL INTERRUPT                                        *
 *********************************************************************/

#pragma vector=UART_RI_INT
__interrupt
void rx_interrupt (void)
{ 
   __disable_interrupt();
   
   *p_uart_rx = P0_UART_RX_TX_REG;
   
   P0_CLEAR_RX_INT_REG = 1;                        // clear RX reg
   RESET_INT_PENDING_REG_bit.UART_RI_INT_PEND = 1; // reset interrupt


   P0_UART_CTRL_REG_bit.UART_REN = 0x1;            // Enable UART RX
   P0_UART_CTRL_REG_bit.UART_TEN = 0x1;            // Enable UART TX
   P0_UART_RX_TX_REG = *p_uart_rx++;               // Transmit a Byte
   
   if ( p_uart_rx >= uart_buffer + UART_BUFFER_SIZE) {// flip pointer
      p_uart_rx = uart_buffer;
   }
   
   // ??? 
   if (RESET_INT_PENDING_REG_bit.UART_TI_INT_PEND != 1) {
      RESET_INT_PENDING_REG_bit.UART_TI_INT_PEND = 1;
   }
   P0_CLEAR_TX_INT_REG = 1;
   
   // Detect buffer overrun
   if (p_uart_rx == p_midi_rx)   {
      assert_code |= 0x8000;
      dev_state = hold;
   }
   __enable_interrupt();
}   



#pragma vector=TIM1_INT
__interrupt
void timer_interrupt (void)
{
   
   static uint16 led = 0;
   static uint16 counter = 0;
   static uint16 btn_state = idle;

   int16 dev_state_next = dev_state;
   uint16 button;
   P0_DIR_REG_bit.P0_0_DIR = 0;
   button = !P0_IN_OUT_DATA_REG_bit.P0_0_DATA;

   counter ++;
   ticks++;
         
   switch (btn_state) {
      case idle: // idle
         if (button) {
            btn_state = bdown;
            counter = 0;
         }
         break;
      case bdown: // 
         if (!button) {
            btn_state = click;
            counter = 0;
         }
         if (counter > COUTER_HOLD) {
            assert_code |= 2;
            dev_state_next = hold;
         }
         break;
      case click: //record
         if (counter > COUTER_SENSIBILITY) {
         
            if (dev_state == idle) dev_state_next = play;
            if ((dev_state == play) || (dev_state == record)) {
               dev_state_next = idle;
            }
            
            btn_state = idle;
         } else  {
            if (button) {
               btn_state = bdown2;
               counter = 0;
            }
         }
         break;
      case bdown2:
         if (!button) {
            btn_state = double_click;
            counter = 0;
         }
         break;
      case double_click:
         if (counter > COUTER_SENSIBILITY) {
            dev_state_next = record;
            btn_state = idle;
         }     
         break;
   }
   
   dev_state = dev_state_next;
   
   switch (dev_state) {
      case idle: 
         led = 0;
         break;
      case play:
         led = 1;
          break;
      case record:
         led = (counter>>2)&1;
         break;
      case hold:
         led = (counter>>1)&1;
         break;
   }
   
   P0_DIR_REG_bit.P0_3_DIR = 1;
   P0_IN_OUT_DATA_REG_bit.P0_3_DATA = led&1;

   RESET_INT_PENDING_REG_bit.TIM1_INT_PEND = 1;
 
}


/*********************************************************************
 *  THE MAIN LOOP                                                    *
 *********************************************************************/


void record_song()
{
   uint16 len;
   uint32 old_timecode= 0;
   uint32 timecode;
   
   __disable_interrupt();

   
   /* set up midi buffer */
   song_track.length = 0;  // end of track marker
   song_track.pdata = song_data;
   song_track.pos = song_data;
   song_track.time = 0;
   song_track.end = 1;  
   song_track.running_status = 0;


   ticks = 0;
   
   __enable_interrupt();

   while (dev_state == record) {
   
      if (p_midi_rx != p_uart_rx) { // data available
        
         timecode = ticks - old_timecode;
         len = midilib_serial((uint8 *)song_track.pos, timecode, *p_midi_rx++);         
                 
         if (len > 0) { // message stored
            old_timecode = ticks;
         }
         
         if (len > 7) { // message stored
            assert_code |=0x4000;
            dev_state = hold;
         }
         
         song_track.pos += len;
         song_track.length += len;
        
         if (song_track.length > (SONG_LENGTH - 10)) dev_state = idle;
         
         if ( p_midi_rx >= uart_buffer + UART_BUFFER_SIZE) p_midi_rx = uart_buffer;
      }
   }
   *(uint8 *)song_track.pos++ = 0x01;
   *(uint8 *)song_track.pos++ = 0xff;
   *(uint8 *)song_track.pos++ = 0xf2;
   song_track.length += 3;

}

void play_song() 
{
   __disable_interrupt();

   /* set up midi buffer */
   song_track.pdata = song_data;
   song_track.pos = song_data;
   song_track.time = 0;
   song_track.end = 0;
   song_track.running_status = 0;
   
   ticks = 0;

   __enable_interrupt();
   
   while (dev_state == play) {
      sound_cleanup();
      midi_getevent(&song_track, ticks);

      if (p_midi_rx != p_uart_rx) { // data available
         //midilib_serial(NULL, 0, *p_midi_rx++);         
         p_midi_rx++;
         if ( p_midi_rx >= uart_buffer + UART_BUFFER_SIZE) p_midi_rx = uart_buffer;
      }


      if (song_track.end == 1) dev_state = idle;
   }  
}

void my_assert(void)
{
   assert_code |= 0x0001;
   dev_state = hold;
}

int main()
{
   uint16 sample_freq_sh = 5;
   pre_scale = 0x100;
   volume = 0x7fff;
   dev_state = idle;   
   assert_code = 0;   

   // Initialization   
   midilib_init_serial(&gdsp_mem, &sound, scp_code, &dacout, sample_freq_sh);
   midilib_volume(volume, pre_scale);
   midilib_assert_handler(my_assert);
   chip_init();
   enable_uart();
   timer_init();
      

   /* set up song buffer */
   song_track.length = 0;
   song_track.pdata = song_data;
   song_track.pos = song_data;
   song_track.time = 0;
   song_track.end = 1;  
   song_track.running_status = 0;

   
   while (1) {
   
      if (p_midi_rx != p_uart_rx) { // data available
         midilib_serial(NULL, 0, *p_midi_rx++);         
         if ( p_midi_rx >= uart_buffer + UART_BUFFER_SIZE) p_midi_rx = uart_buffer;
      }
      
      if (dev_state == play) {
         __disable_interrupt();
         DSP_CTRL_REG_bit.GDSP_PD = 1;
         midilib_init_serial(&gdsp_mem, &sound, scp_code, &dacout, sample_freq_sh);
         midilib_volume(volume, pre_scale);
         DSP_CTRL_REG_bit.GDSP_PD = 0;
         __enable_interrupt();
         
         play_song();
         __disable_interrupt();
         DSP_CTRL_REG_bit.GDSP_PD = 1;
         midilib_init_serial(&gdsp_mem, &sound, scp_code, &dacout, sample_freq_sh);
         midilib_volume(volume, pre_scale);
         DSP_CTRL_REG_bit.GDSP_PD = 0;
         __enable_interrupt();
      }
      
      if (dev_state == record) {
          __disable_interrupt();
         DSP_CTRL_REG_bit.GDSP_PD = 1;
         midilib_init_serial(&gdsp_mem, &sound, scp_code, &dacout, sample_freq_sh);
         midilib_volume(volume, pre_scale);
         DSP_CTRL_REG_bit.GDSP_PD = 0;
         __enable_interrupt();

        record_song();

         __disable_interrupt();
         DSP_CTRL_REG_bit.GDSP_PD = 1;
         midilib_init_serial(&gdsp_mem, &sound, scp_code, &dacout, sample_freq_sh);
         midilib_volume(volume, pre_scale);
         DSP_CTRL_REG_bit.GDSP_PD = 0;
         __enable_interrupt();
      }
       
    };
}






?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久午夜羞羞影院免费观看| 99国产精品久| 日韩一级精品视频在线观看| 日韩精品视频网| 欧美福利电影网| 美美哒免费高清在线观看视频一区二区| 在线免费观看视频一区| 日韩综合小视频| 亚洲精品一区二区三区蜜桃下载 | 日韩中文字幕不卡| 欧美一卡2卡三卡4卡5免费| 久久精品国产澳门| 久久精品视频免费| 在线精品视频小说1| 亚洲a一区二区| 久久网站最新地址| av在线综合网| 午夜精品成人在线| 国产亚洲婷婷免费| 色八戒一区二区三区| 日本视频免费一区| 国产精品欧美综合在线| 欧美性xxxxxx少妇| 精品亚洲欧美一区| 综合久久一区二区三区| 欧美日韩一本到| 国产乱码精品一区二区三区av | 欧美激情一区二区在线| 欧美性猛交xxxx黑人交| 极品少妇xxxx精品少妇偷拍| 亚洲欧洲日韩女同| 精品国产一区二区三区av性色| 99国产精品久久久久久久久久| 丝袜亚洲另类欧美| 亚洲欧洲日产国码二区| 欧美不卡视频一区| 欧美亚洲一区二区三区四区| 国产一区不卡在线| 日韩福利电影在线| 亚洲三级在线播放| 欧美精品一区二区高清在线观看| 99re视频这里只有精品| 久久99精品国产.久久久久久| 亚洲美女电影在线| 国产农村妇女精品| 日韩一区二区影院| 色又黄又爽网站www久久| 精品一区二区三区不卡| 午夜免费欧美电影| 一区二区三区在线视频免费| 久久免费偷拍视频| 日韩午夜在线影院| 欧美三级韩国三级日本一级| av亚洲产国偷v产偷v自拍| 久久精品理论片| 日韩黄色片在线观看| 亚洲精品国产一区二区三区四区在线| 国产亚洲一区二区在线观看| 在线不卡中文字幕| 欧洲精品一区二区| 99国产精品视频免费观看| 国产成+人+日韩+欧美+亚洲| 美女国产一区二区| 秋霞成人午夜伦在线观看| 午夜视频一区在线观看| 亚洲综合在线观看视频| 亚洲猫色日本管| 国产精品高潮呻吟久久| 久久精品一区二区三区不卡牛牛| 欧美成人性战久久| 欧美不卡123| 精品91自产拍在线观看一区| 日韩欧美电影在线| 欧美电影免费观看高清完整版在线观看 | 2021久久国产精品不只是精品| 欧美日韩国产一级二级| 欧美午夜寂寞影院| 色欲综合视频天天天| 91天堂素人约啪| 91麻豆国产在线观看| 91麻豆免费视频| 91国偷自产一区二区三区成为亚洲经典 | 国产日韩欧美精品一区| 久久综合色之久久综合| 国产亚洲一区二区在线观看| 国产日韩欧美a| 中文av一区二区| 亚洲乱码中文字幕| 一区二区在线观看不卡| 亚洲高清免费观看| 日本不卡一二三| 国产麻豆9l精品三级站| 成人晚上爱看视频| 在线免费不卡电影| 欧美日韩一区在线观看| 9191国产精品| 久久久99久久| 亚洲美女免费在线| 日日夜夜免费精品| 国产99精品视频| 在线免费观看日本欧美| 日韩欧美自拍偷拍| 国产欧美综合在线观看第十页| 亚洲日本乱码在线观看| 亚洲成a人片综合在线| 久久国产视频网| 成a人片亚洲日本久久| 欧美色男人天堂| 久久精品亚洲国产奇米99| 1024成人网色www| 丝袜亚洲另类欧美综合| 国产成人三级在线观看| 欧美伊人久久久久久久久影院| 91麻豆精品91久久久久久清纯| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲欧美怡红院| 精品一区二区三区在线观看国产| 91在线小视频| 欧美一级欧美一级在线播放| 国产精品不卡在线观看| 另类的小说在线视频另类成人小视频在线| 高潮精品一区videoshd| 欧美日韩国产高清一区二区| 欧美激情资源网| 久久福利视频一区二区| 色老汉一区二区三区| 久久日一线二线三线suv| 亚洲一卡二卡三卡四卡无卡久久| 国内成人免费视频| 欧美日韩高清一区二区不卡| 中文字幕欧美日韩一区| 日韩激情视频网站| 欧美午夜精品久久久久久孕妇| 国产亚洲精久久久久久| 青青草伊人久久| 在线观看免费亚洲| 欧美高清一级片在线观看| 日韩精品一级中文字幕精品视频免费观看 | 国产麻豆视频精品| 色国产精品一区在线观看| 精品福利一二区| 一片黄亚洲嫩模| 国产一区欧美一区| 91麻豆精品91久久久久同性| 国产精品久久久久久久蜜臀| 偷拍一区二区三区| 91免费版pro下载短视频| 国产视频一区二区在线| 日韩av高清在线观看| 国产精品夜夜嗨| 欧美日韩一区在线观看| 中文在线资源观看网站视频免费不卡| 亚洲小说欧美激情另类| 久草精品在线观看| 欧美三级在线看| 中文字幕一区二区三区av| 国产一区二区三区高清播放| 欧美色网站导航| 亚洲一区二区高清| 97久久人人超碰| 国产欧美久久久精品影院| 蜜桃av一区二区三区| 日韩三级高清在线| 日韩影院在线观看| 欧美午夜理伦三级在线观看| 久久免费国产精品| 国产91富婆露脸刺激对白| 欧美精品一区视频| 日本中文字幕一区二区视频 | 色婷婷av一区| 亚洲色欲色欲www| 国产99精品视频| 久久综合色综合88| 极品少妇一区二区| 欧美亚洲尤物久久| 一区二区在线看| 欧美曰成人黄网| 一区二区三区成人| 色老头久久综合| 日韩电影在线免费观看| 欧美嫩在线观看| 偷拍一区二区三区四区| 日韩一区二区影院| 看片网站欧美日韩| 日韩一二三区不卡| 奇米色777欧美一区二区| 精品国产乱码久久久久久夜甘婷婷| 视频一区国产视频| 日韩欧美国产三级| 韩国理伦片一区二区三区在线播放| 日韩欧美黄色影院| 韩国女主播成人在线| 国产农村妇女毛片精品久久麻豆| 国产99一区视频免费| 久久久久久久久免费| 色婷婷综合五月| 午夜av电影一区| 日韩欧美国产午夜精品| 成人精品免费网站| 亚洲精品一二三四区|