UMEHOSHI ITA TOP PAGE    COMPUTER SHIEN LAB

UMEHOSHI IT (common.h)

[UMEHOSHI ITA]の制御で使っているIC「PIC32MX270F256B-I/SO」のフラッシュメモリには、テスト用プログラムが書き込まれいています。
このプログラムを「テスト・ウメ・フラッシュ」と呼び、これをを利用したユーザー用のプログラムを 「ウメ・エディットプログラム」と呼ぶことにしています。
ここでは、「テスト・ウメ・フラッシュ」を 「ウメ・エディットプログラム」で利用するためにヘッダファイル common.hを示しています。

common.hのソース


// RAM領域内の各ブロック絶対アドレス
#define _PTR_HANDLERS  0xA0004000 // 置き換え可能なおデフォルト関数やシステム情報用
#define _PTR_RAM_AREA1 0xA0005000 // PROGRAM AREA
#define _PTR_RAM_AREA2 0xA0008000 // DATA AREA
#define _PTR_RAM_AREA3 0xA0009000 // USER INDEX AREA

#define _HANDLES	((void (**)(void) )_PTR_HANDLERS)

#define _MEMO3	((uint32_t *) _PTR_RAM_AREA3)

// 排他制御に使うアクセス中を示すID (アクセス権要求ID)===========================
#define _ID_ACCESS_USBTASK 0x0010 // my_sys.c のMy_APP_Tasks関数内の処理内用排他ID
#define _ID_ACCESS_PWMTASK 0x0020 // PWMのコンパレート割り込み処理内の処理内用排他ID
#define _ID_ACCESS_ADCTASK 0x0040 // ADCの割り込み処理内の処理内用排他ID、
#define _ID_ACCESS_CT_TASK 0x0080 // コアタイマー割り込み処理内の処理内用排他ID
#define _ID_ACCESS_T1_TASK 0x0100 // Timer1の割り込み処理内の処理内用排他ID
#define _ID_ACCESS_T2_TASK 0x0200 // Timer2の割り込み処理内の処理内用排他ID
#define _ID_ACCESS_T3_TASK 0x0400 // Timer3の割り込み処理内の処理内用排他ID
#define _ID_ACCESS_T4_TASK 0x0800 // Timer4の割り込み処理内の処理内用排他ID
#define _ID_ACCESS_T5_TASK 0x1000 // Rimer5の割り込み処理内の処理内用排他ID
#define _ID_ACCESS_UARTASK 0x2000 // UARTの割り込み処理内の処理内用排他ID

// コアタイマー 関連 ============================================================
#define _IDX_CORE_TIMER_FUNC 0 // コアタイマー割込み処理
#define _IDX_INIT_CORE_TIMER 1 // コアタイマー割込み初期化
#define _IDX_CP0_SET_COMPARE 3 // 上記の比較レジスタ設定値用
#define _UM_CP0_SET_COMPARE  (((int *)_PTR_HANDLERS)[_IDX_CP0_SET_COMPARE])
#define _IDX_CORE_TIMER_SUB_FUNC 5 // 上記_core_timer_umeFunc1から呼ばれるサブルーチン

#define _IDX_SWITCH2_STATE 7    // SW2の状態取得
#define _switch2_state()     (((int  (**)(void) )_PTR_HANDLERS)[_IDX_SWITCH2_STATE]())

#define _IDX_THROUGH_MODE 8     // リセット時もスルーモード指定フラグ
#define _UME_THROUGH_MODE (((int *)_PTR_HANDLERS)[_IDX_THROUGH_MODE])

#define _IDX_USB_CDC_RATE 9     // USB CDC の基本ボーレート
#define _UME_USB_CDC_DATE  (((int *)_PTR_HANDLERS)[_IDX_USB_CDC_RATE])

#define _IDX_TIMER_1_FUNC 10    // Timer1の割り込み関数(デフォルトでテンポ切り替え)
#define _IDX_INIT_TIMER_1 11    // Timer1の初期設定関数(デフォルトで0.5ミリ秒毎)

#define _IDX_CORE_WAIT 12       // コアタイマ利用のwait関数
#define _core_wait(t)     (((void  (**)(int) )_PTR_HANDLERS)[_IDX_CORE_WAIT](t))

#define _IDX_TIMER_2_FUNC 20
#define _IDX_INIT_TIMER_2 21
#define _IDX_COMPARE_5_FUNC 22
#define _IDX_COMPARE_1_FUNC 23
#define _IDX_COMPARE_3_FUNC 24
#define _IDX_COMPARE_4_FUNC 25

#define _IDX_TIMER_3_FUNC 30
#define _IDX_INIT_TIMER_3 31
#define _IDX_ADC_1_FUNC 32
#define _IDX_INIT_ADC_1 33

#define _IDX_TIMER_4_FUNC 37
#define _IDX_TIMER_5_FUNC 38
#define _IDX_INIT_TIMER_4_5 39

// PWM 関連 ====================================================================
//CN6(左側)RB2デューティ比用Output Compare Output5 の設定(PWMなどの設定)
#define _IDX_CN6_OC5RS 41
#define _UME_CN6_OC5RS (((int *)_PTR_HANDLERS)[_IDX_CN6_OC5RS])
//CN6(左側)RB3デューティ比用Output Compare Output1 の設定(PWMなどの設定)
#define _IDX_CN6_OC1RS 42
#define _UME_CN6_OC1RS (((int *)_PTR_HANDLERS)[_IDX_CN6_OC1RS])
//CN7(右側)RB13デューティ比用Output Compare Output4 の設定(PWMなどの設定)
#define _IDX_CN7_OC4RS 43
#define _UME_CN7_OC4RS (((int *)_PTR_HANDLERS)[_IDX_CN7_OC4RS])
//CN7(右側)後ろ方向デューティ比用Output Compare Output3 の設定(PWMなどの設定)
#define _IDX_CN7_OC3RS 44
#define _UME_CN7_OC3RS (((int *)_PTR_HANDLERS)[_IDX_CN7_OC3RS])

#define _IDX_INIT_COMPARE 45// PWD上記設定を初期化する処理用
#define _init_compare()   (((void (**)(void) )_PTR_HANDLERS)[_IDX_INIT_COMPARE]())

#define _IDX_SET_PWD_MODE 46 // CN6,CN7 の出力制御(PWMなど)のモード設定
#define _set_pwd_mode(f) (((void (**)(int) )_PTR_HANDLERS)[_IDX_SET_PWD_MODE](f))

// UMEHOSHI ITA HANDLESルーチンのユーザ用初期化 // dummyがセット
#define _IDX_HANDLE_USER_SET_FUNC 48
#define _handle_user_set_func()  (((void (**)(void) )_PTR_HANDLERS)[_IDX_HANDLE_USER_SET_FUNC]())

// UMEHOSHI ITA アプリ用初期ルーチン // dummyがセット
#define _IDX_INIT_SUB_FUNC 50
#define _init_sub_func()  (((void (**)(void) )_PTR_HANDLERS)[_IDX_INIT_SUB_FUNC]())

#define _IDX_CONFIG 51 // エラー処理などの設定
#define _UME_CONFIG (((int *)_PTR_HANDLERS)[_IDX_CONFIG])

// EEPROM操作追加に伴う追加[2023-4]
#define _IDX_NVM_ERASE_PAGE 60 // 不揮発性メモリのページ消去(512byteを0xffにする)
#define _nvm_erase_page(d) (((uint32_t (**)(uint32_t) )_PTR_HANDLERS)[_IDX_NVM_ERASE_PAGE](d))
#define _IDX_NVM_WRITE_WORD 61
#define _nvm_write_word(a,d) (((uint32_t (**)(uint32_t, uint32_t) )_PTR_HANDLERS)[_IDX_NVM_WRITE_WORD](a,d))

// USBからの置き換え可能な受信処理------------------------------------------------
#define _IDX_RECIVE_USB  90
#define _RECIVE_USB_FUNC (((int (**)(uint8_t))_PTR_HANDLERS)[_IDX_RECIVE_USB])

// USBを介した文字列出力操作関連関数----------------------------------------------
#define _IDX_API_REQUEST_ACC_OUTBUFF 101
#define _request_acc_outbuff(d) (((int (**)(uint16_t) )_PTR_HANDLERS)[_IDX_API_REQUEST_ACC_OUTBUFF](d))

#define _IDX_API_RELEASE_ACC_OUTBUFF 102
#define _release_acc_outbuff(d) (((uint16_t (**)(uint16_t) )_PTR_HANDLERS)[_IDX_API_RELEASE_ACC_OUTBUFF](d))

#define _IDX_API_SEND_CHAR  103
#define _send_char(s)  (((void (**)(char) )_PTR_HANDLERS)[_IDX_API_SEND_CHAR](s))

#define _IDX_API_SET_BREAK_BUFFER 104
#define _set_break_buffer() (((void (**)())_PTR_HANDLERS)[_IDX_API_SET_BREAK_BUFFER]())

#define _IDX_API_SEND_STRING  105
#define _send_string(s)  (((void (**)(char *) )_PTR_HANDLERS)[_IDX_API_SEND_STRING](s))

#define _IDX_API_SEND_HEX_LOW  106
#define _send_hex_low(d)  (((void (**)(uint32_t) )_PTR_HANDLERS)[_IDX_API_SEND_HEX_LOW](d))

#define _IDX_API_SEND_HEX_HI  107
#define _send_hex_hi(d)  (((void (**)(uint32_t) )_PTR_HANDLERS)[_IDX_API_SEND_HEX_HI](d))

#define _IDX_API_SEND_DECIMAL  108
#define _send_decimal(d,w)  (((void (**)(int, int) )_PTR_HANDLERS)[_IDX_API_SEND_DECIMAL](d,w))

#define _IDX_API_GET_CAPACITY  109
#define _get_capacity()  (((int (**)())_PTR_HANDLERS)[_IDX_API_GET_CAPACITY]())

#define _IDX_API_SEND_16BYTE  110
#define _send_16byte(d)  (((void (**)(uint32_t) )_PTR_HANDLERS)[_IDX_API_SEND_16BYTE](d))

#define _IDX_SEND_PADDING_UINT  111
#define _send_padding_uint(d,c,w) (((void (**)(int, char, int) )_PTR_HANDLERS)[_IDX_SEND_PADDING_UINT](d,c,w))

#define _IDX_SEND_FLOAT  112
#define _send_float(d, w, p)  (((void (**)(double, int, int) )_PTR_HANDLERS)[_IDX_SEND_FLOAT](d,w,p))

#define _IDX_SEND_EXPONENT  113
#define _send_exponent(d, w, p)  (((void (**)(double, int, int) )_PTR_HANDLERS)[_IDX_SEND_EXPONENT](d,w,p))

#define _IDX_SEND_UME_ID  119
#define _send_ume_id()  (((void (**)() )_PTR_HANDLERS)[_IDX_SEND_UME_ID]())


// BEEP 関連定義-----------------------------------------------------------------
#define _IDX_SET_BEEP_PERIOD 120
#define _set_beep_period(d)  (((void (**)(uint32_t) )_PTR_HANDLERS)[_IDX_SET_BEEP_PERIOD](d))

#define _IDX_SET_BEEP_SOUND_NODE 121
#define _set_beep_sound_node(i,c,s,n)\
   (((void (**)(int , uint8_t ,uint8_t, uint8_t) )_PTR_HANDLERS)[_IDX_SET_BEEP_SOUND_NODE](i,c,s,n))

#define _IDX_SET_SWITCHING_PERIOD 123
#define _set_switching_period(d)  (((void (**)(uint32_t) )_PTR_HANDLERS)[_IDX_SET_SWITCHING_PERIOD](d))

#define _IDX_SET_BEEP_CODE 124
#define _set_beep_code(d) (((void (**)(uint32_t) )_PTR_HANDLERS)[_IDX_SET_BEEP_CODE](d))

#define _IDX_CLEAR_BEEP_CODE 125
#define _clear_beep_code() (((void (**)() )_PTR_HANDLERS)[_IDX_CLEAR_BEEP_CODE]())

#define _IDX_PTR_BEEP_AREA 126 
#define _UM_PTR_BEEP_AREA  (((uint8_t **)_PTR_HANDLERS)[_IDX_PTR_BEEP_AREA])

#define _IDX_PTR_GOTO_BEEP 127
#define _UM_PTR_GOTO_BEEP  (((uint8_t **)_PTR_HANDLERS)[_IDX_PTR_GOTO_BEEP])


// DEBUG 関連定義----------------------------------------------------------------
#define _IDX_DEBUG_COUNT 130
#define _debug_count(n,c,b) (((int (**)(int, int, int) )_PTR_HANDLERS)[_IDX_DEBUG_COUNT](n,c,b))

#define _IDX_DEBUG_HEX4 131
#define _debug_hex4(n,c,b) (((int (**)(int, uint8_t, int) )_PTR_HANDLERS)[_IDX_DEBUG_HEX4](n,c,b))

#define _IDX_DEBUG_HEX8 132
#define _debug_hex8(n,c,b) (((int (**)(int, uint8_t, int) )_PTR_HANDLERS)[_IDX_DEBUG_HEX8](n,c,b))

#define _IDX_DEBUG_HEX16 133
#define _debug_hex16(n,c,b) (((int (**)(int, uint16_t, int) )_PTR_HANDLERS)[_IDX_DEBUG_HEX16](n,c,b))

#define _IDX_DEBUG_HEX32 134
#define _debug_hex32(n,c,b) (((int (**)(int, uint32_t, int) )_PTR_HANDLERS)[_IDX_DEBUG_HEX32](n,c,b))

#define _IDX_DEBUG_POINT 135
#define _debug_point(n,c)  (((int (**)(int, int) )_PTR_HANDLERS)[_IDX_DEBUG_POINT](n,c))

// ADC 関連 --------------------------------------------------------------------
struct ADC_CTRL {
    uint32_t counter_ADC;//USB出力数のカウント
    uint32_t count_end_ADC;//上記カウント目標値(block_size_ADCより設定)
    int loop_flag_ADC;// ループサンプリングで1
    int block_size_ADC;//サンプリングブロック数(1ブロックがADC_BUFF_SIZE)
    int set_sequence_flag;
    int out_channel_bits;    // 1:AN0 or 2:AN1 or 3:(AN0,AN1)
    void (*adc_out_usb)(uint32_t); // ADC USB output function
};
#define ADC_BUFF_SIZE 1024
#define ADC_OUT_NONE 2 // index_adc_out_blockの出力情報なしの定数
struct ADC_BUFF {
    uint16_t adc_buffer0[2][ADC_BUFF_SIZE]; //AN0(CN8)
    uint16_t adc_buffer1[2][ADC_BUFF_SIZE]; //AN1(CN9)
    int index_adc_block_sample; //録音中の添え字 0 or 1
    int index_adc_sample; // 録音位置
    int index_adc_out_block;// USB出力中の添え字 0 or 1 で、出力情報無し時は2がset
    int index_adc_out_pos; // USBの出力対象の添え字
    int adc_buff_data_numb;// 実際のusbで送信するする際のワードサイズ目標値
    struct ADC_CTRL *p_ctrl;
};
#define _IDX_GET_PTR_ADC_BUFF 150
#define _get_ptr_adc_buff()  (((struct ADC_BUFF * (**)() )_PTR_HANDLERS)[_IDX_GET_PTR_ADC_BUFF]())

#define _IDX_ENCODE_ADC_BUFF 151
#define _UME_ENCODE_ADC_BUFF (((int *)_PTR_HANDLERS)[_IDX_ENCODE_ADC_BUFF])

#define _IDX_SET_ADC_EXE 152
#define _set_adc_exe(n,f)  (((int (**)(int, int) )_PTR_HANDLERS)[_IDX_SET_ADC_EXE](n,f))

#define _IDX_SET_ADC_MODE 153
#define _set_adc_mode(c,t)  (((void (**)(int, int) )_PTR_HANDLERS)[_IDX_SET_ADC_MODE](c,t))


// UART1 関連 ------------------------------------------------------------------
#define _IDX_API_REQUEST_ACC_UARTBUFF 160
#define _request_acc_uartbuff(d) (((int (**)(uint16_t) )_PTR_HANDLERS)[_IDX_API_REQUEST_ACC_UARTBUFF](d))

#define _IDX_API_RELEASE_ACC_UARTBUFF 161
#define _release_acc_uartbuff(d) (((uint16_t (**)(uint16_t) )_PTR_HANDLERS)[_IDX_API_RELEASE_ACC_UARTBUFF](d))

#define _IDX_MY_APP_TASKS 162
#define _my_app_tasks() (((void (**)(void) )_PTR_HANDLERS)[_IDX_MY_APP_TASKS]())

#define _IDX_DEF_POLLS_UART 163 //UARTのデフォルトポーリング処理
#define _def_polls_uart() (((void (**)(void) )_PTR_HANDLERS)[_IDX_DEF_POLLS_UART]())

#define _IDX_CMD_POLLS_UART 164
#define _cmd_polls_uart() (((void (**)(void) )_PTR_HANDLERS)[_IDX_CMD_POLLS_UART]())

#define _IDX_ISR_POLLS_UART 165
#define _isr_polls_uart() (((void (**)(void) )_PTR_HANDLERS)[_IDX_ISR_POLLS_UART]())

#define _IDX_INIT_UART1 166
#define _init_uart1()  (((void (**)(void) )_PTR_HANDLERS)[_IDX_INIT_UART1]())

#define _IDX_RECV_UART1 167
#define  _recv_uart1(c) (((int (**)(uint8_t) )_PTR_HANDLERS)[_IDX_RECV_UART1](c))

#define _IDX_SEND_UART1 168
#define  _send_uart1(c) (((int (**)(uint8_t) )_PTR_HANDLERS)[_IDX_SEND_UART1](c))

#define _IDX_GET_UART_CAPACITY  169
#define _get_uart1_capacity()  (((int (**)())_PTR_HANDLERS)[_IDX_GET_UART_CAPACITY]())

#define _IDX_SEND_STR_UART1 170
#define _send_string_to_uart1(s)  (((void (**)(char *) )_PTR_HANDLERS)[_IDX_SEND_STR_UART1](s))