Compare commits

...

4 Commits

Author SHA1 Message Date
gudae01 85ddbe4efc merge 1 week ago
gudae 3ed580dc67 add channel 2 weeks ago
gudae 36736cebd4 dipSwitch 2 weeks ago
gudae 2a05c8fa23 dip 수정 중 3 weeks ago
  1. BIN
      DefaultBuild/anaout.obj
  2. BIN
      DefaultBuild/check_pin.obj
  3. BIN
      DefaultBuild/cstart.obj
  4. BIN
      DefaultBuild/delay.obj
  5. BIN
      DefaultBuild/dipSwitch.obj
  6. BIN
      DefaultBuild/gatectrl.obj
  7. BIN
      DefaultBuild/hash_pin.obj
  8. BIN
      DefaultBuild/i2c.obj
  9. BIN
      DefaultBuild/multical.abs
  10. 8
      DefaultBuild/multical.clnk
  11. 561
      DefaultBuild/multical.map
  12. 1379
      DefaultBuild/multical.mot
  13. BIN
      DefaultBuild/owi.obj
  14. BIN
      DefaultBuild/r_cg_adc.obj
  15. BIN
      DefaultBuild/r_cg_adc_user.obj
  16. BIN
      DefaultBuild/r_cg_cgc.obj
  17. BIN
      DefaultBuild/r_cg_cgc_user.obj
  18. BIN
      DefaultBuild/r_cg_port.obj
  19. BIN
      DefaultBuild/r_cg_port_user.obj
  20. BIN
      DefaultBuild/r_cg_serial.obj
  21. BIN
      DefaultBuild/r_cg_serial_user.obj
  22. BIN
      DefaultBuild/r_cg_wdt.obj
  23. BIN
      DefaultBuild/r_cg_wdt_user.obj
  24. BIN
      DefaultBuild/r_main.obj
  25. BIN
      DefaultBuild/r_systeminit.obj
  26. BIN
      DefaultBuild/stkinit.obj
  27. BIN
      DefaultBuild/uart.obj
  28. 290
      QualityReport(multical,DefaultBuild).txt
  29. 4
      common.h
  30. 86
      delay.c
  31. 5
      delay.h
  32. 32
      dipSwitch.c
  33. 32
      dipSwitch.h
  34. 172
      gatectrl.c
  35. 15
      gatectrl.h
  36. 341
      i2c.c
  37. 30
      i2c.h
  38. 1242
      multical.COMPUTER1.mtud
  39. 1174
      multical.guseo.mtud
  40. 4352
      multical.mtpj
  41. 2023
      multical.rcpe
  42. 1045
      multical.temp.mtud
  43. 873
      owi.c
  44. 48
      owi.h
  45. 161
      r_cg_adc.c
  46. 223
      r_cg_adc.h
  47. 64
      r_cg_adc_user.c
  48. 2
      r_cg_cgc.c
  49. 2
      r_cg_cgc.h
  50. 2
      r_cg_cgc_user.c
  51. 2
      r_cg_macrodriver.h
  52. 104
      r_cg_port.c
  53. 265
      r_cg_port.h
  54. 51
      r_cg_port_user.c
  55. 14
      r_cg_serial.c
  56. 10
      r_cg_serial.h
  57. 73
      r_cg_serial_user.c
  58. 2
      r_cg_userdefine.h
  59. 2
      r_cg_wdt.c
  60. 2
      r_cg_wdt.h
  61. 2
      r_cg_wdt_user.c
  62. 645
      r_main.c
  63. 4
      r_systeminit.c
  64. 124
      uart.c
  65. 47
      uart.h

BIN
DefaultBuild/anaout.obj

Binary file not shown.

BIN
DefaultBuild/check_pin.obj

Binary file not shown.

BIN
DefaultBuild/cstart.obj

Binary file not shown.

BIN
DefaultBuild/delay.obj

Binary file not shown.

BIN
DefaultBuild/dipSwitch.obj

Binary file not shown.

BIN
DefaultBuild/gatectrl.obj

Binary file not shown.

BIN
DefaultBuild/hash_pin.obj

Binary file not shown.

BIN
DefaultBuild/i2c.obj

Binary file not shown.

BIN
DefaultBuild/multical.abs

Binary file not shown.

8
DefaultBuild/multical.clnk

@ -8,6 +8,14 @@
-Input=DefaultBuild\r_cg_serial_user.obj
-Input=DefaultBuild\r_cg_wdt.obj
-Input=DefaultBuild\r_cg_wdt_user.obj
-Input=DefaultBuild\r_cg_port.obj
-Input=DefaultBuild\r_cg_port_user.obj
-Input=DefaultBuild\owi.obj
-Input=DefaultBuild\i2c.obj
-Input=DefaultBuild\uart.obj
-Input=DefaultBuild\delay.obj
-Input=DefaultBuild\dipSwitch.obj
-Input=DefaultBuild\gatectrl.obj
-SECURITY_ID=00000000000000000000
-DEVICE=C:\Program Files (x86)\Renesas Electronics\CS+\CC\Device\RL78\Devicefile\DR5F10PPJ.DVF
-DEBug

561
DefaultBuild/multical.map

@ -1,4 +1,4 @@
Renesas Optimizing Linker (W3.07.00 ) 12-Jan-2026 09:55:02
Renesas Optimizing Linker (W3.07.00 ) 21-Jan-2026 20:04:44
*** Options ***
@ -13,6 +13,14 @@ Renesas Optimizing Linker (W3.07.00 ) 12-Jan-2026 09:55:02
-Input=DefaultBuild\r_cg_serial_user.obj
-Input=DefaultBuild\r_cg_wdt.obj
-Input=DefaultBuild\r_cg_wdt_user.obj
-Input=DefaultBuild\r_cg_port.obj
-Input=DefaultBuild\r_cg_port_user.obj
-Input=DefaultBuild\owi.obj
-Input=DefaultBuild\i2c.obj
-Input=DefaultBuild\uart.obj
-Input=DefaultBuild\delay.obj
-Input=DefaultBuild\dipSwitch.obj
-Input=DefaultBuild\gatectrl.obj
-SECURITY_ID=00000000000000000000
-DEVICE=C:\Program Files (x86)\Renesas Electronics\CS+\CC\Device\RL78\Devicefile\DR5F10PPJ.DVF
-DEBug
@ -40,11 +48,9 @@ SECTION START END SIZE ALIGN
.vect
00000000 0000007f 80 0
.constf
00000080 00000080 0 2
00000080 00000093 14 2
.init_array
00000080 00000080 0 2
.data
00000080 00000080 0 2
00000094 00000094 0 2
.sdata
00000080 00000080 0 2
.option_byte
@ -53,18 +59,20 @@ SECTION START END SIZE ALIGN
000000c4 000000cd a 1
.RLIB
000000c4 000000c4 0 1
.SLIB
000000c4 000000c4 0 1
.data
000000ce 000002e5 218 2
.text
000000ce 00000280 1b3 1
000002e6 00000498 1b3 1
.textf
00000281 000006db 45b 1
00000499 000023b6 1f1e 1
.const
00003000 00003000 0 2
00003000 00003385 386 2
.SLIB
00003386 00005c3c 28b7 1
.bss
000faf00 000faf1f 20 2
000faf00 000fb0a5 1a6 2
.dataR
000faf20 000faf20 0 2
000fb0a6 000fb2bd 218 2
.sbss
000ffe20 000ffe20 0 2
.sdataR
@ -72,9 +80,9 @@ SECTION START END SIZE ALIGN
*** Total Section Size ***
RAMDATA SECTION: 00000020 Byte(s)
ROMDATA SECTION: 0000008e Byte(s)
PROGRAM SECTION: 0000060e Byte(s)
RAMDATA SECTION: 000003be Byte(s)
ROMDATA SECTION: 00000640 Byte(s)
PROGRAM SECTION: 00004988 Byte(s)
*** Symbol List ***
@ -86,6 +94,10 @@ SECTION=.vect
FILE=rlink_generates_03
00000000 0000007f 80
SECTION=.constf
FILE=_REL_print
00000080 00000093 14
SECTION=.option_byte
FILE=rlink_generates_01
000000c0 000000c3 4
@ -94,192 +106,521 @@ SECTION=.security_id
FILE=rlink_generates_02
000000c4 000000cd a
SECTION=.data
FILE=DefaultBuild\r_main.obj
000000ce 000002db 20e
FILE=DefaultBuild\owi.obj
000002dc 000002df 4
FILE=DefaultBuild\i2c.obj
000002e0 000002e5 6
SECTION=.text
FILE=DefaultBuild\cstart.obj
000000ce 00000140 73
000002e6 00000358 73
_start
000000ce 0 none ,g *
000002e6 0 none ,g *
_exit
0000013e 0 none ,g *
00000356 0 none ,g *
_atexit
00000140 0 none ,g *
00000358 0 none ,g *
FILE=DefaultBuild\r_cg_serial_user.obj
00000141 0000027e 13e
00000359 00000496 13e
_r_uart0_interrupt_receive@1
00000141 5f func ,l *
00000359 5f func ,l *
_r_uart0_interrupt_send@1
000001a0 2f func ,l *
000003b8 2f func ,l *
_r_uart1_interrupt_receive@1
000001cf 5f func ,l *
000003e7 5f func ,l *
_r_uart1_interrupt_send@1
0000022e 2f func ,l *
00000446 2f func ,l *
_r_iica0_interrupt@1
0000025d 22 func ,l *
00000475 22 func ,l *
FILE=DefaultBuild\r_cg_wdt_user.obj
0000027f 00000280 2
00000497 00000498 2
_r_wdt_interrupt@1
0000027f 2 func ,l *
00000497 2 func ,l *
SECTION=.textf
FILE=DefaultBuild\stkinit.obj
00000281 000002c4 44
00000499 000004dc 44
_stkinit
00000281 0 none ,g *
00000499 0 none ,g *
LSTINIT1
0000028f 0 none ,l *
000004a7 0 none ,l *
LSTINIT2
000002b9 0 none ,l *
000004d1 0 none ,l *
LSTINIT3
000002c4 0 none ,l *
000004dc 0 none ,l *
FILE=DefaultBuild\r_main.obj
000002c5 000002cd 9
000004dd 00000cea 80e
_RS485_Bridge_Push
000004dd 1a func ,g *
_RS485_Bridge_ResetFifo@1
000004f7 7 func ,l *
_RS485_Bridge_DrainToPC@1
000004fe 2b func ,l *
_hex2byte@1
00000529 34 func ,l *
_OUT_PRINT@1
0000055d c func ,l *
_send_v_response@1
00000569 2d func ,l *
_process_cmd@1
00000596 7f func ,l *
_process_one_line@1
00000615 626 func ,l *
_handle_uart_command_line
00000c3b 5b func ,g *
_main
000002c5 5 func ,g *
00000c96 3e func ,g *
_R_MAIN_UserInit
000002ca 4 func ,g *
00000cd4 17 func ,g *
FILE=DefaultBuild\r_systeminit.obj
000002ce 0000030e 41
00000ceb 00000d2f 45
_R_Systeminit
000002ce 3a func ,g *
00000ceb 3e func ,g *
_hdwinit
00000308 7 func ,g *
00000d29 7 func ,g *
FILE=DefaultBuild\r_cg_cgc.obj
0000030f 00000338 2a
00000d30 00000d59 2a
_R_CGC_Create
0000030f 2a func ,g *
00000d30 2a func ,g *
FILE=DefaultBuild\r_cg_cgc_user.obj
00000339 0000033b 3
00000d5a 00000d5c 3
_R_CGC_Get_ResetSource
00000339 3 func ,g *
00000d5a 3 func ,g *
FILE=DefaultBuild\r_cg_serial.obj
0000033c 00000623 2e8
00000d5d 00001040 2e4
_R_SAU0_Create
0000033c 12 func ,g *
00000d5d 10 func ,g *
_R_UART0_Create
0000034e 6e func ,g *
00000d6d 6e func ,g *
_R_UART0_Start
000003bc 26 func ,g *
00000ddb 26 func ,g *
_R_UART0_Stop
000003e2 1e func ,g *
00000e01 1e func ,g *
_R_UART0_Receive
00000400 18 func ,g *
00000e1f 18 func ,g *
_R_UART0_Send
00000418 26 func ,g *
00000e37 26 func ,g *
_R_SAU1_Create
0000043e 12 func ,g *
00000e5d 10 func ,g *
_R_UART1_Create
00000450 6e func ,g *
00000e6d 6e func ,g *
_R_UART1_Start
000004be 26 func ,g *
00000edb 26 func ,g *
_R_UART1_Stop
000004e4 1e func ,g *
00000f01 1e func ,g *
_R_UART1_Receive
00000502 18 func ,g *
00000f1f 18 func ,g *
_R_UART1_Send
0000051a 26 func ,g *
00000f37 26 func ,g *
_R_IICA0_Create
00000540 50 func ,g *
00000f5d 50 func ,g *
_R_IICA0_Stop
00000590 5 func ,g *
00000fad 5 func ,g *
_R_IICA0_StopCondition
00000595 5 func ,g *
00000fb2 5 func ,g *
_R_IICA0_Master_Send
0000059a 43 func ,g *
00000fb7 43 func ,g *
_R_IICA0_Master_Receive
000005dd 47 func ,g *
00000ffa 47 func ,g *
FILE=DefaultBuild\r_cg_serial_user.obj
00000624 000006c7 a4
00001041 00001187 147
_r_uart0_callback_receiveend@1
00000624 1 func ,l *
00001041 71 func ,l *
_r_uart0_callback_softwareoverrun@1
00000625 1 func ,l *
000010b2 1 func ,l *
_r_uart0_callback_sendend@1
00000626 1 func ,l *
000010b3 6 func ,l *
_r_uart0_callback_error@1
00000627 1 func ,l *
000010b9 1 func ,l *
_r_uart1_callback_receiveend@1
00000628 1 func ,l *
000010ba 2f func ,l *
_r_uart1_callback_softwareoverrun@1
00000629 1 func ,l *
000010e9 1 func ,l *
_r_uart1_callback_sendend@1
0000062a 1 func ,l *
000010ea 1 func ,l *
_r_uart1_callback_error@1
0000062b 1 func ,l *
000010eb 1 func ,l *
_iica0_masterhandler@1
0000062c 91 func ,l *
000010ec 91 func ,l *
_r_iica0_callback_master_error@1
000006bd 1 func ,l *
0000117d 1 func ,l *
_r_iica0_callback_master_receiveend@1
000006be 5 func ,l *
0000117e 5 func ,l *
_r_iica0_callback_master_sendend@1
000006c3 5 func ,l *
00001183 5 func ,l *
FILE=DefaultBuild\r_cg_wdt.obj
000006c8 000006db 14
00001188 0000119b 14
_R_WDT_Create
000006c8 10 func ,g *
00001188 10 func ,g *
_R_WDT_Restart
000006d8 4 func ,g *
00001198 4 func ,g *
FILE=DefaultBuild\r_cg_port.obj
0000119c 000011e7 4c
_R_PORT_Create
0000119c 4c func ,g *
FILE=DefaultBuild\owi.obj
000011e8 00001a6e 887
_OWI_EnablePower
000011e8 4 func ,g *
_OWI_DisablePower
000011ec 3 func ,g *
_GPIO_Clear
000011ef b func ,g *
_GPIO_Input
000011fa 7 func ,g *
_GPIO_Read
00001201 9 func ,g *
_OWI_Init
0000120a 18 func ,g *
_OWI_Start
00001222 17 func ,g *
_OWI_Stop
00001239 17 func ,g *
_OWI_SecureStop
00001250 51 func ,g *
_OWI_WriteBit
000012a1 3f func ,g *
_OWI_WriteByte
000012e0 2a func ,g *
_OWI_ReadBit
0000130a 5e func ,g *
_OWI_ReadByte
00001368 32 func ,g *
_OWI_T_ReadBytesAndPrint
0000139a f3 func ,g *
_OWI_A_CommandMode
0000148d 268 func ,g *
_OWI_Diagnostic
000016f5 156 func ,g *
_OWI_disable
0000184b 18 func ,g *
_OWI_T_CommandMode
00001863 60 func ,g *
_OWI_CommandMode
000018c3 4a func ,g *
_OWI_ReadBytesAndPrint
0000190d 162 func ,g *
FILE=DefaultBuild\i2c.obj
00001a6f 00001de3 375
_disable
00001a6f 26 func ,g *
_I2C_EnablePower
00001a95 4 func ,g *
_I2C_DisablePower
00001a99 3 func ,g *
_I2C_Diagnostic
00001a9c 124 func ,g *
_I2C_T_Command_Mode_receiveData
00001bc0 4f func ,g *
_I2C_Command_Mode_receiveData
00001c0f 3e func ,g *
_I2C_Command_Mode_Send
00001c4d 197 func ,g *
FILE=DefaultBuild\uart.obj
00001de4 00001eca e7
_rs485_set_tx
00001de4 b func ,g *
_rs485_init
00001def c func ,g *
_uart_send_string
00001dfb 22 func ,g *
_uart1_send_string
00001e1d 12 func ,g *
_uart_send_hex
00001e2f 50 func ,g *
_uart1_send_hex
00001e7f 4c func ,g *
FILE=DefaultBuild\delay.obj
00001ecb 00001f89 bf
_delay
00001ecb 18 func ,g *
_delay_us
00001ee3 82 func ,g *
_delay_ms
00001f65 25 func ,g *
FILE=DefaultBuild\dipSwitch.obj
00001f8a 00001f9a 11
_DipSwitch_Init
00001f8a 8 func ,g *
_DipSwitch_ReadAddr_0to31
00001f92 9 func ,g *
FILE=DefaultBuild\gatectrl.obj
00001f9b 000023b6 41c
_Gate_SetByNum
00001f9b 3e9 func ,g *
_Cal_Init
00002384 19 func ,g *
_Eol_Init
0000239d 19 func ,g *
_GateCtrl_SelectChannel
000023b6 1 func ,g *
SECTION=.const
FILE=DefaultBuild\r_main.obj
00003000 00003149 14a
FILE=DefaultBuild\owi.obj
0000314a 0000320e c5
FILE=DefaultBuild\i2c.obj
00003210 00003349 13a
FILE=DefaultBuild\gatectrl.obj
0000334a 00003385 3c
SECTION=.SLIB
FILE=_COM_ftoul
00003386 00003391 c
__COM_ftoul
00003386 0 none ,g *
FILE=isdigit
00003392 0000339b a
_isdigit
00003392 0 none ,g *
FILE=memcpy
0000339c 000033ab 10
_memcpy
0000339c 0 none ,g *
FILE=memset
000033ac 000033b9 e
_memset
000033ac 0 none ,g *
FILE=sprintf
000033ba 000034b2 f9
_sprintf
000033ba e1 func ,g *
__REL_sp@1
0000349b 18 func ,l *
FILE=strcpy
000034b3 000034bf d
_strcpy
000034b3 0 none ,g *
FILE=toupper
000034c0 000034cd e
_toupper
000034c0 0 none ,g *
FILE=_REL_ftol
000034ce 00003502 35
__REL_ftol
000034ce 0 none ,g *
FILE=_REL_print
00003503 0000545a 1f58
__REL_print
00003503 1046 func ,g *
__REL_fltprn@1
00004549 941 func ,l *
__REL_henkan1@1
00004e8a 28 func ,l *
__REL_henkan2@1
00004eb2 33 func ,l *
__REL_pri@1
00004ee5 298 func ,l *
__REL_fltgeti@1
0000517d 19d func ,l *
__REL_inmod@1
0000531a 141 func ,l *
FILE=_COM_fdiv
0000545b 00005588 12e
__COM_fdiv
000054ba 0 none ,g *
FILE=_COM_feq
00005589 0000559e 16
__COM_feq
00005589 0 none ,g *
FILE=_COM_fge
0000559f 000055b4 16
__COM_fge
0000559f 0 none ,g *
FILE=_COM_flt
000055b5 000055ca 16
__COM_flt
000055b5 0 none ,g *
FILE=_COM_fmul
000055cb 000056b7 ed
__COM_fmul
00005616 0 none ,g *
FILE=_COM_fne
000056b8 000056c8 11
__COM_fne
000056b8 0 none ,g *
FILE=_COM_ftosl
000056c9 000056d0 8
__COM_ftosl
000056c9 0 none ,g *
FILE=_COM_lshr
000056d1 000056f1 21
__COM_lshr
000056db 0 none ,g *
FILE=_COM_sidiv
000056f2 00005713 22
__COM_sidiv
000056f4 0 none ,g *
FILE=_COM_sirem
00005714 00005733 20
__COM_sirem
00005714 0 none ,g *
FILE=_COM_ulldiv
00005734 0000575d 2a
__COM_ulldiv
00005734 0 none ,g *
FILE=_COM_ullrem
0000575e 0000578e 31
__COM_ullrem
0000575e 0 none ,g *
FILE=_REL_f_inf
0000578f 00005796 8
__REL_f_inf
0000578f 0 none ,g *
FILE=_REL_f_norm
00005797 000057a6 10
__REL_f_norm
00005797 0 none ,g *
FILE=_REL_f_round
000057a7 000057b9 13
__REL_f_round
000057a7 0 none ,g *
FILE=_REL_fcmp
000057ba 000057f1 38
__REL_fcmp
000057ba 0 none ,g *
FILE=_REL_fordered_core
000057f2 0000580d 1c
__REL_fordered_core
000057f2 0 none ,g *
FILE=_REL_lldiv
0000580e 00005a13 206
__REL_lldiv
0000582a 0 none ,g *
FILE=_REL_llrem
00005a14 00005c17 204
__REL_llrem
00005a31 0 none ,g *
FILE=_REL_ltosl
00005c18 00005c3c 25
__REL_ltosl
00005c18 0 none ,g *
SECTION=.bss
FILE=DefaultBuild\r_main.obj
000faf00 000fb001 102
_s_rb_fifo@1
000faf00 100 data ,l *
_out@5@RS485_Bridge_DrainToPC@1
000fb000 2 data ,l *
FILE=DefaultBuild\r_cg_serial.obj
000faf00 000faf1f 20
000fb002 000fb021 20
_gp_uart0_tx_address
000faf00 2 data ,g *
000fb002 2 data ,g *
_g_uart0_tx_count
000faf02 2 data ,g *
000fb004 2 data ,g *
_gp_uart0_rx_address
000faf04 2 data ,g *
000fb006 2 data ,g *
_g_uart0_rx_count
000faf06 2 data ,g *
000fb008 2 data ,g *
_g_uart0_rx_length
000faf08 2 data ,g *
000fb00a 2 data ,g *
_gp_uart1_tx_address
000faf0a 2 data ,g *
000fb00c 2 data ,g *
_g_uart1_tx_count
000faf0c 2 data ,g *
000fb00e 2 data ,g *
_gp_uart1_rx_address
000faf0e 2 data ,g *
000fb010 2 data ,g *
_g_uart1_rx_count
000faf10 2 data ,g *
000fb012 2 data ,g *
_g_uart1_rx_length
000faf12 2 data ,g *
000fb014 2 data ,g *
_g_iica0_master_status_flag
000faf14 1 data ,g *
000fb016 1 data ,g *
_g_iica0_slave_status_flag
000faf15 1 data ,g *
000fb017 1 data ,g *
_gp_iica0_rx_address
000faf16 2 data ,g *
000fb018 2 data ,g *
_g_iica0_rx_len
000faf18 2 data ,g *
000fb01a 2 data ,g *
_g_iica0_rx_cnt
000faf1a 2 data ,g *
000fb01c 2 data ,g *
_gp_iica0_tx_address
000faf1c 2 data ,g *
000fb01e 2 data ,g *
_g_iica0_tx_cnt
000faf1e 2 data ,g *
000fb020 2 data ,g *
FILE=sprintf
000fb022 000fb025 4
__REL_pointer@1
000fb022 4 data ,l *
FILE=_REL_print
000fb026 000fb0a5 80
_qt@1@_REL_inmod@1
000fb026 80 data ,l *
SECTION=.dataR
FILE=DefaultBuild\r_main.obj
000fb0a6 000fb2b3 20e
_uart_rx_done
000fb0a6 1 data ,g *
_uart_rx_index
000fb0a7 1 data ,g *
_uart_rx_buffer
000fb0a8 100 data ,g *
_uart_rx_length
000fb1a8 2 data ,g *
_rs485_rx_done
000fb1aa 1 data ,g *
_rs485_rx_index
000fb1ab 1 data ,g *
_rs485_rx_buffer
000fb1ac 100 data ,g *
_rs485_rx_length
000fb2ac 2 data ,g *
_g_rs485_bridge_active
000fb2ae 1 data ,g *
_g_rs485_bridge_done
000fb2af 1 data ,g *
_g_fixed_addr
000fb2b0 1 data ,g *
_s_rb_head@2
000fb2b1 1 data ,l *
_s_rb_tail@3
000fb2b2 1 data ,l *
_s_prefix_mode@4
000fb2b3 1 data ,l *
FILE=DefaultBuild\owi.obj
000fb2b4 000fb2b7 4
_bit_period_us@1
000fb2b4 4 data ,l *
FILE=DefaultBuild\i2c.obj
000fb2b8 000fb2bd 6
_g_i2c_last_command
000fb2b8 3 data ,g *
_g_i2c_command_valid
000fb2bb 1 data ,g *
_dis@1@disable
000fb2bc 2 data ,l *
Absolute value symbols
FILE=DefaultBuild\gatectrl.obj
@$IMM_28
00000028 0 none ,l *
FILE=rlink_generates_04
__s.text
000000ce 0 none ,g *
000002e6 0 none ,g *
__e.text
00000281 0 none ,g *
00000499 0 none ,g *
__s.textf
00000281 0 none ,g *
00000499 0 none ,g *
__e.textf
000006dc 0 none ,g *
000023b7 0 none ,g *
__s.const
00003000 0 none ,g *
__e.const
00003000 0 none ,g *
00003386 0 none ,g *
__s.constf
00000080 0 none ,g *
__e.constf
00000080 0 none ,g *
00000094 0 none ,g *
__s.data
00000080 0 none ,g *
000000ce 0 none ,g *
__e.data
00000080 0 none ,g *
000002e6 0 none ,g *
__s.sdata
00000080 0 none ,g *
__e.sdata
@ -287,31 +628,31 @@ FILE=rlink_generates_04
__s.bss
000faf00 0 none ,g *
__e.bss
000faf20 0 none ,g *
000fb0a6 0 none ,g *
__s.sbss
000ffe20 0 none ,g *
__e.sbss
000ffe20 0 none ,g *
__s.dataR
000faf20 0 none ,g *
000fb0a6 0 none ,g *
__e.dataR
000faf20 0 none ,g *
000fb2be 0 none ,g *
__s.sdataR
000ffe20 0 none ,g *
__e.sdataR
000ffe20 0 none ,g *
__s.init_array
00000080 0 none ,g *
00000094 0 none ,g *
__e.init_array
00000080 0 none ,g *
00000094 0 none ,g *
__s.RLIB
000000c4 0 none ,g *
__e.RLIB
000000c4 0 none ,g *
__s.SLIB
000000c4 0 none ,g *
00003386 0 none ,g *
__e.SLIB
000000c4 0 none ,g *
00005c3d 0 none ,g *
__s.option_byte
000000c0 0 none ,g *
__e.option_byte
@ -331,7 +672,7 @@ FILE=rlink_generates_04
__STACK_ADDR_START
000ffe20 0 none ,g *
__STACK_ADDR_END
000faf20 0 none ,g *
000fb2be 0 none ,g *
*** Unfilled Areas ***

1379
DefaultBuild/multical.mot

File diff suppressed because it is too large

BIN
DefaultBuild/owi.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_adc.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_adc_user.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_cgc.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_cgc_user.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_port.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_port_user.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_serial.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_serial_user.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_wdt.obj

Binary file not shown.

BIN
DefaultBuild/r_cg_wdt_user.obj

Binary file not shown.

BIN
DefaultBuild/r_main.obj

Binary file not shown.

BIN
DefaultBuild/r_systeminit.obj

Binary file not shown.

BIN
DefaultBuild/stkinit.obj

Binary file not shown.

BIN
DefaultBuild/uart.obj

Binary file not shown.

290
QualityReport(multical,DefaultBuild).txt

@ -0,0 +1,290 @@
QualityReport
2026년 1월 21일 수요일 오후 8:04:44
------ Start build(multical, DefaultBuild) ------
C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.15.00\Bin\ccrl.exe r_main.c -cpu=S3 -o DefaultBuild\r_main.obj "-dev=C:\Program Files (x86)\Renesas Electronics\CS+\CC\Device\RL78\Devicefile\DR5F10PPJ.DVF" -g -g_line -I "..\..\Documents\카카오톡 받은 파일\IDH1.1\IDH1.1" -I ..\IDH1.1 -I . -c -msg_lang=english
W0511106:The folder "..\IDH1.1" specified by the "-I" option is not found.
W0511186:The evaluation period for the option "-Odefault" of CC-RL V1 is valid for the remaining 52 days. After that, it will be implicitly changed to "-Olite". Please consider purchasing the product to continue using "-Odefault".
owi.h(47):W0523076:Function declarations should have prototype
i2c.h(8):W0520047:Incompatible redefinition of macro "RAM_BYTES" (declared at line 10 of "uart.h")
C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.15.00\inc\stdint.h(18):W0520301:Typedef name has already been declared (with same type)
C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.15.00\inc\stdint.h(19):W0520301:Typedef name has already been declared (with same type)
C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.15.00\inc\stdint.h(20):W0520301:Typedef name has already been declared (with same type)
C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.15.00\inc\stdint.h(25):W0520301:Typedef name has already been declared (with same type)
C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.15.00\inc\stdint.h(26):W0520301:Typedef name has already been declared (with same type)
C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.15.00\inc\stdint.h(27):W0520301:Typedef name has already been declared (with same type)
r_main.c(316):W0520172:External/internal linkage conflict with previous declaration
C:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.15.00\Bin\rlink.exe -subcommand=DefaultBuild\multical.clnk
W0561018:The evaluation period of CC-RL V1 is valid for the remaining 52 days. After that, functional limit will be applied. Please consider purchasing the product.
W0561018:The evaluation period of CC-RL V1 is valid for the remaining 52 days. After that, functional limit will be applied. Please consider purchasing the product.
Renesas Optimizing Linker Completed
------ Build ended(Error:0, Warning:13)(multical, DefaultBuild) ------
--- CommandFile 1 ---
DefaultBuild\multical.clnk :
-Input=DefaultBuild\cstart.obj
-Input=DefaultBuild\stkinit.obj
-Input=DefaultBuild\r_main.obj
-Input=DefaultBuild\r_systeminit.obj
-Input=DefaultBuild\r_cg_cgc.obj
-Input=DefaultBuild\r_cg_cgc_user.obj
-Input=DefaultBuild\r_cg_serial.obj
-Input=DefaultBuild\r_cg_serial_user.obj
-Input=DefaultBuild\r_cg_wdt.obj
-Input=DefaultBuild\r_cg_wdt_user.obj
-Input=DefaultBuild\r_cg_port.obj
-Input=DefaultBuild\r_cg_port_user.obj
-Input=DefaultBuild\owi.obj
-Input=DefaultBuild\i2c.obj
-Input=DefaultBuild\uart.obj
-Input=DefaultBuild\delay.obj
-Input=DefaultBuild\dipSwitch.obj
-Input=DefaultBuild\gatectrl.obj
-SECURITY_ID=00000000000000000000
-DEVICE=C:\Program Files (x86)\Renesas Electronics\CS+\CC\Device\RL78\Devicefile\DR5F10PPJ.DVF
-DEBug
-NOCOmpress
-NOOPtimize
-OUtput=DefaultBuild\multical.abs
-OCDBG=04
-USER_OPT_BYTE=FFFFF8
-LISt=DefaultBuild\multical.map
-SHow=SYmbol,Total_size
-AUTO_SECTION_LAYOUT
-ROm=.data=.dataR
-ROm=.sdata=.sdataR
-NOMessage
-MEMory=High
-NOLOgo
-LIBrary=DefaultBuild\multical.lib
-end
-Input=DefaultBuild\multical.abs
-DEVICE=C:\Program Files (x86)\Renesas Electronics\CS+\CC\Device\RL78\Devicefile\DR5F10PPJ.DVF
-OUtput=DefaultBuild\multical.mot
-FOrm=Stype
-NOMessage
-exit
--- SHA1 hash value of output files ---
C:\Users\guseo\Desktop\Amosense_Firmware 최종\DefaultBuild\multical.abs: 23ea96fd6401573919b64b35b3f66cbe0d04daf4
C:\Users\guseo\Desktop\Amosense_Firmware 최종\DefaultBuild\multical.mot: ca40aa63387b2dce93016b86bcf6746cbc99d2e3
--- System Information ---
*OS Version
Microsoft Windows 11 Home (-, 10.0.26200, WOW64)
*Language
한국어(대한민국)
*.NET Framework Version
Microsoft .NET Framework 4 [.NET 4.8 or later] (533509)
*WebView2 Version
144.0.3719.82
--- Application Information ---
*Product Name
CS+ for CC
*Package Version
V8.13.00 [05 Dec 2024]
*Version
V9.13.00.05 [12 Nov 2024]
*Assembly Version
3.12.10.1
*Product License
*Execution Place
C:\Program Files (x86)\Renesas Electronics\CS+\CC
*Memory Usage
*Private Working Set
373 MB
*Number of GDI Objects
2518
*Number of USER Objects
1509
*Opened Files
11 editors, 11 files, 87 KB
--- Build Tool Plug-in Information ---
RH850 Build tool CC-RH Plug-in
*Version
V8.09.00.00 [07 Oct 2022]
*Assembly Version
1.1.10.12
*DLL File Name
BuildToolCCRH.dll
RL78 Build tool CC-RL Plug-in
*Version
V8.11.00.00 [29 Sep 2023]
*Assembly Version
1.0.0.0
*DLL File Name
BuildToolCCRL.dll
RX Build tool CC-RX Plug-in
*Version
V8.09.00.00 [07 Oct 2022]
*Assembly Version
3.12.10.1
*DLL File Name
BuildToolCCRX.dll
RH850 Build tool GHS CCRH850 Plug-in
*Version
V1.10.00.01 [25 Sep 2024]
*Assembly Version
1.0.0.0
*DLL File Name
BuildToolGHSCCRH850.dll
--- Debug Tool Plug-in Information ---
Debugger Collection Plug-in
*Version
V8.13.00.04 [26 Nov 2024]
*Assembly Version
2.12.10.1
*DLL File Name
DebugToolCollection.dll
--- Other Plug-in Information ---
Code Generator Plug-in for RH850
*Version
V1.02.02.05 [25 May 2018]
*Assembly Version
1.0.0.0
*DLL File Name
CodeGeneratorRH850.dll
Code Generator Plug-in
*Version
V4.08.06.01 [28 Oct 2022]
*Assembly Version
3.0.0.0
*DLL File Name
CodePart.dll
Code Generator/PinView Plug-in
*Version
V2.10.07.02 [08 Nov 2021]
*Assembly Version
1.0.0.0
*DLL File Name
CodePart2.dll
Debug Console Plug-in
*Version
V8.09.00.03 [24 Nov 2022]
*Assembly Version
8.9.0.0
*DLL File Name
DebugConsole.dll
Quick and Effective tool solution - QE
*Version
V9.12.00.01 [08 Apr 2024]
*Assembly Version
1.15.10.16
*DLL File Name
InCarTools.dll
Pin Configurator Plug-in
*Version
V1.54.01.01 [31 Jul 2014]
*Assembly Version
1.6.10.23
*DLL File Name
PinConfig.dll
Program Analyzer Plug-in
*Version
V4.13.00.03 [24 May 2023]
*Assembly Version
3.12.11.9
*DLL File Name
ProgramAnalyzer.dll
IronPython Console Plug-in
*Version
V1.49.00.02 [08 Nov 2024]
*Assembly Version
1.6.10.23
*DLL File Name
PythonConsole.dll
Editor plug-in DLL
*Version
V1.20.00.03 [20 May 2024]
*Assembly Version
1.1.0.0
*DLL File Name
SEditor.dll
Stack Usage Tracer
*Version
V1.05.00.02 [30 Jul 2014]
*Assembly Version
1.30.11.15
*DLL File Name
Stk.dll
Update Manager Plug-in
*Version
V2.03.00.02 [29 Oct 2018]
*Assembly Version
1.13.6.20
*DLL File Name
Update.dll
Debug Tool Common Interface
*Version
V8.13.00.04 [26 Nov 2024]
*Assembly Version
3.12.10.1
*DLL File Name
CommonDebuggerInterface.dll
Device Information Common Interface
*Version
V9.13.00.02 [03 Oct 2024]
*Assembly Version
3.0.0.0
*DLL File Name
DeviceInformation.dll
--- Main Project Information ---
C:\Users\guseo\Desktop\Amosense_Firmware 최종\multical.mtpj
Microcontroller Information
*R5F10PPJ
*File Name: Version
RL78_Productlist.xml: V8.130000
R5F10PPJ_common.xml: V1.13.00.XX.02
DR5F10PPJ.DVF: V1.11
f14_ppx.ti: V1.02
-: -
Build Tool Information
*CC-RL
* Version of plug-in(*.dll)
V8.13.00.02 [09 Oct 2024]
* The Version of the Compiler Package
V1.15.00
* The version of SMS Assembler
V1.00.00.01 [29 May 2020]
* The version of GREEN_DSP Structured Assembler
V1.05.00
Debug Tool Information
*RL78 Simulator
Debugger Library V8.13.00.04 [26 Nov 2024]
Other Tool Information
*None
*None
*None
*Pin Configurator
*Program Analyzer
*Version
V4.13.00.03 [24 May 2023]
*Code Generator
Other Information
*RL78/F14 Code Library
*Version
V2.03.07.02 [08 Nov 2021]
*Description
Code library for RL78/F14 code generation plugin.

4
common.h

@ -0,0 +1,4 @@
#include "delay.h"
#include "uart.h"
#include "owi.h"
#include "i2c.h"

86
delay.c

@ -0,0 +1,86 @@
#include "delay.h"
/**
* : delay
* : (delay)
*
* :
* - d : .
*
* :
* - while(d--) CPU를
* -
* - CPU
*
* :
* - CPU
* -
*/
void delay(long d){
while(d--);
}
/**
* : delay_us
* : (us) (delay)
*
* :
* - us : ( )
*
* :
* 1. us count
* - us <= 150 : count = (us * 100 + 50) / 100
* - us > 150 : count = (us * 106 + 50) / 100
* - +50
* 2. for count만큼 __nop()
* - __nop() "No Operation" , CPU
* 3.
*
* :
* - CPU
* -
*/
void delay_us(volatile uint32_t us)
{
volatile uint32_t i;
volatile uint32_t count;
if (us <= 150) {
count = (us * 100 + 50) / 100; // 소수점 올림 효과를 위해 +50 추가
} else {
count = (us * 106 + 50) / 100;
}
for (i = 0; i < count; i++) {
__nop();
}
}
/**
* : delay_ms
* : (ms) (delay)
*
* :
* - ms : ( )
*
* :
* 1. for (i) ms만큼
* 2. for (j) 0~799
* - 800 CPU
* - CPU
* 3.
*
* :
* - (CPU , )
* -
* - delay_ms와 delay_us를
*/
void delay_ms(unsigned int ms)
{
volatile unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 800; j++); // 내부 루프 조정 필요 (클럭에 따라 조정)
}

5
delay.h

@ -0,0 +1,5 @@
#include "r_cg_macrodriver.h"
void delay(long d);
void delay_ms(unsigned int ms);
void delay_us(volatile uint32_t us);

32
dipSwitch.c

@ -0,0 +1,32 @@
#include "dipSwitch.h"
/*
* :
* ADD_1..ADD_5 = P8.1..P8.5
* Pull-up to VCC5, DIP ON -> GND(LOW) => Active-Low
*/
#define DIP_PORT P8
#define DIP_PM PM8
#define DIP_MASK (0x3Eu) // b0011_1110 = P8.1~P8.5
#define DIP_SHIFT (1u) // P8.1이 bit0로 오도록
void DipSwitch_Init(void)
{
// 입력 설정: PM bit=1 => input
DIP_PM |= DIP_MASK;
}
uint8_t DipSwitch_ReadAddr_0to31(void)
{
uint8_t raw = (uint8_t)(DIP_PORT & DIP_MASK);
// Active-Low이므로 반전 후, 마스크 적용
uint8_t v = (uint8_t)((~raw) & DIP_MASK);
// P8.1~P8.5 -> bit0~bit4
v = (uint8_t)(v >> DIP_SHIFT);
return (uint8_t)(v & 0x1Fu); // 0~31
}

32
dipSwitch.h

@ -0,0 +1,32 @@
#ifndef DIPSWITCH_H
#define DIPSWITCH_H
#include "r_cg_macrodriver.h"
#include "r_cg_port.h" // P8, PM8 사용
#ifdef __cplusplus
extern "C" {
#endif
/**
* DIP Switch ( )
*/
void DipSwitch_Init(void);
/**
* DIP Switch(5bit) (1~32)
* - : Pull-up, DIP ON -> GND (Active-Low)
* - : P8.1~P8.5 (ADD_1~ADD_5)
*/
/**
* () : DIP 5bit(0~31)
* - ADD_1이 LSB
*/
uint8_t DipSwitch_ReadAddr_0to31(void);
#ifdef __cplusplus
}
#endif
#endif /* DIPSWITCH_H */

172
gatectrl.c

@ -0,0 +1,172 @@
#include "gatectrl.h"
static uint8_t s_ch = 1;
#define PORT_BIT_SETCLR(PORT, MASK, ON) \
do { \
if (ON) { (PORT) |= (uint8_t)(MASK); } \
else { (PORT) &= (uint8_t)~(MASK); } \
} while (0)
void Gate_SetByNum(uint8_t ch, uint8_t hash_on, uint8_t anaout_on, uint8_t check_on)
{
switch (ch)
{
case 1: /* HASH P15.3, ANAOUT P6.4, CHECK P15.4 */
PORT_BIT_SETCLR(P15, 0x08, hash_on); // P15.3
PORT_BIT_SETCLR(P6, 0x10, anaout_on); // P6.4
PORT_BIT_SETCLR(P15, 0x10, check_on); // P15.4
break;
case 2: /* P15.2, P6.5, P15.5 */
PORT_BIT_SETCLR(P15, 0x04, hash_on); // P15.2
PORT_BIT_SETCLR(P6, 0x20, anaout_on); // P6.5
PORT_BIT_SETCLR(P15, 0x20, check_on); // P15.5
break;
case 3: /* P15.1, P6.6, P0.0 */
PORT_BIT_SETCLR(P15, 0x02, hash_on); // P15.1
PORT_BIT_SETCLR(P6, 0x40, anaout_on); // P6.6
PORT_BIT_SETCLR(P0, 0x01, check_on); // P0.0
break;
case 4: /* P15.0, P6.7, P15.6 */
PORT_BIT_SETCLR(P15, 0x01, hash_on); // P15.0
PORT_BIT_SETCLR(P6, 0x80, anaout_on); // P6.7
PORT_BIT_SETCLR(P15, 0x40, check_on); // P15.6
break;
case 5: /* P12.0, P4.4, P3.0 */
PORT_BIT_SETCLR(P12, 0x01, hash_on); // P12.0
PORT_BIT_SETCLR(P4, 0x10, anaout_on); // P4.4
PORT_BIT_SETCLR(P3, 0x01, check_on); // P3.0
break;
case 6: /* P12.5, P4.3, P3.2 */
PORT_BIT_SETCLR(P12, 0x20, hash_on); // P12.5
PORT_BIT_SETCLR(P4, 0x08, anaout_on); // P4.3
PORT_BIT_SETCLR(P3, 0x04, check_on); // P3.2
break;
case 7: /* P0.1, P4.2, P0.3 */
PORT_BIT_SETCLR(P0, 0x02, hash_on); // P0.1
PORT_BIT_SETCLR(P4, 0x04, anaout_on); // P4.2
PORT_BIT_SETCLR(P0, 0x08, check_on); // P0.3
break;
case 8: /* P12.6, P4.1, P7.0 */
PORT_BIT_SETCLR(P12, 0x40, hash_on); // P12.6
PORT_BIT_SETCLR(P4, 0x02, anaout_on); // P4.1
PORT_BIT_SETCLR(P7, 0x01, check_on); // P7.0
break;
case 9: /* P12.7, P5.0, P7.1 */
PORT_BIT_SETCLR(P12, 0x80, hash_on); // P12.7
PORT_BIT_SETCLR(P5, 0x01, anaout_on); // P5.0
PORT_BIT_SETCLR(P7, 0x02, check_on); // P7.1
break;
case 10: /* P0.2, P5.1, P10.4 */
PORT_BIT_SETCLR(P0, 0x04, hash_on); // P0.2
PORT_BIT_SETCLR(P5, 0x02, anaout_on); // P5.1
PORT_BIT_SETCLR(P10, 0x10, check_on); // P10.4
break;
case 11: /* P10.3, P5.2, P10.5 */
PORT_BIT_SETCLR(P10, 0x08, hash_on); // P10.3
PORT_BIT_SETCLR(P5, 0x04, anaout_on); // P5.2
PORT_BIT_SETCLR(P10, 0x20, check_on); // P10.5
break;
case 12: /* P10.2, P6.0, P10.6 */
PORT_BIT_SETCLR(P10, 0x04, hash_on); // P10.2
PORT_BIT_SETCLR(P6, 0x01, anaout_on); // P6.0
PORT_BIT_SETCLR(P10, 0x40, check_on); // P10.6
break;
case 13: /* P10.1, P6.1, P10.7 */
PORT_BIT_SETCLR(P10, 0x02, hash_on); // P10.1
PORT_BIT_SETCLR(P6, 0x02, anaout_on); // P6.1
PORT_BIT_SETCLR(P10, 0x80, check_on); // P10.7
break;
case 14: /* P10.0, P7.2, P5.7 */
PORT_BIT_SETCLR(P10, 0x01, hash_on); // P10.0
PORT_BIT_SETCLR(P7, 0x04, anaout_on); // P7.2
PORT_BIT_SETCLR(P5, 0x80, check_on); // P5.7
break;
case 15: /* P9.7, P7.3, P5.6 */
PORT_BIT_SETCLR(P9, 0x80, hash_on); // P9.7
PORT_BIT_SETCLR(P7, 0x08, anaout_on); // P7.3
PORT_BIT_SETCLR(P5, 0x40, check_on); // P5.6
break;
case 16: /* P9.6, P7.5, P5.5 */
PORT_BIT_SETCLR(P9, 0x40, hash_on); // P9.6
PORT_BIT_SETCLR(P7, 0x20, anaout_on); // P7.5
PORT_BIT_SETCLR(P5, 0x20, check_on); // P5.5
break;
case 17: /* P9.5, P7.4, P5.4 */
PORT_BIT_SETCLR(P9, 0x20, hash_on); // P9.5
PORT_BIT_SETCLR(P7, 0x10, anaout_on); // P7.4
PORT_BIT_SETCLR(P5, 0x10, check_on); // P5.4
break;
case 18: /* P9.4, P7.6, P1.0 */
PORT_BIT_SETCLR(P9, 0x10, hash_on); // P9.4
PORT_BIT_SETCLR(P7, 0x40, anaout_on); // P7.6
PORT_BIT_SETCLR(P1, 0x01, check_on); // P1.0
break;
case 19: /* P9.3, P7.7, P1.3 */
PORT_BIT_SETCLR(P9, 0x08, hash_on); // P9.3
PORT_BIT_SETCLR(P7, 0x80, anaout_on); // P7.7
PORT_BIT_SETCLR(P1, 0x08, check_on); // P1.3
break;
case 20: /* P9.2, P13.0, P1.4 */
PORT_BIT_SETCLR(P9, 0x04, hash_on); // P9.2
PORT_BIT_SETCLR(P13, 0x01, anaout_on); // P13.0
PORT_BIT_SETCLR(P1, 0x10, check_on); // P1.4
break;
default:
break;
}
}
void Cal_Init(void)
{
uint8_t i;
// P4.7 = 0, P15.7 = 0 (다른 비트 보존!)
PORT_BIT_SETCLR(P4, 0x80, 0);
PORT_BIT_SETCLR(P15, 0x80, 0);
for (i = 1; i <= 20; i++) {
Gate_SetByNum(i, 0, 0, 1); // hash=0, anaout=0, check=1
}
}
void Eol_Init(void)
{
uint8_t i;
// P4.7 = 1, P15.7 = 0 (다른 비트 보존!)
PORT_BIT_SETCLR(P4, 0x80, 1);
PORT_BIT_SETCLR(P15, 0x80, 0);
for (i = 1; i <= 20; i++) {
Gate_SetByNum(i, 0, 0, 1); // hash=0, anaout=0, check=1
}
}
void GateCtrl_SelectChannel(uint8_t ch)
{
if (ch < 1 || ch > 20) return;
s_ch = ch;
}

15
gatectrl.h

@ -0,0 +1,15 @@
#ifndef GATECTRL_H
#define GATECTRL_H
#include "r_cg_macrodriver.h"
#include "r_cg_port.h"
#include <stdint.h>
void Gate_SetByNum(uint8_t ch, uint8_t hash_on, uint8_t anaout_on, uint8_t check_on);
void Cal_Init(void);
void Eol_Init(void);
void GateCtrl_SelectChannel(uint8_t ch);
#endif

341
i2c.c

@ -0,0 +1,341 @@
#include "i2c.h"
#include "delay.h"
#include "uart.h"
#include <string.h>
uint8_t g_i2c_last_command[3] = {0};
uint8_t g_i2c_command_valid = 0;
/**
* : disable
* : I2C (disable)
*
* :
*
* : (void)
*
* :
* 1)
* - dis {0x01, 0x02}
*
* 2) I2C
* - R_IICA0_Master_Send()
* -
* - UART로 "I2C Send Failed"
*
* :
* - SLAVE_ADDR는 I2C
* - sizeof(dis)
* - 100ms
*/
void disable(void){
static uint8_t dis[] = {0x01, 0x02};
//static uint8_t tx[] = {0xT0, 0x00, 0x00};
// I2C 마스터 송신
if (R_IICA0_Master_Send(SLAVE_ADDR << 1, dis, sizeof(dis), 100) != MD_OK)
{
HOST_PRINT("I2C Send Failed\r\n");
return;
}
}
/**
* : I2C_EnablePower
* : I2C .
*
* :
*
* : (void)
*
* :
* 1) P7 HIGH
* - _02_Pn1_OUTPUT_1 : P7 1 HIGH
*
* :
* - I2C
* - HIGH
*/
void I2C_EnablePower(void) {
P7 = _02_Pn1_OUTPUT_1;
}
/**
* : I2C_DisablePower
* : I2C .
*
* :
*
* : (void)
*
* :
* 1) P7 LOW
* - _00_Pn1_OUTPUT_0 : P7 1 LOW
*
* :
* - I2C
* - LOW
*/
void I2C_DisablePower(void) {
P7 = _00_Pn1_OUTPUT_0;
}
/**
* : I2C_Diagnostic
* : I2C UART로
*
* :
* - id : I2C
*
* : (void)
*
* :
* 1) CMD_LIST
* - 10
* - 3: { , 1, 2}
*
* 2) CMD_LIST I2C
* - R_IICA0_Master_Send()
* - R_IICA0_Master_Receive()
* - (rx[1], rx[2]) UART (line)
* - CMD
* - / delay로
*
* 3) UART
* - (line) UART로
* - CRLF
*
* :
* - RAM_BYTES는 I2C
* - UART CMD별 2 HEX로
* - I2C
*/
void I2C_Diagnostic(uint8_t id )
{
uint8_t CMD_LIST[10][3] = {
{0x2E, 0x01, 0x00}, // BR
{0x2E, 0x00, 0x00}, // BR_AZ
{0x2E, 0x02, 0x00}, // T_RAW
{0x2E, 0x03, 0x00}, // Y_data
{0x2E, 0x21, 0x00}, // BR_AOUT
{0x2E, 0x40, 0x00},
{0x2E, 0x05, 0x00},
{0x2E, 0x07, 0x00},
{0x2E, 0x19, 0x00},
{0x2E, 0x0B, 0x00}
};
char line[128];
size_t n = 0;
uint8_t rx[RAM_BYTES] = {0};
int j;
// 2) CMD_LIST 순서대로 I2C 읽기
for (j = 0; j < 10; j++) {
if (R_IICA0_Master_Send((id << 1), CMD_LIST[j], 3, 100) != MD_OK) {
HOST_PRINT("I2C Send Failed\r\n");
return;
}
delay(10000);
if (R_IICA0_Master_Receive((id << 1), rx, RAM_BYTES, 100) != MD_OK) {
HOST_PRINT("I2C Receive Failed\r\n");
return;
}
delay(10000);
n += sprintf(&line[n], "%02X%02X", rx[1], rx[2]);
// 마지막 CMD 뒤에는 쉼표 붙이지 않음
if (j < 9) {
line[n++] = ',';
}
}
// 마지막에 CRLF
line[n++] = '\r';
line[n++] = '\n';
line[n] = '\0';
HOST_PRINT(line);
delay(10000);
}
/**
* : I2C_T_Command_Mode_receiveData
* : I2C (tx_data) , UART로
*
* :
* - tx_data : I2C로
* - tx_len : ()
* - id : I2C
*
* : (void)
*
* :
* 1) I2C
* - R_IICA0_Create() I2C
* - I2C (I2C_EnablePower())
* - delay(1)
*
* 2) I2C
* - R_IICA0_Master_Send() tx_data
* - UART로 "I2C Send Failed"
*
* 3) UART
* - "51" UART로
*
* :
* - (read)
* - UART "51" /
*/
void I2C_T_Command_Mode_receiveData(const uint8_t *tx_data, uint8_t tx_len,uint8_t id )
{
char uart_buf[16];
int j;
uint8_t rx[3] = {0};
R_IICA0_Create();
I2C_EnablePower();
delay(1000000);
if (R_IICA0_Master_Send((id << 1), tx_data, tx_len, 100) != MD_OK)
{
HOST_PRINT("I2C Send Failed\r\n");
return;
}
HOST_PRINT("51\r\n");
}
/**
* : I2C_Command_Mode_receiveData
* : I2C (tx_data) , UART로
*
* :
* - tx_data : I2C로
* - tx_len : ()
* - id : I2C
*
* : (void)
*
* :
* 1) I2C
* - R_IICA0_Master_Send() (id) tx_data
* - UART로 "I2C Send Failed"
*
* 2) UART
* - "51" UART로
* -
*
* :
* -
* - I2C
*/
void I2C_Command_Mode_receiveData(const uint8_t *tx_data, uint8_t tx_len,uint8_t id )
{
char uart_buf[16];
int j;
uint8_t rx[3] = {0};
if (R_IICA0_Master_Send((id << 1), tx_data, tx_len, 100) != MD_OK)
{
HOST_PRINT("I2C Send Failed\r\n");
return;
}
HOST_PRINT("51\r\n");
}
/**
* : I2C_Command_Mode_Send
* : I2C , UART로
*
* :
* - tx_len : ()
* - id : I2C
*
* : (void)
*
* :
* 1) I2C
* - R_IICA0_Master_Receive() (id) tx_len
* - UART로 "I2C Receive Failed"
*
* 2) UART
* - "%02X "
* - 2 "%02X%02X "
* - 1 "%02X"
* - ("\r\n")
*
* 3) delay
* - delay를 UART
*
* :
* - I2C
* -
*/
void I2C_Command_Mode_Send(uint8_t tx_len, uint8_t id)
{
char uart_buf[16];
char tmp_buf[8];
int i,j;
uint8_t rx[600];
uint8_t va0, va1;
uint8_t status = 0x00;
int tries = 0;
/* 버퍼 초기화 (기존 로직/출력 형식 유지) */
memset(uart_buf, 0, sizeof(uart_buf));
memset(tmp_buf, 0, sizeof(tmp_buf));
memset(rx, 0x00, sizeof(rx)); // 가드 패턴(0x00으로 해도 무방)
if (R_IICA0_Master_Receive((id << 1), rx, (uint8_t)(tx_len), 1000) != MD_OK) {
HOST_PRINT("I2C Receive Failed\r\n");
return;
}
delay(1000000);
sprintf(uart_buf, "%02X ", rx[0]);
strcpy(tmp_buf, uart_buf);
HOST_PRINT(uart_buf);
delay(10000);
for (i = 1; i < (tx_len); i += 2) {
va0 = rx[i];
if (i + 1 < (tx_len)) {
va1 = rx[i + 1];
delay(10000);
sprintf(uart_buf, "%02X%02X ", va0, va1);
HOST_PRINT(uart_buf);
delay(10000);
} else {
delay(10000);
sprintf(uart_buf, "%02X", va0);
strcpy(tmp_buf, uart_buf);
HOST_PRINT(uart_buf);
delay(10000);
}
}
HOST_PRINT("\r\n");
}

30
i2c.h

@ -0,0 +1,30 @@
#include "r_cg_macrodriver.h"
#include "r_cg_serial.h"
#include "r_cg_port.h"
#include "uart.h"
#define SLAVE_ADDR 0x28
#define RAM_BYTES 12
extern volatile uint8_t i2c_tx_done;
extern volatile uint8_t i2c_rx_done;
void I2C_EnablePower(void);
void I2C_DisablePower(void);
void I2C_Command_Mode(void);
//void I2C_read_nvm(void);
void I2C_T_Command_Mode_receiveData(const uint8_t *tx_data, uint8_t tx_len,uint8_t id );
void I2C_A_Command_Mode_receiveData(const uint8_t *tx_data, uint8_t tx_len,uint8_t id );
void I2C_Command_Mode_receiveData(const uint8_t *tx_data, uint8_t tx_len,uint8_t id );
void I2C_Command_Mode_Send(uint8_t tx_len, uint8_t id);
void I2C_Diagnostic(uint8_t id);
void disable(void);
void i2c_enter_nomal_mode(void);
void i2c_read_ram_out0(void);
void i2c_read_ram_out1(void);
void i2c_read_all_ram(void);
void i2c_read_all_nvm(void);
void i2c_write_all_nvm(void);
void i2c_nvm_data(void);

1242
multical.COMPUTER1.mtud

File diff suppressed because one or more lines are too long

1174
multical.guseo.mtud

File diff suppressed because one or more lines are too long

4352
multical.mtpj

File diff suppressed because it is too large

2023
multical.rcpe

File diff suppressed because it is too large

1045
multical.temp.mtud

File diff suppressed because one or more lines are too long

873
owi.c

@ -0,0 +1,873 @@
#include "owi.h"
#include "delay.h"
#include <string.h>
#include "uart.h"
/**
* : OWI_EnablePower
* : 1-Wire .
*
* :
*
* : (void)
*
* :
* - MCU P7의 1 (P7.1) HIGH(_02_Pn1_OUTPUT_1)
* 1-Wire .
*/
void OWI_EnablePower(void) {
P7 = _02_Pn1_OUTPUT_1;
}
/**
* : OWI_DisablePower
* : 1-Wire .
*
* :
*
* : (void)
*
* :
* - MCU P7의 1 (P7.1) LOW(_00_Pn1_OUTPUT_0)
* 1-Wire .
*/
void OWI_DisablePower(void) {
P7 = _00_Pn1_OUTPUT_0;
}
/**
* : GPIO_Clear
* : 1-Wire GPIO(P70) Low .
*
* :
*
* : (void)
*
* :
* - OWI_PORT_P (OWI_PIN_MASK) 0 P70을 Low로 .
* - OWI_PORT_PM 0 P70을 .
* - P70 Low .
*/
void GPIO_Clear(void) {
OWI_PORT_P &= ~OWI_PIN_MASK; // P70 = 0 (Low)
OWI_PORT_PM &= ~OWI_PIN_MASK; // P70 출력 모드
}
/**
* : GPIO_Input
* : 1-Wire GPIO(P70) .
*
* :
*
* : (void)
*
* :
* - OWI_PORT_PM (OWI_PIN_MASK) 1 P70을 (High-Z) .
* - .
*/
void GPIO_Input(void) {
OWI_PORT_PM |= OWI_PIN_MASK; // P70 입력 모드 (High-Z)
}
/**
* : GPIO_Read
* : 1-Wire GPIO(P70) .
*
* :
*
* :
* - 1 : P70 High
* - 0 : P70 Low
*
* :
* - OWI_PORT_P (OWI_PIN_MASK) .
* - 1 High, 0 Low로 .
* - , GPIO .
*/
int GPIO_Read(void) {
return (OWI_PORT_P & OWI_PIN_MASK) ? 1 : 0;
}
/**
* : OWI_Init
* : 1-Wire GPIO .
*
* :
* - bit_time_us : 1 ( )
*
* : (void)
*
* :
* 1. bit_period_us .
* 2. OWI_PORT_POM (OWI_PIN_MASK) Open-drain(n-channel) .
* 3. OWI_PORT_PU .
* 4. GPIO를 .
*
*/
void OWI_Init(uint32_t bit_time_us) {
bit_period_us = bit_time_us;
OWI_PORT_POM |= OWI_PIN_MASK; // Open-drain (n-channel)
OWI_PORT_PU |= OWI_PIN_MASK; // 내부 풀업 활성화
GPIO_Input(); // 초기엔 입력으로 대기
}
// ----------------------------------------
// OWI Start/Stop/Secure
// ----------------------------------------
/**
* : OWI_Start
* : 1-Wire Start .
*
* :
*
* : (void)
*
* :
* 1. GPIO_Clear() : P70 Low Start .
* 2. delay_us(TSTART_HOLD): Start .
* 3. GPIO_Input() : (High-Z) .
* 4. delay_us(TBIT / 2): 1-Wire .
*
*/
void OWI_Start(void)
{
GPIO_Clear();
delay_us(TSTART_HOLD);
GPIO_Input();
delay_us(TBIT / 2);
}
/**
* : OWI_Stop
* : 1-Wire .
*
* :
*
* : (void)
*
* :
* 1. GPIO_Input() : (High-Z) .
* 2. delay_us(TSTOP_LOW): Stop .
* 3. delay_us(TIDLE): .
* 4. GPIO_Clear() : Low로 .
*
*/
void OWI_Stop(void)
{
GPIO_Input();
delay_us(TSTOP_LOW);
delay_us(TIDLE);
GPIO_Clear();
}
/**
* : OWI_SecureStop
* : 1-Wire .
*
* :
*
* : (void)
*
* :
* 1. GPIO_Clear() SECURE_HIGH : Low .
* 2. SECURE_TOGGLE_COUNT만큼 :
* - GPIO_Input() High-Z SECURE_TOGGLE_HIGH .
* - GPIO_Clear() Low SECURE_TOGGLE_LOW .
* - .
* 3. GPIO_Input() SECURE_HIGH GPIO_Clear() TSTART_HOLD GPIO_Input() :
* - .
*
*/
void OWI_SecureStop(void)
{
int i;
GPIO_Clear();
delay_us(SECURE_HIGH);
for (i = 0; i < SECURE_TOGGLE_COUNT; i++) {
GPIO_Input();
delay_us(SECURE_TOGGLE_HIGH);
GPIO_Clear();
delay_us(SECURE_TOGGLE_LOW);
}
GPIO_Input();
delay_us(SECURE_HIGH);
GPIO_Clear();
delay_us(TSTART_HOLD);
GPIO_Input();
}
// ----------------------------------------
// OWI Bit/Byte Write & Read
// ----------------------------------------
/**
* : OWI_WriteBit
* : 1-Wire (bit) .
*
* :
* - bit : (0 1)
*
* : (void)
*
* :
* 1. Low (t_low) :
* - bit가 1 TLOW_1, 0 TLOW_0
* 2. t_high = TBIT - t_low : High .
* 3. GPIO_Input() : (High-Z) .
* 4. delay_us(t_high): High .
* 5. GPIO_Clear() : Low .
* 6. delay_us(t_low): Low .
*
*/
void OWI_WriteBit(int bit)
{
uint32_t t_low = bit ? TLOW_1 : TLOW_0;
uint32_t t_high = TBIT - t_low;
GPIO_Input(); // 풀업 상태 유지
delay_us(t_high); // High 유지
GPIO_Clear(); // Low로 드라이브
delay_us(t_low); // Low 시간 유지
}
/**
* : OWI_WriteByte
* : 1-Wire 1 .
*
* :
* - data : 1 (uint8_t)
*
* : (void)
*
* :
* 1. (MSB) (LSB) :
* - OWI_WriteBit() .
* - (data >> i) & 0x01 i번째 .
* 2. 8 GPIO_Input() :
* - High-Z .
*
*/
void OWI_WriteByte(uint8_t data)
{
int i;
for (i = 7; i >= 0; i--) {
OWI_WriteBit((data >> i) & 0x01);
}
GPIO_Input();
}
/**
* : OWI_ReadBit
* : 1-Wire .
*
* :
*
* :
* - 0 1 :
* - 0xFF :
*
* :
* 1. GPIO_Read() High가 :
* - 500us까지 (timeout).
* - UART로 0xFF .
* 2. delay_us(50) .
* 3. GPIO_Read() .
* 4. delay_us(30) .
* 5. .
*
*/
uint8_t OWI_ReadBit(void)
{
uint8_t bit;
int timeout = 500;
while (!(GPIO_Read()) && timeout-- > 0) {
delay_us(1);
}
if (timeout <= 0) {
HOST_PRINT("OWI Timeout\r\n");
return 0xFF;
}
delay_us(50);
bit = GPIO_Read();
delay_us(30);
return bit;
}
/**
* : OWI_ReadByte
* : 1-Wire 1 .
*
* :
*
* :
* - 1 (uint8_t)
*
* :
* 1. (MSB) (LSB) :
* - OWI_ReadBit() 1 .
* - data .
* 2. 8 data .
*
*/
uint8_t OWI_ReadByte(void)
{
uint8_t data = 0;
int i;
for (i = 7; i >= 0; i--) {
data |= (OWI_ReadBit() << i);
}
return data;
}
/**
* : OWI_T_ReadBytesAndPrint
* : 1-Wire , UART로 .
*
* :
* - length :
*
* : (void)
*
* :
* 1. buf length만큼 OWI_ReadByte() 1 .
* 2. (buf[0]) 16 2 UART .
* 3. 16 4 UART :
* - delay(10000) .
* 4. UART sprintf strcpy uart_send_string .
*
* :
* - buf[0] , 2 .
* - delay를 UART .
* - 1-Wire .
*/
void OWI_T_ReadBytesAndPrint(int length)
{
uint8_t buf[129];
int i;
char uart_buf[8];
char tmp_buf[8];
uint8_t va0, va1;
for (i = 0; i < length; i++) {
buf[i] = OWI_ReadByte();
}
sprintf(uart_buf, "%02X ", buf[0]);
strcpy(tmp_buf, uart_buf);
HOST_PRINT(tmp_buf);
for (i = 1; i < length; i+=2) {
va0 = buf[i];
va1 = buf[i+1];
delay(10000);
sprintf(uart_buf, "%02X%02X ", va0, va1);
strcpy(tmp_buf, uart_buf);
HOST_PRINT(tmp_buf);
delay(10000);
}
}
/**
* : OWI_A_CommandMode
* : 1-Wire ADC (CMD) UART로 .
*
* :
* - tx_data : (3)
* - tx_len :
* - id : ID
*
* : (void)
*
* :
* 1) ADC
* - ADC_ReadAndSend_UART() ADC .
* - g_adc_bytes 2 line .
* - ADC "Err:adc_count" .
*
* 2) 1-Wire
* - OWI_EnablePower() .
* - 7ms .
*
* 3) (CMD)
* - CMD_LIST에 6 4 .
* - / OWI_SecureStop() .
* - read_address(0x51) .
* - 0xFF OWI_MAX_RETRY만큼 .
* - Rx 2, 3 line 16 .
*
* 4) CMD (tx_data )
* - tx_len가 3 ID를 write read .
* - Rx 0xFF OWI_MAX_RETRY .
* - line 2, 3 .
* - tx_data가 "0000" line .
*
* 5) UART
* - line CRLF uart_send_string() .
*
* 6)
* - delay(10000) OWI_DisablePower() .
*
* :
* - OWI_SecureStop() delay_us() 1-Wire .
* - g_adc_bytes, RAM_BYTES, OWI_MAX_RETRY .
* - UART로 ADC값, CMD , CMD .
*/
#define OWI_MAX_RETRY 2 // 재시도 2회
#define OWI_RECOVERY_MIN_US 500 // datasheet 기준 최소 recovery 시간
void OWI_A_CommandMode(const uint8_t *tx_data, uint8_t tx_len, uint8_t id)
{
uint8_t CMD_LIST[6][4] = {
{0x50,0x2E,0x00,0x00}, // BR
{0x50,0x2E,0x01,0x00}, // BR_AZ
{0x50,0x2E,0x02,0x00}, // T_RAW
{0x50,0x2E,0x16,0x00}, // Y_data
{0x50,0x2E,0x41,0x00}, // BR_AOUT
{0x50,0x2E,0x00,0x00} // BR_AOUT duplicate
};
char line[128];
size_t n = 0;
uint8_t rx[RAM_BYTES];
int i, j, retry, all_ff;
float v;
uint8_t read_address = 0x51;
// ===== 2) OWI Power On =====
OWI_EnablePower();
delay_us(7000); // Power-on delay
// ===== 3) CMD 전송 및 안전한 읽기 =====
for (j = 0; j < 6; j++) {
OWI_SecureStop();
for (i = 0; i < 4; i++) OWI_WriteByte(CMD_LIST[j][i]);
OWI_Stop();
// CMD → read 회복 시간
delay_us(OWI_RECOVERY_MIN_US);
// Rx 초기화
for (i = 0; i < RAM_BYTES; i++) rx[i] = 0xFF;
for (retry = 0; retry <= OWI_MAX_RETRY; retry++) {
// read 전 충분한 recovery 확보
delay_us(OWI_RECOVERY_MIN_US);
OWI_SecureStop();
OWI_WriteByte(read_address);
for (i = 0; i < RAM_BYTES; i++) rx[i] = OWI_ReadByte();
OWI_Stop();
all_ff = 1;
for (i = 0; i < RAM_BYTES; i++) {
if (rx[i] != 0xFF) { all_ff = 0; break; }
}
if (!all_ff) break; // 정상 데이터 수신
if (retry == OWI_MAX_RETRY) { // 모든 재시도 실패
OWI_DisablePower();
return;
}
}
n += sprintf(&line[n], "%02X%02X", rx[1], rx[2]);
line[n++] = ',';
}
// ===== 4) 사용자 CMD 처리 =====
if (tx_data != NULL && tx_len == 3) {
for (retry = 0; retry <= OWI_MAX_RETRY; retry++) {
// write CMD
OWI_SecureStop();
OWI_WriteByte(id << 1);
for (i = 0; i < 3; i++) OWI_WriteByte(tx_data[i]);
OWI_Stop();
// read 준비
delay_us(OWI_RECOVERY_MIN_US);
// read
for (i = 0; i < RAM_BYTES; i++) rx[i] = 0xFF;
OWI_SecureStop();
OWI_WriteByte((id << 1) | 1);
for (i = 0; i < RAM_BYTES; i++) rx[i] = OWI_ReadByte();
OWI_Stop();
all_ff = 1;
for (i = 0; i < RAM_BYTES; i++) {
if (rx[i] != 0xFF) { all_ff = 0; break; }
}
if (!all_ff) break;
if (retry == OWI_MAX_RETRY) {
OWI_DisablePower();
return;
}
}
n += sprintf(&line[n], "%02X%02X", rx[1], rx[2]);
} else {
n += sprintf(&line[n], "0000");
}
// ===== 5) UART 출력 =====
line[n++] = '\r';
line[n++] = '\n';
line[n] = '\0';
HOST_PRINT(line);
delay(10000);
OWI_DisablePower();
}
/**
* : OWI_Diagnostic
* : 1-Wire UART로 .
*
* :
* - id : ID ( )
*
* : (void)
*
* :
* 1) CMD_LIST에 10 4 .
* - OWI_SecureStop() .
* - OWI_Stop() .
* - OWI_RECOVERY_MIN_US .
*
* 2) read_address(0x51) .
* - Rx (0xFF) OWI_ReadByte() .
* - 0xFF OWI_MAX_RETRY만큼 .
*
* 3) rx[1], rx[2] 16 line .
* - (,) .
*
* 4) UART
* - line CRLF uart_send_string() .
*
* :
* - OWI_SecureStop() delay_us() 1-Wire .
* - .
*/
void OWI_Diagnostic(uint8_t id)
{
uint8_t CMD_LIST[10][4] = {
{0x50,0x2E,0x01,0x00}, // BR
{0x50,0x2E,0x00,0x00}, // BR_AZ
{0x50,0x2E,0x02,0x00}, // T_RAW
{0x50,0x2E,0x03,0x00}, // Y_data
{0x50,0x2E,0x21,0x00}, // BR_AOUT
{0x50,0x2E,0x04,0x00},
{0x50,0x2E,0x05,0x00},
{0x50,0x2E,0x07,0x00},
{0x50,0x2E,0x19,0x00},
{0x50,0x2E,0x0B,0x00}
};
char line[128];
size_t n = 0;
uint8_t rx[RAM_BYTES];
int i, j, retry, all_ff;
float v;
uint8_t read_address = 0x51;
// ===== 3) CMD 전송 및 안전한 읽기 =====
for (j = 0; j < 10; j++) {
OWI_SecureStop();
for (i = 0; i < 4; i++) OWI_WriteByte(CMD_LIST[j][i]);
OWI_Stop();
// CMD → read 회복 시간
delay_us(OWI_RECOVERY_MIN_US);
// Rx 초기화
for (i = 0; i < RAM_BYTES; i++) rx[i] = 0xFF;
for (retry = 0; retry <= OWI_MAX_RETRY; retry++) {
// read 전 충분한 recovery 확보
delay_us(OWI_RECOVERY_MIN_US);
OWI_SecureStop();
OWI_WriteByte(read_address);
for (i = 0; i < RAM_BYTES; i++) rx[i] = OWI_ReadByte();
OWI_Stop();
all_ff = 1;
for (i = 0; i < RAM_BYTES; i++) {
if (rx[i] != 0xFF) { all_ff = 0; break; }
}
if (!all_ff) break; // 정상 데이터 수신
if (retry == OWI_MAX_RETRY) { // 모든 재시도 실패
OWI_DisablePower();
return;
}
}
// 데이터 추가
n += sprintf(&line[n], "%02X%02X", rx[1], rx[2]);
// 마지막이 아닐 때만 콤마 추가
if (j < 9) {
line[n++] = ',';
}
}
// ===== 5) UART 출력 =====
line[n++] = '\r';
line[n++] = '\n';
line[n] = '\0';
HOST_PRINT(line);
delay(10000);
}
/**
* : OWI_disable
* : 1-Wire , UART로 .
*
* :
*
* : (void)
*
* :
* 1) OWI_DisablePower() 1-Wire .
* 2) UART로 "51" CRLF .
*
* :
* - UART .
*/
void OWI_disable()
{
OWI_DisablePower();
HOST_PRINT("51\r\n");
}
/**
* : OWI_T_CommandMode
* : 1-Wire , UART로 .
*
* :
* - tx_data :
* - tx_len :
* - id : 1-Wire ID ( )
*
* : (void)
*
* :
* 1) 1-Wire
* - OWI_EnablePower()
* - 7ms
*
* 2) 1-Wire
* - OWI_Init()
*
* 3) (Write sequence)
* - OWI_SecureStop()
* - (id << 1) ( )
* - tx_data
* - OWI_Stop()
*
* 4) UART
* - "51"
*
* :
* - , .
* - OWI_SecureStop() OWI_Stop() 1-Wire .
*/
void OWI_T_CommandMode(const uint8_t *tx_data, uint8_t tx_len, uint8_t id)
{
uint8_t rx[3] = {0};
char uart_buf[16];
int i;
OWI_EnablePower();
delay_us(7000); // Power-on delay
OWI_Init(OWI_BIT_PERIOD_US);
// Write sequence (슬레이브 주소와 명령 전송)
OWI_SecureStop(); // 통신 준비
OWI_WriteByte(id << 1); // 슬레이브 write 주소
for (i = 0; i < tx_len; i++) {
OWI_WriteByte(tx_data[i]); // 명령 전송
}
OWI_Stop(); // 쓰기 종료
HOST_PRINT("51\r\n");
}
/**
* : OWI_CommandMode
* : 1-Wire , UART로 .
*
* :
* - tx_data :
* - tx_len :
* - id : 1-Wire ID ( )
*
* : (void)
*
* :
* 1) (Write sequence)
* - OWI_SecureStop()
* - (id << 1) ( )
* - tx_data
* - OWI_Stop()
*
* 2) UART
* - "51"
*
* :
* - /
* - ,
* - OWI_SecureStop() OWI_Stop() 1-Wire
*/
void OWI_CommandMode(const uint8_t *tx_data, uint8_t tx_len, uint8_t id)
{
uint8_t rx[3] = {0};
char uart_buf[16];
int i;
// Write sequence (슬레이브 주소와 명령 전송)
OWI_SecureStop(); // 통신 준비
OWI_WriteByte(id << 1); // 슬레이브 write 주소
for (i = 0; i < tx_len; i++) {
OWI_WriteByte(tx_data[i]); // 명령 전송
}
OWI_Stop(); // 쓰기 종료
HOST_PRINT("51\r\n");
}
/**
* : OWI_ReadBytesAndPrint
* : 1-Wire , UART로 .
*
* :
* - length :
* - id : 1-Wire ID ( )
*
* : (void)
*
* :
* 1)
* - OWI_SecureStop()
* - (id << 1) | 1
*
* 2) length만큼 OWI_ReadByte()
* - buf
*
* 3) UART
* - buf[0]
* - 1
* -
* - delay(10000) (UART )
* - : 16
* - CRLF("\r\n")
*
* :
* - UART (uart_buf, tmp_buf)
* - delay를
*/
void OWI_ReadBytesAndPrint(int length, uint8_t id)
{
uint8_t buf[600];
int i;
char uart_buf[8];
char tmp_buf[8];
uint8_t va0, va1;
OWI_SecureStop();
OWI_WriteByte((id << 1) | 1);
for (i = 0; i < length; i++) {
buf[i] = OWI_ReadByte();
}
sprintf(uart_buf, "%02X ", buf[0]);
strcpy(tmp_buf, uart_buf);
HOST_PRINT(tmp_buf);
for (i = 1; i < length; i += 2) {
va0 = buf[i];
if (i + 1 < length) {
// 완전한 페어
va1 = buf[i + 1];
delay(10000);
sprintf(uart_buf, "%02X%02X ", va0, va1);
strcpy(tmp_buf, uart_buf);
HOST_PRINT(tmp_buf);
delay(10000);
} else {
// 마지막 1바이트가 남은 경우 단독 출력
delay(10000);
sprintf(uart_buf, "%02X", va0);
strcpy(tmp_buf, uart_buf);
HOST_PRINT(tmp_buf);
delay(10000);
}
}
HOST_PRINT("\r\n");
}

48
owi.h

@ -0,0 +1,48 @@
#include "r_cg_macrodriver.h"
#include "r_cg_serial.h"
#include "r_cg_port.h"
// OWI에 사용할 핀 정의 (P70)
#define OWI_PORT_P P7 // 포트 출력 레지스터
#define OWI_PORT_PM PM7 // 포트 방향 (1: 입력, 0: 출력)
#define OWI_PORT_PU PU7 // 내부 풀업
#define OWI_PORT_POM POM7 // Open-drain 설정
#define OWI_PIN_MASK (1 << 0) // P70 = bit 0
#define OWI_BIT_PERIOD_US 100
#define TBIT OWI_BIT_PERIOD_US
#define TLOW_0 (TBIT * 0.75) // 75us
#define TLOW_1 (TBIT * 0.25) // 225us
#define TSTOP_LOW (TBIT * 2) // 600us
#define TIDLE (TBIT * 3) // 900us
#define TSTART_HOLD 50 // ≥25us 기준으로 50us 확보
#define SECURE_HIGH 250
#define SECURE_TOGGLE_COUNT 3
#define SECURE_TOGGLE_LOW 40
#define SECURE_TOGGLE_HIGH 60
static uint32_t bit_period_us = 100; // 기본 OWI 비트 시간
void OWI_EnablePower(void);
void OWI_DisablePower(void);
void GPIO_Clear(void);
void GPIO_Input(void);
int GPIO_Read(void);
void OWI_Init(uint32_t bit_time_us);
void OWI_Start(void);
void OWI_Stop(void);
void OWI_SecureStop(void);
void OWI_WriteBit(int bit);
void OWI_WriteByte(uint8_t data);
uint8_t OWI_ReadBit(void);
uint8_t OWI_ReadByte(void);
void OWI_T_ReadBytesAndPrint(int length);
void OWI_ReadBytesAndPrint(int length, uint8_t id);
void OWI_T_CommandMode(const uint8_t *tx_data, uint8_t tx_len, uint8_t id);
void OWI_A_CommandMode(const uint8_t *tx_data, uint8_t tx_len, uint8_t id);
void owi_write_coefficients(void);
void OWI_CommandMode(const uint8_t *tx_data, uint8_t tx_len, uint8_t id);
void OWI_disable();
void OWI_Diagnostic(uint8_t id);

161
r_cg_adc.c

@ -0,0 +1,161 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2021 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_cg_adc.c
* Version : CodeGenerator for RL78/F14 V2.03.07.02 [08 Nov 2021]
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for ADC module.
* Creation Date: 2026-01-13
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_adc.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"
/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
* Function Name: R_ADC_Create
* Description : This function initializes the AD converter.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void R_ADC_Create(void)
{
ADCEN = 1U; /* supply AD clock */
ADM0 = _00_AD_ADM0_INITIALVALUE; /* disable AD conversion and clear ADM0 register */
ADMK = 1U; /* disable INTAD interrupt */
ADIF = 0U; /* clear INTAD interrupt flag */
/* Set INTAD low priority */
ADPR1 = 1U;
ADPR0 = 1U;
/* The reset status of ADPC is analog input, so it's unnecessary to set. */
/* Set ANI0 - ANI23 pin as analog input */
PM10 |= 0x3FU;
PM9 |= 0xFFU;
PM8 |= 0xFFU;
PM3 |= 0x18U;
/* Set ANI24 pin */
PMC12 |= 0x20U;
PM12 |= 0x20U;
/* Set ANI25 pin */
PMC12 |= 0x01U;
PM12 |= 0x01U;
/* Set ANI26 pin */
PMC7 |= 0x01U;
PM7 |= 0x01U;
/* Set ANI27 pin */
PMC7 |= 0x02U;
PM7 |= 0x02U;
/* Set ANI28 pin */
PMC7 |= 0x04U;
PM7 |= 0x04U;
/* Set ANI29 pin */
PMC7 |= 0x08U;
PM7 |= 0x08U;
/* Set ANI30 pin */
PMC7 |= 0x10U;
PM7 |= 0x10U;
ADM0 = _00_AD_CONVERSION_CLOCK_64 | _00_AD_TIME_MODE_NORMAL_1 | _00_AD_OPERMODE_SELECT;
ADM1 = _00_AD_TRIGGER_SOFTWARE | _00_AD_CONVMODE_CONSELECT;
ADM2 = _00_AD_POSITIVE_VDD | _00_AD_NEGATIVE_VSS | _00_AD_AREA_MODE_1 | _00_AD_RESOLUTION_10BIT;
ADUL = _FF_AD_ADUL_VALUE;
ADLL = _00_AD_ADLL_VALUE;
ADS = _00_AD_INPUT_CHANNEL_0;
}
/***********************************************************************************************************************
* Function Name: R_ADC_Start
* Description : This function starts the AD converter.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void R_ADC_Start(void)
{
ADIF = 0U; /* clear INTAD interrupt flag */
ADMK = 0U; /* enable INTAD interrupt */
ADCS = 1U; /* enable AD conversion */
}
/***********************************************************************************************************************
* Function Name: R_ADC_Stop
* Description : This function stops the AD converter.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void R_ADC_Stop(void)
{
ADCS = 0U; /* disable AD conversion */
ADMK = 1U; /* disable INTAD interrupt */
ADIF = 0U; /* clear INTAD interrupt flag */
}
/***********************************************************************************************************************
* Function Name: R_ADC_Set_OperationOn
* Description : This function enables comparator operation.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void R_ADC_Set_OperationOn(void)
{
ADCE = 1U; /* enable AD comparator */
}
/***********************************************************************************************************************
* Function Name: R_ADC_Set_OperationOff
* Description : This function stops comparator operation.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void R_ADC_Set_OperationOff(void)
{
ADCE = 0U; /* disable AD comparator */
}
/***********************************************************************************************************************
* Function Name: R_ADC_Get_Result
* Description : This function returns the conversion result in the buffer.
* Arguments : buffer -
* the address where to write the conversion result
* Return Value : None
***********************************************************************************************************************/
void R_ADC_Get_Result(uint16_t * const buffer)
{
*buffer = (uint16_t)(ADCR >> 6U);
}
/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

223
r_cg_adc.h

@ -0,0 +1,223 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2021 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_cg_adc.h
* Version : CodeGenerator for RL78/F14 V2.03.07.02 [08 Nov 2021]
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for ADC module.
* Creation Date: 2026-01-13
***********************************************************************************************************************/
#ifndef ADC_H
#define ADC_H
/***********************************************************************************************************************
Macro definitions (Register bit)
***********************************************************************************************************************/
/*
Peripheral enable register 0 (PER0)
*/
/* Control of AD converter input clock (ADCEN) */
#define _00_AD_CLOCK_STOP (0x00U) /* stop supply of input clock */
#define _20_AD_CLOCK_SUPPLY (0x20U) /* supply input clock */
/*
AD converter mode register 0 (ADM0)
*/
#define _00_AD_ADM0_INITIALVALUE (0x00U)
/* AD conversion operation control (ADCS) */
#define _80_AD_CONVERSION_ENABLE (0x80U) /* enable AD conversion operation control */
#define _00_AD_CONVERSION_DISABLE (0x00U) /* disable AD conversion operation control */
/* Specification of AD conversion operation mode (ADMD) */
#define _00_AD_OPERMODE_SELECT (0x00U) /* select operation mode */
#define _40_AD_OPERMODE_SCAN (0x40U) /* scan operation mode */
/* AD conversion clock selection (FR2 - FR0) */
#define _00_AD_CONVERSION_CLOCK_64 (0x00U) /* fCLK/64 */
#define _08_AD_CONVERSION_CLOCK_32 (0x08U) /* fCLK/32 */
#define _10_AD_CONVERSION_CLOCK_16 (0x10U) /* fCLK/16 */
#define _18_AD_CONVERSION_CLOCK_8 (0x18U) /* fCLK/8 */
#define _20_AD_CONVERSION_CLOCK_6 (0x20U) /* fCLK/6 */
#define _28_AD_CONVERSION_CLOCK_5 (0x28U) /* fCLK/5 */
#define _30_AD_CONVERSION_CLOCK_4 (0x30U) /* fCLK/4 */
#define _38_AD_CONVERSION_CLOCK_2 (0x38U) /* fCLK/2 */
/* Specification AD conversion time mode (LV1, LV0) */
#define _00_AD_TIME_MODE_NORMAL_1 (0x00U) /* normal 1 mode */
#define _02_AD_TIME_MODE_NORMAL_2 (0x02U) /* normal 2 mode */
/* AD comparator operation control (ADCE) */
#define _01_AD_COMPARATOR_ENABLE (0x01U) /* enable comparator operation control */
#define _00_AD_COMPARATOR_DISABLE (0x00U) /* disable comparator operation control */
/*
Analog input channel specification register (ADS)
*/
/* Specification of analog input channel (ADISS, ADS4 - ADS0) */
/* Select mode */
#define _00_AD_INPUT_CHANNEL_0 (0x00U) /* ANI0 */
#define _01_AD_INPUT_CHANNEL_1 (0x01U) /* ANI1 */
#define _02_AD_INPUT_CHANNEL_2 (0x02U) /* ANI2 */
#define _03_AD_INPUT_CHANNEL_3 (0x03U) /* ANI3 */
#define _04_AD_INPUT_CHANNEL_4 (0x04U) /* ANI4 */
#define _05_AD_INPUT_CHANNEL_5 (0x05U) /* ANI5 */
#define _06_AD_INPUT_CHANNEL_6 (0x06U) /* ANI6 */
#define _07_AD_INPUT_CHANNEL_7 (0x07U) /* ANI7 */
#define _08_AD_INPUT_CHANNEL_8 (0x08U) /* ANI8 */
#define _09_AD_INPUT_CHANNEL_9 (0x09U) /* ANI9 */
#define _0A_AD_INPUT_CHANNEL_10 (0x0AU) /* ANI10 */
#define _0B_AD_INPUT_CHANNEL_11 (0x0BU) /* ANI11 */
#define _0C_AD_INPUT_CHANNEL_12 (0x0CU) /* ANI12 */
#define _0D_AD_INPUT_CHANNEL_13 (0x0DU) /* ANI13 */
#define _0E_AD_INPUT_CHANNEL_14 (0x0EU) /* ANI14 */
#define _0F_AD_INPUT_CHANNEL_15 (0x0FU) /* ANI15 */
#define _10_AD_INPUT_CHANNEL_16 (0x10U) /* ANI16 */
#define _11_AD_INPUT_CHANNEL_17 (0x11U) /* ANI17 */
#define _12_AD_INPUT_CHANNEL_18 (0x12U) /* ANI18 */
#define _13_AD_INPUT_CHANNEL_19 (0x13U) /* ANI19 */
#define _14_AD_INPUT_CHANNEL_20 (0x14U) /* ANI20 */
#define _15_AD_INPUT_CHANNEL_21 (0x15U) /* ANI21 */
#define _16_AD_INPUT_CHANNEL_22 (0x16U) /* ANI22 */
#define _17_AD_INPUT_CHANNEL_23 (0x17U) /* ANI23 */
#define _18_AD_INPUT_CHANNEL_24 (0x18U) /* ANI24 */
#define _19_AD_INPUT_CHANNEL_25 (0x19U) /* ANI25 */
#define _1A_AD_INPUT_CHANNEL_26 (0x1AU) /* ANI26 */
#define _1B_AD_INPUT_CHANNEL_27 (0x1BU) /* ANI27 */
#define _1C_AD_INPUT_CHANNEL_28 (0x1CU) /* ANI28 */
#define _1D_AD_INPUT_CHANNEL_29 (0x1DU) /* ANI29 */
#define _1E_AD_INPUT_CHANNEL_30 (0x1EU) /* ANI30 */
#define _80_AD_INPUT_TEMPERSENSOR_0 (0x80U) /* temperature sensor 0 output is used to be the input channel */
#define _81_AD_INPUT_INTERREFVOLT (0x81U) /* internal reference voltage output is used to be the input channel */
/* Scan mode */
#define _00_AD_INPUT_CHANNEL_0_3 (0x00U) /* ANI0 - ANI3 */
#define _01_AD_INPUT_CHANNEL_1_4 (0x01U) /* ANI1 - ANI4 */
#define _02_AD_INPUT_CHANNEL_2_5 (0x02U) /* ANI2 - ANI5 */
#define _03_AD_INPUT_CHANNEL_3_6 (0x03U) /* ANI3 - ANI6 */
#define _04_AD_INPUT_CHANNEL_4_7 (0x04U) /* ANI4 - ANI7 */
#define _05_AD_INPUT_CHANNEL_5_8 (0x05U) /* ANI5 - ANI8 */
#define _06_AD_INPUT_CHANNEL_6_9 (0x06U) /* ANI6 - ANI9 */
#define _07_AD_INPUT_CHANNEL_7_10 (0x07U) /* ANI7 - ANI10 */
#define _08_AD_INPUT_CHANNEL_8_11 (0x08U) /* ANI8 - ANI11 */
#define _09_AD_INPUT_CHANNEL_9_12 (0x09U) /* ANI9 - ANI12 */
#define _0A_AD_INPUT_CHANNEL_10_13 (0x0AU) /* ANI10 - ANI13 */
#define _0B_AD_INPUT_CHANNEL_11_14 (0x0BU) /* ANI11 - ANI14 */
#define _0C_AD_INPUT_CHANNEL_12_15 (0x0CU) /* ANI12 - ANI15 */
#define _0D_AD_INPUT_CHANNEL_13_16 (0x0DU) /* ANI13 - ANI16 */
#define _0E_AD_INPUT_CHANNEL_14_17 (0x0EU) /* ANI14 - ANI17 */
#define _0F_AD_INPUT_CHANNEL_15_18 (0x0FU) /* ANI15 - ANI18 */
#define _10_AD_INPUT_CHANNEL_16_19 (0x10U) /* ANI16 - ANI19 */
#define _11_AD_INPUT_CHANNEL_17_20 (0x11U) /* ANI17 - ANI20 */
#define _12_AD_INPUT_CHANNEL_18_21 (0x12U) /* ANI18 - ANI21 */
#define _13_AD_INPUT_CHANNEL_19_22 (0x13U) /* ANI19 - ANI22 */
#define _14_AD_INPUT_CHANNEL_20_23 (0x14U) /* ANI20 - ANI23 */
/*
AD converter mode register 1 (ADM1)
*/
/* AD trigger mode selection (ADTMD1, ADTMD0) */
#define _00_AD_TRIGGER_SOFTWARE (0x00U) /* software trigger mode */
#define _80_AD_TRIGGER_HARDWARE_NOWAIT (0x80U) /* hardware trigger mode (no wait) */
#define _C0_AD_TRIGGER_HARDWARE_WAIT (0xC0U) /* hardware trigger mode (wait) */
/* AD convertion mode selection (ADSCM) */
#define _00_AD_CONVMODE_CONSELECT (0x00U) /* continuous convertion mode */
#define _20_AD_CONVMODE_ONESELECT (0x20U) /* oneshot convertion mode */
/* Trigger signal selection (ADTRS1, ADTRS0) */
#define _00_AD_TRIGGER_INTTM01 (0x00U) /* INTTM01 */
#define _01_AD_TRIGGER_ELC (0x01U) /* ELC */
#define _01_AD_TRIGGER_TIMER (0x01U) /* INTTRD0,INTTRJ0 */
#define _02_AD_TRIGGER_INTRTC (0x02U) /* INTRTC */
/*
AD converter mode register 2 (ADM2)
*/
/* AD VREF(+) selection (ADREFP1, ADREFP0) */
#define _00_AD_POSITIVE_VDD (0x00U) /* use VDD as VREF(+) */
#define _40_AD_POSITIVE_AVREFP (0x40U) /* use AVREFP as VREF(+) */
#define _80_AD_POSITIVE_INTERVOLT (0x80U) /* use internal voltage as VREF(+) */
/* AD VREF(-) selection (ADREFM) */
#define _00_AD_NEGATIVE_VSS (0x00U) /* use VSS as VREF(-) */
#define _20_AD_NEGATIVE_AVREFM (0x20U) /* use AVREFM as VREF(-) */
/* AD conversion result upper/lower bound value selection (ADRCK) */
#define _00_AD_AREA_MODE_1 (0x00U) /* generates INTAD when ADLL <= ADCRH <= ADUL */
#define _08_AD_AREA_MODE_2_3 (0x08U) /* generates INTAD when ADUL < ADCRH or ADLL > ADCRH */
/* AD wakeup function selection (AWC) */
#define _00_AD_WAKEUP_OFF (0x00U) /* stop wakeup function */
#define _04_AD_WAKEUP_ON (0x04U) /* use wakeup function */
/* AD resolution selection (ADTYP) */
#define _00_AD_RESOLUTION_10BIT (0x00U) /* 10 bits */
#define _01_AD_RESOLUTION_8BIT (0x01U) /* 8 bits */
/*
AD test function register (ADTES)
*/
/* AD test mode signal (ADTES2 - ADTES0) */
#define _00_AD_NORMAL_INPUT (0x00U) /* normal mode */
#define _02_AD_TEST_AVREFM (0x02U) /* use AVREFM as test signal */
#define _03_AD_TEST_AVREFP (0x03U) /* use AVREFP as test signal */
/*
Format of A/D Converter Trigger Select Register 0 (ADTRGS0)(F13 only)
*/
/* Selection of the operation trigger of the A/D converter when the timer RD0 input capture B/compare match B
interrupt request is generated (ADTRGS00) */
#define _01_AD_TRIGGER_INTTRD0 (0x01U) /* A/D conversion is started when the interrupt request is generated */
/*
Format of A/D Converter Trigger Select Register 1 (ADTRGS1)(F13 only)
*/
/* Selection of the operation trigger of the A/D converter when the timer RJ0 interrupt request is generated (ADTRGS10) */
#define _01_AD_TRIGGER_INTTRJ0 (0x01U) /* A/D conversion is started when the interrupt request is generated */
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
/* Upper bound (ADUL) value */
#define _FF_AD_ADUL_VALUE (0xFFU)
/* Upper bound (ADLL) value */
#define _00_AD_ADLL_VALUE (0x00U)
/***********************************************************************************************************************
Typedef definitions
***********************************************************************************************************************/
typedef enum
{
ADCHANNEL0, ADCHANNEL1, ADCHANNEL2, ADCHANNEL3, ADCHANNEL4, ADCHANNEL5, ADCHANNEL6,
ADCHANNEL7, ADCHANNEL8, ADCHANNEL9, ADCHANNEL10, ADCHANNEL11, ADCHANNEL12,
ADCHANNEL13, ADCHANNEL14, ADCHANNEL15, ADCHANNEL16, ADCHANNEL17, ADCHANNEL18,
ADCHANNEL19, ADCHANNEL20, ADCHANNEL21, ADCHANNEL22, ADCHANNEL23, ADCHANNEL24 = 24U,
ADCHANNEL25, ADCHANNEL26, ADCHANNEL27, ADCHANNEL28, ADCHANNEL29, ADCHANNEL30,
ADTEMPERSENSOR0 = 128U, ADINTERREFVOLT
} ad_channel_t;
typedef enum
{
ADNORMALINPUT,
ADAVREFM = 2U,
ADAVREFP
} test_channel_t;
/***********************************************************************************************************************
Global functions
***********************************************************************************************************************/
void R_ADC_Create(void);
void R_ADC_Start(void);
void R_ADC_Stop(void);
void R_ADC_Set_OperationOn(void);
void R_ADC_Set_OperationOff(void);
void R_ADC_Get_Result(uint16_t * const buffer);
/* Start user code for function. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#endif

64
r_cg_adc_user.c

@ -0,0 +1,64 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2021 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_cg_adc_user.c
* Version : CodeGenerator for RL78/F14 V2.03.07.02 [08 Nov 2021]
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for ADC module.
* Creation Date: 2026-01-13
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_adc.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"
/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
#pragma interrupt r_adc_interrupt(vect=INTAD)
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
* Function Name: r_adc_interrupt
* Description : This function is INTAD interrupt service routine.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_adc_interrupt(void)
{
/* Start user code. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
}
/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

2
r_cg_cgc.c

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for CGC module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************

2
r_cg_cgc.h

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for CGC module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
#ifndef CGC_H

2
r_cg_cgc_user.c

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for CGC module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************

2
r_cg_macrodriver.h

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements general head file.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
#ifndef STATUS_H

104
r_cg_port.c

@ -0,0 +1,104 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2021 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_cg_port.c
* Version : CodeGenerator for RL78/F14 V2.03.07.02 [08 Nov 2021]
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for PORT module.
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_port.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"
/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
* Function Name: R_PORT_Create
* Description : This function initializes the Port I/O.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void R_PORT_Create(void)
{
P0 = _00_Pn0_OUTPUT_0 | _00_Pn1_OUTPUT_0 | _00_Pn2_OUTPUT_0 | _00_Pn3_OUTPUT_0;
P1 = _00_Pn0_OUTPUT_0 | _00_Pn3_OUTPUT_0 | _00_Pn4_OUTPUT_0;
P3 = _00_Pn0_OUTPUT_0 | _00_Pn2_OUTPUT_0;
P4 = _00_Pn1_OUTPUT_0 | _00_Pn2_OUTPUT_0 | _00_Pn3_OUTPUT_0 | _00_Pn4_OUTPUT_0;
P5 = _00_Pn0_OUTPUT_0 | _00_Pn1_OUTPUT_0 | _00_Pn2_OUTPUT_0 | _00_Pn4_OUTPUT_0 | _00_Pn5_OUTPUT_0 |
_00_Pn6_OUTPUT_0 | _00_Pn7_OUTPUT_0;
P6 = _00_Pn0_OUTPUT_0 | _00_Pn1_OUTPUT_0 | _00_Pn4_OUTPUT_0 | _00_Pn5_OUTPUT_0 | _00_Pn6_OUTPUT_0 |
_00_Pn7_OUTPUT_0;
P7 = _00_Pn0_OUTPUT_0 | _00_Pn1_OUTPUT_0 | _00_Pn2_OUTPUT_0 | _00_Pn3_OUTPUT_0 | _00_Pn4_OUTPUT_0 |
_00_Pn5_OUTPUT_0 | _00_Pn6_OUTPUT_0 | _00_Pn7_OUTPUT_0;
P9 = _00_Pn2_OUTPUT_0 | _00_Pn3_OUTPUT_0 | _00_Pn4_OUTPUT_0 | _00_Pn5_OUTPUT_0 | _00_Pn6_OUTPUT_0 |
_00_Pn7_OUTPUT_0;
P10 = _00_Pn0_OUTPUT_0 | _00_Pn1_OUTPUT_0 | _00_Pn2_OUTPUT_0 | _00_Pn3_OUTPUT_0 | _00_Pn4_OUTPUT_0 |
_00_Pn5_OUTPUT_0 | _00_Pn6_OUTPUT_0 | _00_Pn7_OUTPUT_0;
P12 = _00_Pn0_OUTPUT_0 | _00_Pn5_OUTPUT_0 | _00_Pn6_OUTPUT_0 | _00_Pn7_OUTPUT_0;
P13 = _00_Pn0_OUTPUT_0;
P15 = _00_Pn0_OUTPUT_0 | _00_Pn1_OUTPUT_0 | _00_Pn2_OUTPUT_0 | _00_Pn3_OUTPUT_0 | _00_Pn4_OUTPUT_0 |
_00_Pn5_OUTPUT_0 | _00_Pn6_OUTPUT_0;
POM6 = _04_POMn2_NCH_ON | _08_POMn3_NCH_ON;
PMC7 = _00_PMCn0_DI_ON | _00_PMCn1_DI_ON | _00_PMCn2_DI_ON | _00_PMCn3_DI_ON | _00_PMCn4_DI_ON | _E0_PMC7_DEFAULT;
PMC12 = _00_PMCn0_DI_ON | _00_PMCn5_DI_ON | _DE_PMC12_DEFAULT;
PSRSEL = _00_PSR14_NORMAL | _00_PSR120_NORMAL | _00_PSR30_NORMAL | _00_PSR10_NORMAL;
ADPC = _0D_ADPC_DI_ON;
PM0 = _00_PMn0_MODE_OUTPUT | _00_PMn1_MODE_OUTPUT | _00_PMn2_MODE_OUTPUT | _00_PMn3_MODE_OUTPUT | _F0_PM0_DEFAULT;
PM1 = _00_PMn0_MODE_OUTPUT | _02_PMn1_NOT_USE | _04_PMn2_NOT_USE | _00_PMn3_MODE_OUTPUT | _00_PMn4_MODE_OUTPUT |
_20_PMn5_NOT_USE | _40_PMn6_NOT_USE | _80_PMn7_NOT_USE;
PM3 = _00_PMn0_MODE_OUTPUT | _02_PMn1_NOT_USE | _00_PMn2_MODE_OUTPUT | _08_PMn3_NOT_USE | _10_PMn4_NOT_USE |
_E0_PM3_DEFAULT;
PM4 = _01_PMn0_NOT_USE | _00_PMn1_MODE_OUTPUT | _00_PMn2_MODE_OUTPUT | _00_PMn3_MODE_OUTPUT | _00_PMn4_MODE_OUTPUT |
_20_PMn5_NOT_USE | _40_PMn6_NOT_USE | _80_PMn7_NOT_USE;
PM5 = _00_PMn0_MODE_OUTPUT | _00_PMn1_MODE_OUTPUT | _00_PMn2_MODE_OUTPUT | _08_PMn3_NOT_USE | _00_PMn4_MODE_OUTPUT |
_00_PMn5_MODE_OUTPUT | _00_PMn6_MODE_OUTPUT | _00_PMn7_MODE_OUTPUT;
PM6 = _00_PMn0_MODE_OUTPUT | _00_PMn1_MODE_OUTPUT | _04_PMn2_NOT_USE | _08_PMn3_NOT_USE | _00_PMn4_MODE_OUTPUT |
_00_PMn5_MODE_OUTPUT | _00_PMn6_MODE_OUTPUT | _00_PMn7_MODE_OUTPUT;
PM7 = _00_PMn0_MODE_OUTPUT | _00_PMn1_MODE_OUTPUT | _00_PMn2_MODE_OUTPUT | _00_PMn3_MODE_OUTPUT |
_00_PMn4_MODE_OUTPUT | _00_PMn5_MODE_OUTPUT | _00_PMn6_MODE_OUTPUT | _00_PMn7_MODE_OUTPUT;
PM9 = _01_PMn0_NOT_USE | _02_PMn1_NOT_USE | _00_PMn2_MODE_OUTPUT | _00_PMn3_MODE_OUTPUT | _00_PMn4_MODE_OUTPUT |
_00_PMn5_MODE_OUTPUT | _00_PMn6_MODE_OUTPUT | _00_PMn7_MODE_OUTPUT;
PM10 = _00_PMn0_MODE_OUTPUT | _00_PMn1_MODE_OUTPUT | _00_PMn2_MODE_OUTPUT | _00_PMn3_MODE_OUTPUT |
_00_PMn4_MODE_OUTPUT | _00_PMn5_MODE_OUTPUT | _00_PMn6_MODE_OUTPUT | _00_PMn7_MODE_OUTPUT;
PM12 = _00_PMn0_MODE_OUTPUT | _00_PMn5_MODE_OUTPUT | _00_PMn6_MODE_OUTPUT | _00_PMn7_MODE_OUTPUT | _1E_PM12_DEFAULT;
PM15 = _00_PMn0_MODE_OUTPUT | _00_PMn1_MODE_OUTPUT | _00_PMn2_MODE_OUTPUT | _00_PMn3_MODE_OUTPUT |
_00_PMn4_MODE_OUTPUT | _00_PMn5_MODE_OUTPUT | _00_PMn6_MODE_OUTPUT | _80_PMn7_NOT_USE;
}
/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

265
r_cg_port.h

@ -0,0 +1,265 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2021 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_cg_port.h
* Version : CodeGenerator for RL78/F14 V2.03.07.02 [08 Nov 2021]
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for PORT module.
* Creation Date: 2026-01-21
***********************************************************************************************************************/
#ifndef PORT_H
#define PORT_H
/***********************************************************************************************************************
Macro definitions (Register bit)
***********************************************************************************************************************/
/*
Port Mode Register (PMm)
*/
/* Pmn pin I/O mode selection (PMm7 - PMm0) */
#define _01_PMn0_NOT_USE (0x01U) /* not use Pn0 as digital I/O */
#define _01_PMn0_MODE_INPUT (0x01U) /* use Pn0 as input mode */
#define _00_PMn0_MODE_OUTPUT (0x00U) /* use Pn0 as output mode */
#define _02_PMn1_NOT_USE (0x02U) /* not use Pn1 as digital I/O */
#define _02_PMn1_MODE_INPUT (0x02U) /* use Pn1 as input mode */
#define _00_PMn1_MODE_OUTPUT (0x00U) /* use Pn1 as output mode */
#define _04_PMn2_NOT_USE (0x04U) /* not use Pn2 as digital I/O */
#define _04_PMn2_MODE_INPUT (0x04U) /* use Pn2 as input mode */
#define _00_PMn2_MODE_OUTPUT (0x00U) /* use Pn2 as output mode */
#define _08_PMn3_NOT_USE (0x08U) /* not use Pn3 as digital I/O */
#define _08_PMn3_MODE_INPUT (0x08U) /* use Pn3 as input mode */
#define _00_PMn3_MODE_OUTPUT (0x00U) /* use Pn3 as output mode */
#define _10_PMn4_NOT_USE (0x10U) /* not use Pn4 as digital I/O */
#define _10_PMn4_MODE_INPUT (0x10U) /* use Pn4 as input mode */
#define _00_PMn4_MODE_OUTPUT (0x00U) /* use Pn4 as output mode */
#define _20_PMn5_NOT_USE (0x20U) /* not use Pn5 as digital I/O */
#define _20_PMn5_MODE_INPUT (0x20U) /* use Pn5 as input mode */
#define _00_PMn5_MODE_OUTPUT (0x00U) /* use Pn5 as output mode */
#define _40_PMn6_NOT_USE (0x40U) /* not use Pn6 as digital I/O */
#define _40_PMn6_MODE_INPUT (0x40U) /* use Pn6 as input mode */
#define _00_PMn6_MODE_OUTPUT (0x00U) /* use Pn6 as output mode */
#define _80_PMn7_NOT_USE (0x80U) /* not use Pn7 as digital I/O */
#define _80_PMn7_MODE_INPUT (0x80U) /* use Pn7 as input mode */
#define _00_PMn7_MODE_OUTPUT (0x00U) /* use Pn7 as output mode */
/*
Port Register (Pm)
*/
/* Pmn pin data (Pm0 to Pm7) */
#define _00_Pn0_OUTPUT_0 (0x00U) /* Pn0 output 0 */
#define _01_Pn0_OUTPUT_1 (0x01U) /* Pn0 output 1 */
#define _00_Pn1_OUTPUT_0 (0x00U) /* Pn1 output 0 */
#define _02_Pn1_OUTPUT_1 (0x02U) /* Pn1 output 1 */
#define _00_Pn2_OUTPUT_0 (0x00U) /* Pn2 output 0 */
#define _04_Pn2_OUTPUT_1 (0x04U) /* Pn2 output 1 */
#define _00_Pn3_OUTPUT_0 (0x00U) /* Pn3 output 0 */
#define _08_Pn3_OUTPUT_1 (0x08U) /* Pn3 output 1 */
#define _00_Pn4_OUTPUT_0 (0x00U) /* Pn4 output 0 */
#define _10_Pn4_OUTPUT_1 (0x10U) /* Pn4 output 1 */
#define _00_Pn5_OUTPUT_0 (0x00U) /* Pn5 output 0 */
#define _20_Pn5_OUTPUT_1 (0x20U) /* Pn5 output 1 */
#define _00_Pn6_OUTPUT_0 (0x00U) /* Pn6 output 0 */
#define _40_Pn6_OUTPUT_1 (0x40U) /* Pn6 output 1 */
#define _00_Pn7_OUTPUT_0 (0x00U) /* Pn7 output 0 */
#define _80_Pn7_OUTPUT_1 (0x80U) /* Pn7 output 1 */
/*
Pull-up Resistor Option Register (PUm)
*/
/* Pmn pin on-chip pull-up resistor selection (PUmn) */
#define _00_PUn0_PULLUP_OFF (0x00U) /* Pn0 pull-up resistor not connected */
#define _01_PUn0_PULLUP_ON (0x01U) /* Pn0 pull-up resistor connected */
#define _00_PUn1_PULLUP_OFF (0x00U) /* Pn1 pull-up resistor not connected */
#define _02_PUn1_PULLUP_ON (0x02U) /* Pn1 pull-up resistor connected */
#define _00_PUn2_PULLUP_OFF (0x00U) /* Pn2 Pull-up resistor not connected */
#define _04_PUn2_PULLUP_ON (0x04U) /* Pn2 pull-up resistor connected */
#define _00_PUn3_PULLUP_OFF (0x00U) /* Pn3 pull-up resistor not connected */
#define _08_PUn3_PULLUP_ON (0x08U) /* Pn3 pull-up resistor connected */
#define _00_PUn4_PULLUP_OFF (0x00U) /* Pn4 pull-up resistor not connected */
#define _10_PUn4_PULLUP_ON (0x10U) /* Pn4 pull-up resistor connected */
#define _00_PUn5_PULLUP_OFF (0x00U) /* Pn5 pull-up resistor not connected */
#define _20_PUn5_PULLUP_ON (0x20U) /* Pn5 pull-up resistor connected */
#define _00_PUn6_PULLUP_OFF (0x00U) /* Pn6 pull-up resistor not connected */
#define _40_PUn6_PULLUP_ON (0x40U) /* Pn6 pull-up resistor connected */
#define _00_PUn7_PULLUP_OFF (0x00U) /* Pn7 pull-up resistor not connected */
#define _80_PUn7_PULLUP_ON (0x80U) /* Pn7 pull-up resistor connected */
/*
Port Input Mode Register (PIMm)
*/
/* Pmn pin input buffer selection (PIMmn) */
#define _00_PIMn0_TTL_OFF (0x00U) /* set Pn0 normal input buffer */
#define _01_PIMn0_TTL_ON (0x01U) /* set Pn0 TTL input buffer */
#define _00_PIMn1_TTL_OFF (0x00U) /* set Pn1 normal input buffer */
#define _02_PIMn1_TTL_ON (0x02U) /* set Pn1 TTL input buffer */
#define _00_PIMn2_TTL_OFF (0x00U) /* set Pn2 normal input buffer */
#define _04_PIMn2_TTL_ON (0x04U) /* set Pn2 TTL input buffer */
#define _00_PIMn3_TTL_OFF (0x00U) /* set Pn3 normal input buffer */
#define _08_PIMn3_TTL_ON (0x08U) /* set Pn3 TTL input buffer */
#define _00_PIMn4_TTL_OFF (0x00U) /* set Pn4 normal input buffer */
#define _10_PIMn4_TTL_ON (0x10U) /* set Pn4 TTL input buffer */
#define _00_PIMn5_TTL_OFF (0x00U) /* set Pn5 normal input buffer */
#define _20_PIMn5_TTL_ON (0x20U) /* set Pn5 TTL input buffer */
#define _00_PIMn6_TTL_OFF (0x00U) /* set Pn6 normal input buffer */
#define _40_PIMn6_TTL_ON (0x40U) /* set Pn6 TTL input buffer */
#define _00_PIMn7_TTL_OFF (0x00U) /* set Pn7 normal input buffer */
#define _80_PIMn7_TTL_ON (0x80U) /* set Pn7 TTL input buffer */
/*
Port Input Threshold Control Register (PITHLm)
*/
/* Pmn pin input threshold selection (PITHLmn) */
#define _00_PITHLn0_SCHMITT3_OFF (0x00U) /* set Pn0 schmitt 1 input (default) */
#define _01_PITHLn0_SCHMITT3_ON (0x01U) /* set Pn0 schmitt 3 input */
#define _00_PITHLn1_SCHMITT3_OFF (0x00U) /* set Pn1 schmitt 1 input (default) */
#define _02_PITHLn1_SCHMITT3_ON (0x02U) /* set Pn1 schmitt 3 input */
#define _00_PITHLn2_SCHMITT3_OFF (0x00U) /* set Pn2 schmitt 1 input (default) */
#define _04_PITHLn2_SCHMITT3_ON (0x04U) /* set Pn2 schmitt 3 input */
#define _00_PITHLn3_SCHMITT3_OFF (0x00U) /* set Pn3 schmitt 1 input (default) */
#define _08_PITHLn3_SCHMITT3_ON (0x08U) /* set Pn3 schmitt 3 input */
#define _00_PITHLn4_SCHMITT3_OFF (0x00U) /* set Pn4 schmitt 1 input (default) */
#define _10_PITHLn4_SCHMITT3_ON (0x10U) /* set Pn4 schmitt 3 input */
#define _00_PITHLn5_SCHMITT3_OFF (0x00U) /* set Pn5 schmitt 1 input (default) */
#define _20_PITHLn5_SCHMITT3_ON (0x20U) /* set Pn5 schmitt 3 input */
#define _00_PITHLn6_SCHMITT3_OFF (0x00U) /* set Pn6 schmitt 1 input (default) */
#define _40_PITHLn6_SCHMITT3_ON (0x40U) /* set Pn6 schmitt 3 input */
#define _00_PITHLn7_SCHMITT3_OFF (0x00U) /* set Pn7 schmitt 1 input (default) */
#define _80_PITHLn7_SCHMITT3_ON (0x80U) /* set Pn7 schmitt 3 input */
/*
Port Output Mode Register (POMm)
*/
/* Pmn pin output mode selection (POMmn) */
#define _00_POMn0_NCH_OFF (0x00U) /* set Pn0 output normal mode */
#define _01_POMn0_NCH_ON (0x01U) /* set Pn0 output N-ch open-drain mode */
#define _00_POMn1_NCH_OFF (0x00U) /* set Pn1 output normal mode */
#define _02_POMn1_NCH_ON (0x02U) /* set Pn1 output N-ch open-drain mode */
#define _00_POMn2_NCH_OFF (0x00U) /* set Pn2 output normal mode */
#define _04_POMn2_NCH_ON (0x04U) /* set Pn2 output N-ch open-drain mode */
#define _00_POMn3_NCH_OFF (0x00U) /* set Pn3 output normal mode */
#define _08_POMn3_NCH_ON (0x08U) /* set Pn3 output N-ch open-drain mode */
#define _00_POMn4_NCH_OFF (0x00U) /* set Pn4 output normal mode */
#define _10_POMn4_NCH_ON (0x10U) /* set Pn4 output N-ch open-drain mode */
#define _00_POMn5_NCH_OFF (0x00U) /* set Pn5 output normal mode */
#define _20_POMn5_NCH_ON (0x20U) /* set Pn5 output N-ch open-drain mode */
#define _00_POMn6_NCH_OFF (0x00U) /* set Pn6 output normal mode */
#define _40_POMn6_NCH_ON (0x40U) /* set Pn6 output N-ch open-drain mode */
#define _00_POMn7_NCH_OFF (0x00U) /* set Pn7 output normal mode */
#define _80_POMn7_NCH_ON (0x80U) /* set Pn7 output N-ch open-drain mode */
/*
Port Operation Mode Register (PMCm)
*/
/* Pmn pin digital input buffer selection (PMCmn) */
#define _01_PMCn0_NOT_USE (0x01U) /* not use Pn0 digital input */
#define _00_PMCn0_DI_ON (0x00U) /* enable Pn0 digital input */
#define _02_PMCn1_NOT_USE (0x02U) /* not use Pn1 digital input */
#define _00_PMCn1_DI_ON (0x00U) /* enable Pn1 digital input */
#define _04_PMCn2_NOT_USE (0x04U) /* not use Pn2 digital input */
#define _00_PMCn2_DI_ON (0x00U) /* enable Pn2 digital input */
#define _08_PMCn3_NOT_USE (0x08U) /* not use Pn3 digital input */
#define _00_PMCn3_DI_ON (0x00U) /* enable Pn3 digital input */
#define _10_PMCn4_NOT_USE (0x10U) /* not use Pn4 digital input */
#define _00_PMCn4_DI_ON (0x00U) /* enable Pn4 digital input */
#define _20_PMCn5_NOT_USE (0x20U) /* not use Pn5 digital input */
#define _00_PMCn5_DI_ON (0x00U) /* enable Pn5 digital input */
#define _40_PMCn6_NOT_USE (0x40U) /* not use Pn6 digital input */
#define _00_PMCn6_DI_ON (0x00U) /* enable Pn6 digital input */
#define _80_PMCn7_NOT_USE (0x80U) /* not use Pn7 digital input */
#define _00_PMCn7_DI_ON (0x00U) /* enable Pn7 digital input */
/*
Port output slew rate select register (PSRSEL)
*/
/* P140/PCLBUZ0 pin output mode selection (PSR140) */
#define _00_PSR140_NORMAL (0x00U) /* normal mode (5 V/5 ns) */
#define _20_PSR140_SLOW (0x20U) /* slow mode (25 V/5 ns (target) (TYP.)) */
/* P14/SCK01/SCL01/TO06/TRDIOC0 pin output mode selection (PSR14) */
#define _00_PSR14_NORMAL (0x00U) /* normal mode (5 V/5 ns) */
#define _10_PSR14_SLOW (0x10U) /* slow mode (25 V/5 ns (target) (TYP.)) */
/* P120/SO01/TO07/TRDIOD0 pin output mode selection (PSR120) */
#define _00_PSR120_NORMAL (0x00U) /* normal mode (5 V/5 ns) */
#define _08_PSR120_SLOW (0x08U) /* slow mode (25 V/5 ns (target) (TYP.)) */
/* P30/TO01/TRDIOD1/SNZOUT0 pin output mode selection (PSR30) */
#define _00_PSR30_NORMAL (0x00U) /* normal mode (5 V/5 ns) */
#define _04_PSR30_SLOW (0x04U) /* slow mode (25 V/5 ns (target) (TYP.)) */
/* P12/SO10/TO11/(TRDIOD0)/TXD1/SNZOUT3 pin output mode selection (PSR12) */
#define _00_PSR12_NORMAL (0x00U) /* normal mode (5 V/5 ns) */
#define _02_PSR12_SLOW (0x02U) /* slow mode (25 V/5 ns (target) (TYP.)) */
/* P10/SCK10/TO13/TRJO0/SCL10/LTXD1/CTXD0 pin output mode selection (PSR10) */
#define _00_PSR10_NORMAL (0x00U) /* normal mode (5 V/5 ns) */
#define _01_PSR10_SLOW (0x01U) /* slow mode (25 V/5 ns (target) (TYP.)) */
/*
AD port configuration register (ADPC)
*/
/* Analog input/digital input switching (ADPC4 - ADPC0) */
#define _00_ADPC_DI_OFF (0x00U) /* use P33, P34, P80 - P87, P90 - P97, P100 - P105 as analog input */
#define _18_ADPC_DI_ON (0x18U) /* use P105 as digital input */
#define _17_ADPC_DI_ON (0x17U) /* use P104 - P105 as digital input */
#define _16_ADPC_DI_ON (0x16U) /* use P103 - P105 as digital input */
#define _15_ADPC_DI_ON (0x15U) /* use P102 - P105 as digital input */
#define _14_ADPC_DI_ON (0x14U) /* use P101 - P105 as digital input */
#define _13_ADPC_DI_ON (0x13U) /* use P100 - P105 as digital input */
#define _12_ADPC_DI_ON (0x12U) /* use P97, P100 - P105 as digital input */
#define _11_ADPC_DI_ON (0x11U) /* use P96 - P97, P100 - P105 as digital input */
#define _10_ADPC_DI_ON (0x10U) /* use P95 - P97, P100 - P105 as digital input */
#define _0F_ADPC_DI_ON (0x0FU) /* use P94 - P97, P100 - P105 as digital input */
#define _0E_ADPC_DI_ON (0x0EU) /* use P93 - P97, P100 - P105 as digital input */
#define _0D_ADPC_DI_ON (0x0DU) /* use P92 - P97, P100 - P105 as digital input */
#define _0C_ADPC_DI_ON (0x0CU) /* use P91 - P97, P100 - P105 as digital input */
#define _0B_ADPC_DI_ON (0x0BU) /* use P90 - P97, P100 - P105 as digital input */
#define _0A_ADPC_DI_ON (0x0AU) /* use P87, P90 - P97, P100 - P105 as digital input */
#define _09_ADPC_DI_ON (0x09U) /* use P86 - P87, P90 - P97, P100 - P105 as digital input */
#define _08_ADPC_DI_ON (0x08U) /* use P85 - P87, P90 - P97, P100 - P105 as digital input */
#define _07_ADPC_DI_ON (0x07U) /* use P84 - P87, P90 - P97, P100 - P105 as digital input */
#define _06_ADPC_DI_ON (0x06U) /* use P83 - P87, P90 - P97, P100 - P105 as digital input */
#define _05_ADPC_DI_ON (0x05U) /* use P82 - P87, P90 - P97, P100 - P105 as digital input */
#define _04_ADPC_DI_ON (0x04U) /* use P81 - P87, P90 - P97, P100 - P105 as digital input */
#define _03_ADPC_DI_ON (0x03U) /* use P80 - P87, P90 - P97, P100 - P105 as digital input */
#define _02_ADPC_DI_ON (0x02U) /* use P34, P80 - P87, P90 - P97, P100 - P105 as digital input */
#define _01_ADPC_DI_ON (0x01U) /* use P33, P34, P80 - P87, P90 - P97, P100 - P105 as digital input */
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
#define _F0_PM0_DEFAULT (0xF0U) /* PM0 default value */
#define _E0_PM3_DEFAULT (0xE0U) /* PM3 default value */
#define _1E_PM12_DEFAULT (0x1EU) /* PM12 default value */
#define _FE_PM14_DEFAULT (0xFEU) /* PM14 default value */
#define _E0_PMC7_DEFAULT (0xE0U) /* PMC7 default value */
#define _DE_PMC12_DEFAULT (0xDEU) /* PMC12 default value */
/***********************************************************************************************************************
Typedef definitions
***********************************************************************************************************************/
/***********************************************************************************************************************
Global functions
***********************************************************************************************************************/
void R_PORT_Create(void);
/* Start user code for function. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#endif

51
r_cg_port_user.c

@ -0,0 +1,51 @@
/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2021 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
* File Name : r_cg_port_user.c
* Version : CodeGenerator for RL78/F14 V2.03.07.02 [08 Nov 2021]
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for PORT module.
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_port.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"
/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

14
r_cg_serial.c

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for Serial module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************
@ -77,7 +77,7 @@ void R_SAU0_Create(void)
NOP();
NOP();
NOP();
SPS0 = _0004_SAU_CK00_FCLK_4 | _0040_SAU_CK01_FCLK_4;
SPS0 = _0000_SAU_CK00_FCLK_0 | _0000_SAU_CK01_FCLK_0;
R_UART0_Create();
}
@ -103,13 +103,13 @@ void R_UART0_Create(void)
SMR00 = _0020_SAU_SMRMN_INITIALVALUE | _0000_SAU_CLOCK_SELECT_CK00 | _0000_SAU_TRIGGER_SOFTWARE |
_0002_SAU_MODE_UART | _0000_SAU_TRANSFER_END;
SCR00 = _8000_SAU_TRANSMISSION | _0000_SAU_PARITY_NONE | _0080_SAU_LSB | _0010_SAU_STOP_1 | _0007_SAU_LENGTH_8;
SDR00 = _CE00_UART0_TRANSMIT_DIVISOR;
SDR00 = _4400_UART0_TRANSMIT_DIVISOR;
NFEN0 |= _01_SAU_RXD0_FILTER_ON;
SIR01 = _0004_SAU_SIRMN_FECTMN | _0002_SAU_SIRMN_PECTMN | _0001_SAU_SIRMN_OVCTMN; /* clear error flag */
SMR01 = _0020_SAU_SMRMN_INITIALVALUE | _0000_SAU_CLOCK_SELECT_CK00 | _0100_SAU_TRIGGER_RXD | _0000_SAU_EDGE_FALL |
_0002_SAU_MODE_UART | _0000_SAU_TRANSFER_END;
SCR01 = _4000_SAU_RECEPTION | _0000_SAU_PARITY_NONE | _0080_SAU_LSB | _0010_SAU_STOP_1 | _0007_SAU_LENGTH_8;
SDR01 = _CE00_UART0_RECEIVE_DIVISOR;
SDR01 = _4400_UART0_RECEIVE_DIVISOR;
SO0 |= _0001_SAU_CH0_DATA_OUTPUT_1;
SOL0 |= _0000_SAU_CHANNEL0_NORMAL; /* output level normal */
SOE0 |= _0001_SAU_CH0_OUTPUT_ENABLE; /* enable UART0 output */
@ -226,7 +226,7 @@ void R_SAU1_Create(void)
NOP();
NOP();
NOP();
SPS1 = _0004_SAU_CK00_FCLK_4 | _0040_SAU_CK01_FCLK_4;
SPS1 = _0000_SAU_CK00_FCLK_0 | _0000_SAU_CK01_FCLK_0;
R_UART1_Create();
}
@ -252,13 +252,13 @@ void R_UART1_Create(void)
SMR10 = _0020_SAU_SMRMN_INITIALVALUE | _0000_SAU_CLOCK_SELECT_CK00 | _0000_SAU_TRIGGER_SOFTWARE |
_0002_SAU_MODE_UART | _0000_SAU_TRANSFER_END;
SCR10 = _8000_SAU_TRANSMISSION | _0000_SAU_PARITY_NONE | _0080_SAU_LSB | _0010_SAU_STOP_1 | _0007_SAU_LENGTH_8;
SDR10 = _CE00_UART1_TRANSMIT_DIVISOR;
SDR10 = _4400_UART1_TRANSMIT_DIVISOR;
NFEN0 |= _04_SAU_RXD1_FILTER_ON;
SIR11 = _0004_SAU_SIRMN_FECTMN | _0002_SAU_SIRMN_PECTMN | _0001_SAU_SIRMN_OVCTMN; /* clear error flag */
SMR11 = _0020_SAU_SMRMN_INITIALVALUE | _0000_SAU_CLOCK_SELECT_CK00 | _0100_SAU_TRIGGER_RXD | _0000_SAU_EDGE_FALL |
_0002_SAU_MODE_UART | _0000_SAU_TRANSFER_END;
SCR11 = _4000_SAU_RECEPTION | _0000_SAU_PARITY_NONE | _0080_SAU_LSB | _0010_SAU_STOP_1 | _0007_SAU_LENGTH_8;
SDR11 = _CE00_UART1_RECEIVE_DIVISOR;
SDR11 = _4400_UART1_RECEIVE_DIVISOR;
SO1 |= _0001_SAU_CH0_DATA_OUTPUT_1;
SOL1 |= _0000_SAU_CHANNEL0_NORMAL; /* output level normal */
SOE1 |= _0001_SAU_CH0_OUTPUT_ENABLE; /* enable UART1 output */

10
r_cg_serial.h

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for Serial module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
#ifndef SERIAL_H
@ -348,10 +348,10 @@ Macro definitions (Register bit)
/***********************************************************************************************************************
Macro definitions
***********************************************************************************************************************/
#define _CE00_UART0_RECEIVE_DIVISOR (0xCE00U)
#define _CE00_UART0_TRANSMIT_DIVISOR (0xCE00U)
#define _CE00_UART1_RECEIVE_DIVISOR (0xCE00U)
#define _CE00_UART1_TRANSMIT_DIVISOR (0xCE00U)
#define _4400_UART0_RECEIVE_DIVISOR (0x4400U)
#define _4400_UART0_TRANSMIT_DIVISOR (0x4400U)
#define _4400_UART1_RECEIVE_DIVISOR (0x4400U)
#define _4400_UART1_TRANSMIT_DIVISOR (0x4400U)
#define _10_IICA0_MASTERADDRESS (0x10U)
#define _55_IICA0_IICWH_VALUE (0x55U)
#define _4C_IICA0_IICWL_VALUE (0x4CU)

73
r_cg_serial_user.c

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for Serial module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************
@ -32,6 +32,7 @@ Includes
#include "r_cg_macrodriver.h"
#include "r_cg_serial.h"
/* Start user code for include. Do not edit comment generated here */
#include "uart.h"
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"
@ -67,6 +68,13 @@ extern volatile uint16_t g_iica0_rx_len; /* iica0 receive data cou
extern volatile uint8_t * gp_iica0_tx_address; /* iica0 send buffer address */
extern volatile uint16_t g_iica0_tx_cnt; /* iica0 send data count */
/* Start user code for global. Do not edit comment generated here */
extern volatile uint8_t rs485_rx_done;
extern volatile uint8_t rs485_rx_index;
extern volatile uint8_t rs485_rx_buffer[UART_RX_BUF_SIZE];
extern volatile uint16_t rs485_rx_length;
extern volatile uint8_t g_rs485_bridge_active;
extern volatile uint8_t g_rs485_bridge_done;
void RS485_Bridge_Push(uint8_t b);
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
@ -136,6 +144,52 @@ static void __near r_uart0_interrupt_send(void)
static void r_uart0_callback_receiveend(void)
{
/* Start user code. Do not edit comment generated here */
uint8_t c;
if (g_rs485_bridge_active) {
// ?????? ?? buffer[0]? 1??? ????? ?????? 0?? ???
c = rs485_rx_buffer[0];
RS485_Bridge_Push(c);
// "? ? ??" ?? ??
if (c == '\n') {
g_rs485_bridge_done = 1;
}
// ?? 1??? ?? ??
R_UART0_Receive((uint8_t*)&rs485_rx_buffer[0], 1);
return;
}
c = rs485_rx_buffer[rs485_rx_index];
// Bridge mode: stream RS485 bytes to PC as they arrive
if (g_rs485_bridge_active) {
RS485_Bridge_Push(c);
if (c == '\n') {
g_rs485_bridge_done = 1;
}
// ?? 1??? ?? ?? (index 0 ???)
rs485_rx_index = 0;
rs485_rx_length = 0;
R_UART0_Receive((uint8_t*)&rs485_rx_buffer[0], 1);
return;
}
if (rs485_rx_index < (UART_RX_BUF_SIZE - 1)) {
rs485_rx_index++;
rs485_rx_length = rs485_rx_index;
}
if (c == '\n' || rs485_rx_index >= (UART_RX_BUF_SIZE - 1)) {
rs485_rx_done = 1;
// ?? Receive? main loop?? ?? ??? ??,
// ??? ?? ??? ?(?? ??)
} else {
R_UART0_Receive((uint8_t*)&rs485_rx_buffer[rs485_rx_index], 1);
}
/* End user code. Do not edit comment generated here */
}
@ -161,6 +215,7 @@ static void r_uart0_callback_softwareoverrun(uint16_t rx_data)
static void r_uart0_callback_sendend(void)
{
/* Start user code. Do not edit comment generated here */
rs485_set_tx(0);
/* End user code. Do not edit comment generated here */
}
@ -244,6 +299,22 @@ static void __near r_uart1_interrupt_send(void)
static void r_uart1_callback_receiveend(void)
{
/* Start user code. Do not edit comment generated here */
uint8_t c = uart_rx_buffer[uart_rx_index];
uart_rx_index++;
uart_rx_length = uart_rx_index;
// 한 줄 입력 끝 or 버퍼 가득
if (c == '\n' || uart_rx_index >= (UART_RX_BUF_SIZE - 1))
{
uart_rx_done = 1;
}
else
{
// 다음 1바이트 계속 수신
R_UART1_Receive((uint8_t *)&uart_rx_buffer[uart_rx_index], 1);
}
/* End user code. Do not edit comment generated here */
}

2
r_cg_userdefine.h

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file includes user definition.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
#ifndef _USER_DEF_H

2
r_cg_wdt.c

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for WDT module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************

2
r_cg_wdt.h

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for WDT module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
#ifndef WDT_H

2
r_cg_wdt_user.c

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements device driver for WDT module.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************

645
r_main.c

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements main function.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************
@ -31,9 +31,35 @@ Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_serial.h"
#include "r_cg_wdt.h"
/* Start user code for include. Do not edit comment generated here */
#include "common.h"
#include "dipSwitch.h"
#include "gatectrl.h"
#include <string.h>
#include <ctype.h>
#include <stddef.h>
#include <r_cg_port.h>
#define CMD_MAX 529
#define RS485_BRIDGE_FIFO_SZ 256
volatile uint8_t uart_rx_done = 0;
volatile uint8_t uart_rx_index = 0;
volatile uint8_t uart_rx_buffer[UART_RX_BUF_SIZE] = {0};
volatile uint16_t uart_rx_length = 0;
volatile uint8_t rs485_rx_done = 0;
volatile uint8_t rs485_rx_index = 0;
volatile uint8_t rs485_rx_buffer[UART_RX_BUF_SIZE] = {0};
volatile uint16_t rs485_rx_length = 0;
volatile uint8_t g_rs485_bridge_active = 0;
volatile uint8_t g_rs485_bridge_done = 0;
// (1~32)
uint8_t g_fixed_addr = 1;
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"
@ -41,6 +67,600 @@ Includes
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
static volatile uint8_t s_rb_fifo[RS485_BRIDGE_FIFO_SZ];
static volatile uint8_t s_rb_head = 0;
static volatile uint8_t s_rb_tail = 0;
void RS485_Bridge_Push(uint8_t b)
{
uint8_t next = (uint8_t)(s_rb_head + 1);
if (next >= RS485_BRIDGE_FIFO_SZ) next = 0;
// FIFO full이면 tail을 당겨서 “최신 데이터 우선”으로 유지(드랍 정책)
if (next == s_rb_tail) {
uint8_t t = (uint8_t)(s_rb_tail + 1);
if (t >= RS485_BRIDGE_FIFO_SZ) t = 0;
s_rb_tail = t;
}
s_rb_fifo[s_rb_head] = b;
s_rb_head = next;
}
static void RS485_Bridge_ResetFifo(void)
{
s_rb_head = 0;
s_rb_tail = 0;
}
static void RS485_Bridge_DrainToPC(void)
{
// UART1이 전송 중이면(드라이버 카운트) 새 전송 시작하지 않음
extern volatile uint16_t g_uart1_tx_count;
static char out[2];
while (s_rb_tail != s_rb_head) {
if (g_uart1_tx_count != 0U) break;
out[0] = (char)s_rb_fifo[s_rb_tail];
out[1] = '\0';
uart1_send_string(out); // PC(UART1)로 1바이트 전송 시작
s_rb_tail++;
if (s_rb_tail >= RS485_BRIDGE_FIFO_SZ) s_rb_tail = 0;
}
}
static unsigned char hex2byte(char h, char l)
{
unsigned char hi, lo;
if (h >= 'a' && h <= 'f') h -= 32;
if (l >= 'a' && l <= 'f') l -= 32;
hi = (h >= 'A') ? (unsigned char)(h - 'A' + 10) : (unsigned char)(h - '0');
lo = (l >= 'A') ? (unsigned char)(l - 'A' + 10) : (unsigned char)(l - '0');
return (unsigned char)((hi << 4) | lo);
}
typedef enum {
PREFIX_NONE = 0,
PREFIX_CAL,
PREFIX_EOL
} PrefixMode;
static PrefixMode s_prefix_mode = PREFIX_NONE;
static int parse_x_prefix(const char *s, int len,
uint8_t *addr, uint8_t *ch,
char *mode, uint8_t *hash_on, uint8_t *anaout_on, uint8_t *check_on, int *payload_pos)
{
*hash_on = 0;
*anaout_on = 0;
*check_on = 1;
if (len < 8) return 0;
if (!(s[0] == 'x' || s[0] == 'X')) return 0;
if (!isdigit((unsigned char)s[1]) || !isdigit((unsigned char)s[2])) return -1;
if (s[3] == 'c' || s[3] == 'C') *mode = 'C';
else if (s[3] == 'e' || s[3] == 'E') *mode = 'E';
else return -1;
if (s[4] != '_') return -1;
if (!isdigit((unsigned char)s[5]) || !isdigit((unsigned char)s[6]) || !isdigit((unsigned char)s[7])) return -1;
*addr = (uint8_t)((s[1] - '0') * 10 + (s[2] - '0'));
*ch = (uint8_t)((s[5] - '0') * 100 + (s[6] - '0') * 10 + (s[7] - '0'));
// prefix만 온 케이스: x01e_001 / x01c_001
if (len == 8) {
*payload_pos = len;
return 1;
}
// payload 있는 케이스: x01c_001:...
if (s[8] == ':') {
*payload_pos = 9;
return 1;
}
// 3) flags: x01c_001011 or x01c_001011:...
if (len >= 11 &&
(s[8] == '0' || s[8] == '1') &&
(s[9] == '0' || s[9] == '1') &&
(s[10] == '0' || s[10] == '1'))
{
*hash_on = (uint8_t)(s[8] - '0');
*anaout_on = (uint8_t)(s[9] - '0');
*check_on = (uint8_t)(s[10] - '0');
// flags only
if (len == 11) {
*payload_pos = 11;
return 1;
}
// flags + payload
if (len >= 12 && s[11] == ':') {
*payload_pos = 12;
return 1;
}
return -1;
}
return -1;
}
typedef enum {
CMD_SRC_PC = 0,
CMD_SRC_RS485 = 1
} CmdSource;
static void OUT_PRINT(CmdSource src, const char *s)
{
if (src == CMD_SRC_PC) PC_PRINT(s);
else RS485_PRINT(s);
}
// xNNv (예: x00v, x31v) 판별
static int parse_x_v_cmd(const char *s, int len, uint8_t *addr)
{
if (len != 4) return 0; // "x" + 2digit + "v" = 4
if (!(s[0] == 'x' || s[0] == 'X')) return 0;
if (!isdigit((unsigned char)s[1]) || !isdigit((unsigned char)s[2])) return 0;
if (!(s[3] == 'v' || s[3] == 'V')) return 0;
*addr = (uint8_t)((s[1] - '0') * 10 + (s[2] - '0'));
return 1;
}
static void send_v_response(CmdSource src, uint8_t addr)
{
char resp[8];
// "V00\r\n\0"
resp[0] = 'V';
resp[1] = (char)('0' + (addr / 10));
resp[2] = (char)('0' + (addr % 10));
resp[3] = '\r';
resp[4] = '\n';
resp[5] = '\0';
OUT_PRINT(src, resp);
}
// 보드1이 addr(1~31)을 RS485로 조회하고, 응답이 오면 스트리밍으로 PC에 전달
static void scan_one_addr_rs485(uint8_t addr)
{
char cmdline[8];
unsigned long guard;
// "xNNv\r\n"
cmdline[0] = 'x';
cmdline[1] = (char)('0' + (addr / 10));
cmdline[2] = (char)('0' + (addr % 10));
cmdline[3] = 'v';
cmdline[4] = '\r';
cmdline[5] = '\n';
cmdline[6] = '\0';
// 브릿지 준비
g_rs485_bridge_active = 1;
g_rs485_bridge_done = 0;
RS485_Bridge_ResetFifo();
R_UART0_Receive((uint8_t*)&rs485_rx_buffer[0], 1);
// 조회 커맨드 송신
RS485_PRINT(cmdline);
// 응답 들어오면(done)까지 드레인
guard = 0;
while (!g_rs485_bridge_done && guard++ < 300000UL) {
RS485_Bridge_DrainToPC();
}
// 남은 FIFO 마저
RS485_Bridge_DrainToPC();
// 브릿지 종료
g_rs485_bridge_active = 0;
// 다음 RS485 RX 재시작(기존 라인처리도 계속 돌릴 거면 유지)
rs485_rx_done = 0;
rs485_rx_index = 0;
rs485_rx_length = 0;
R_UART0_Receive((uint8_t*)&rs485_rx_buffer[0], 1);
}
static int build_line_from_rx(const volatile uint8_t *rx_buf, int rx_len,
char *out, int out_sz)
{
int i, idx = 0;
if (rx_len < 0) rx_len = 0;
if (rx_len > out_sz - 1) rx_len = out_sz - 1;
for (i = 0; i < rx_len && idx < out_sz - 1; i++) {
char c = (char)rx_buf[i];
if (c == '\r') continue;
if (c == '\n') break;
out[idx++] = c;
}
out[idx] = '\0';
return idx;
}
typedef enum {
PROTOCOL_I2CT,
PROTOCOL_OWIT,
PROTOCOL_I2CW,
PROTOCOL_I2CR,
PROTOCOL_OWIW,
PROTOCOL_OWIR,
PROTOCOL_UNKNOWN
} ProtocolType;
static ProtocolType detect_protocol(char header1, char header2)
{
if (header1 == 'I' && header2 == 'W') return PROTOCOL_I2CW;
if (header1 == 'I' && header2 == 'R') return PROTOCOL_I2CR;
if (header1 == 'O' && header2 == 'W') return PROTOCOL_OWIW;
if (header1 == 'O' && header2 == 'R') return PROTOCOL_OWIR;
return PROTOCOL_UNKNOWN;
}
static void cmd_unknown(const unsigned char *d, unsigned int len)
{
HOST_PRINT("Unknown cmd\r\n");
delay(100000);
}
static void process_cmd(ProtocolType protocol, uint8_t id,
const unsigned char *data, unsigned int len)
{
switch (protocol) {
case PROTOCOL_I2CT: I2C_T_Command_Mode_receiveData(data, (uint8_t)len, id); break;
case PROTOCOL_OWIT: OWI_T_CommandMode(data, (uint8_t)len, id); break;
case PROTOCOL_I2CW: I2C_Command_Mode_receiveData(data, (uint8_t)len, id); break;
case PROTOCOL_I2CR: I2C_Command_Mode_Send((uint8_t)len, id); break;
case PROTOCOL_OWIW: OWI_CommandMode(data, (uint8_t)len, id); break;
case PROTOCOL_OWIR: OWI_ReadBytesAndPrint(len, id); break;
default: cmd_unknown(data, len); break;
}
}
static void process_cmd_by_prefix(PrefixMode pm,
ProtocolType protocol, uint8_t id,
const unsigned char *data, unsigned int len)
{
if (pm == PREFIX_EOL) {
// TODO: EOL 전용 처리 필요 시 여기에
process_cmd(protocol, id, data, len);
} else {
// CAL 또는 Prefix 없음
process_cmd(protocol, id, data, len);
}
}
static void process_one_line(CmdSource src, const volatile uint8_t *rx_buf, uint16_t rx_len)
{
char line[UART_RX_BUF_SIZE];
uint8_t v_addr = 0;
int is_v = 0;
uint8_t a = 0;
int i;
int idx = 0;
int pos = 2;
ProtocolType proto;
uint8_t id;
unsigned int byte_len;
uint8_t cmd[CMD_MAX];
unsigned int k = 0;
char orig_line[UART_RX_BUF_SIZE];
int orig_len = 0;
s_prefix_mode = PREFIX_NONE;
// 1) RX 버퍼 -> line 구성 (CR/LF 제거)
idx = build_line_from_rx(rx_buf, (int)rx_len, line, (int)sizeof(line));
if (idx <= 0) return;
// xNNv 처리 (x-prefix 처리보다 먼저!)
{
is_v = parse_x_v_cmd(line, idx, &v_addr);
if (is_v) {
if (v_addr > 31) { OUT_PRINT(src, "Err:addr_range\r\n"); return; }
// 보드1(ADDR0) + PC에서 x00v => 00~31 스캔
if (g_fixed_addr == 0 && src == CMD_SRC_PC && v_addr == 0) {
// 자기 자신(00)은 즉시 응답
send_v_response(CMD_SRC_PC, 0);
// 01~31 순차 조회 (존재하는 보드만 VNN이 PC로 흘러옴)
for (a = 1; a <= 31; a++) {
scan_one_addr_rs485(a);
}
return;
}
// 그 외: 내 주소와 일치할 때만 응답
if (v_addr == g_fixed_addr) {
send_v_response(src, g_fixed_addr);
}
return; // v 커맨드 처리는 여기서 종료
}
}
// RS485 중계용 원본 저장
orig_len = idx;
memcpy(orig_line, line, (size_t)orig_len);
orig_line[orig_len] = '\0';
// 2) x-prefix 처리(있으면)
{
uint8_t addr = 0;
uint8_t ch = 0;
char mode = 0;
int payload_pos = 0;
uint8_t hash_on = 0;
uint8_t anaout_on = 0;
uint8_t check_on = 1;
int r = parse_x_prefix(line, idx, &addr, &ch, &mode, &hash_on, &anaout_on, &check_on, &payload_pos);
if (r == -1) {
OUT_PRINT(src, "Err:X_prefix\r\n");
return;
}
if (r == 1) {
if (addr > 31) { OUT_PRINT(src, "Err:addr_range\r\n"); return; }
if (ch < 1 || ch > 20) { OUT_PRINT(src, "Err:ch_range\r\n"); return; }
// 내 주소가 아니면:
// - 보드1(ADDR0) + PC에서 들어온 것: RS485로 중계 + RS485응답을 PC로 전달
// - 그 외(슬레이브거나 RS485수신): 조용히 무시
if (addr != g_fixed_addr) {
// 보드1(ADDR0) + PC에서 들어온 것만 RS485 중계
if (g_fixed_addr == 0 && src == CMD_SRC_PC) {
// 0) 브릿지 준비
g_rs485_bridge_active = 1;
g_rs485_bridge_done = 0;
RS485_Bridge_ResetFifo();
// 1) RS485 RX 재시작(1바이트씩 계속 받게)
rs485_rx_done = 0;
rs485_rx_index = 0;
rs485_rx_length = 0;
R_UART0_Receive((uint8_t*)&rs485_rx_buffer[0], 1);
// 2) RS485로 커맨드 송신
RS485_PRINT(orig_line);
RS485_PRINT("\r\n");
// 3) “응답이 들어오는 동안” 드레인 하면서 대기
{
unsigned long guard = 0;
while (!g_rs485_bridge_done && guard++ < 600000UL) {
RS485_Bridge_DrainToPC(); // ? 스트리밍
}
// 남은 FIFO도 끝까지 한번 더 드레인
RS485_Bridge_DrainToPC();
// 브릿지 종료
g_rs485_bridge_active = 0;
rs485_rx_done = 0;
rs485_rx_index = 0;
rs485_rx_length = 0;
R_UART0_Receive((uint8_t*)&rs485_rx_buffer[rs485_rx_index], 1);
if (!g_rs485_bridge_done) {
PC_PRINT("Err:rs485_timeout\r\n");
}
}
}
// 슬레이브(다른 보드)에서 addr mismatch는 조용히 무시
return;
}
// addr == g_fixed_addr: 로컬 처리(채널 선택)
if (mode == 'C') {
s_prefix_mode = PREFIX_CAL;
Cal_Init();
Gate_SetByNum(ch, hash_on, anaout_on, check_on);
GateCtrl_SelectChannel(ch);
} else {
s_prefix_mode = PREFIX_EOL;
Eol_Init();
Gate_SetByNum(ch, hash_on, anaout_on, check_on);
GateCtrl_SelectChannel(ch);
}
// prefix만 온 경우 / payload 처리
{
int rem = idx - payload_pos;
if (rem <= 0) {
if (mode == 'E') {
// EOL은 payload 없어도 OK
OUT_PRINT(src, "<ACK>XE\r\n");
return;
} else {
// CAL은 payload 필수
OUT_PRINT(src, "Err:CAL_need_payload\r\n");
return;
}
}
// payload 있는 케이스인데 EOL이면 금지
if (mode == 'E') {
OUT_PRINT(src, "Err:EOL_no_payload\r\n");
return;
}
// CAL + payload만 통과: payload를 line 앞으로 당김
for (i = 0; i < rem; i++) line[i] = line[payload_pos + i];
line[rem] = '\0';
idx = rem;
pos = 2;
}
}
// r==0 (prefix 없음): 그냥 아래 일반 커맨드 파싱으로 진행
}
// 3) 최소 길이 체크
if (idx < 7) {
OUT_PRINT(src, "Err:short\r\n");
return;
}
// 4) 프로토콜 판별
{
char h0 = (char)toupper((unsigned char)line[0]);
char h1 = (char)toupper((unsigned char)line[1]);
proto = detect_protocol(h0, h1);
}
if (proto == PROTOCOL_UNKNOWN) {
OUT_PRINT(src, "Err:ID\r\n");
return;
}
// 5) T 모드 처리 (OT/IT 등)
if (line[pos] == 't' || line[pos] == 'T') {
if (proto == PROTOCOL_OWIW) proto = PROTOCOL_OWIT;
else if (proto == PROTOCOL_I2CW) proto = PROTOCOL_I2CT;
pos++;
}
// 6) 구분자 처리
if (line[pos] == '_' || line[pos] == ':') pos++;
// 7) ID (hex 2글자)
if (pos + 1 >= idx) {
OUT_PRINT(src, "Err:id_short\r\n");
return;
}
id = hex2byte(line[pos], line[pos + 1]);
pos += 2;
// 8) 길이(3자리 10진)
if (pos + 2 >= idx ||
!(line[pos] >= '0' && line[pos] <= '9') ||
!(line[pos+1] >= '0' && line[pos+1] <= '9') ||
!(line[pos+2] >= '0' && line[pos+2] <= '9')) {
OUT_PRINT(src, "Err:len_dec\r\n");
return;
}
byte_len = (unsigned int)(100*(line[pos]-'0') + 10*(line[pos+1]-'0') + (line[pos+2]-'0'));
pos += 3;
if (byte_len > CMD_MAX) {
OUT_PRINT(src, "Err:len_range\r\n");
return;
}
// 9) Write 계열: payload(hex) 파싱
if (proto == PROTOCOL_OWIT || proto == PROTOCOL_I2CT ||
proto == PROTOCOL_OWIW || proto == PROTOCOL_I2CW)
{
if (byte_len == 0) {
OUT_PRINT(src, "Err:payload0\r\n");
return;
}
if ((int)(pos + (int)byte_len*2) > idx) {
OUT_PRINT(src, "Err:len_mismatch\r\n");
return;
}
for (k = 0; k < byte_len; k++) {
cmd[k] = hex2byte(line[pos + 2*k], line[pos + 2*k + 1]);
}
pos += (int)byte_len * 2;
if (pos != idx) {
OUT_PRINT(src, "Err:len_trail\r\n");
return;
}
}
// 10) Read 계열: payload 없어야 함
else if (proto == PROTOCOL_OWIR || proto == PROTOCOL_I2CR)
{
if (byte_len == 0) {
OUT_PRINT(src, "Err:read_len_nonzero\r\n");
return;
}
if (pos != idx) {
OUT_PRINT(src, "Err:read_no_payload\r\n");
return;
}
}
// 11) 실제 실행 (prefix 모드 반영)
process_cmd_by_prefix(s_prefix_mode, proto, id, cmd, byte_len);
}
void handle_uart_command_line(void)
{
while (1)
{
// 브릿지 중이면 RS485->PC를 계속 흘려보냄
if (g_rs485_bridge_active) {
RS485_Bridge_DrainToPC();
}
// PC(UART1)
if (uart_rx_done)
{
uart_rx_done = 0;
process_one_line(CMD_SRC_PC, uart_rx_buffer, uart_rx_length);
uart_rx_index = 0;
uart_rx_length = 0;
R_UART1_Receive((uint8_t *)&uart_rx_buffer[uart_rx_index], 1);
}
// RS485(UART0)
if (rs485_rx_done)
{
rs485_rx_done = 0;
// 브릿지 중엔 “RS485 라인 커맨드 처리”는 하지 않음(응답 스트리밍 중이니까)
if (!g_rs485_bridge_active) {
process_one_line(CMD_SRC_RS485, rs485_rx_buffer, rs485_rx_length);
}
rs485_rx_index = 0;
rs485_rx_length = 0;
R_UART0_Receive((uint8_t *)&rs485_rx_buffer[rs485_rx_index], 1);
}
}
}
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
@ -60,6 +680,21 @@ void main(void)
{
R_MAIN_UserInit();
/* Start user code. Do not edit comment generated here */
R_UART0_Create(); // UART0
R_UART1_Create(); // UART1
R_IICA0_Create(); // I2C
R_UART0_Start(); // RS485
R_UART1_Start(); // PC
R_UART1_Receive((uint8_t *)&uart_rx_buffer[uart_rx_index], 1);
R_UART0_Receive((uint8_t *)&rs485_rx_buffer[rs485_rx_index], 1);
handle_uart_command_line();
delay(100000);
while (1U)
{
;
@ -77,6 +712,14 @@ void R_MAIN_UserInit(void)
{
/* Start user code. Do not edit comment generated here */
EI();
R_PORT_Create();
rs485_init();
DipSwitch_Init();
g_fixed_addr = DipSwitch_ReadAddr_0to31();
/* End user code. Do not edit comment generated here */
}

4
r_systeminit.c

@ -23,7 +23,7 @@
* Device(s) : R5F10PPJ
* Tool-Chain : CCRL
* Description : This file implements system initializing function.
* Creation Date: 2026-01-12
* Creation Date: 2026-01-21
***********************************************************************************************************************/
/***********************************************************************************************************************
@ -31,6 +31,7 @@ Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_serial.h"
#include "r_cg_wdt.h"
/* Start user code for include. Do not edit comment generated here */
@ -69,6 +70,7 @@ void R_Systeminit(void)
PIOR8 = 0x00U;
R_CGC_Get_ResetSource();
R_CGC_Create();
R_PORT_Create();
R_SAU0_Create();
R_SAU1_Create();
R_IICA0_Create();

124
uart.c

@ -0,0 +1,124 @@
#include "uart.h"
#include "delay.h"
#include "r_cg_adc.h"
#include "r_cg_port.h"
#define RS485_EN_PORT P4
#define RS485_EN_PM PM4
#define RS485_EN_MASK (0x20U) // P4.5
void rs485_set_tx(uint8_t on)
{
if (on) RS485_EN_PORT |= RS485_EN_MASK; // EN=1 (TX)
else RS485_EN_PORT &= (uint8_t)~RS485_EN_MASK; // EN=0 (RX)
}
void rs485_init(void)
{
RS485_EN_PM &= (uint8_t)~RS485_EN_MASK; // 출력
rs485_set_tx(0); // 기본 RX 모드
}
/**
* : uart_send_string
* : null UART0로
*
* :
* - str : (C , '\0' )
*
* : (void)
*
* :
* 1)
* - '\0' len
*
* 2) UART
* - R_UART0_Send()
* - (uint8_t *)
*
* :
* - null ('\0')
* - UART0
*/
// UART0(RS485)
void uart_send_string(const char *str)
{
uint16_t len = 0;
while (str[len] != '\0') len++;
rs485_set_tx(1);
R_UART0_Send((uint8_t *)str, len);
}
// UART1(PC)
void uart1_send_string(const char *str)
{
uint16_t len = 0;
while (str[len] != '\0') len++;
R_UART1_Send((uint8_t *)str, len);
}
/**
* : uart_send_hex
* : 8 (uint8_t) 16 UART0로
*
* :
* - val : 8
*
* : (void)
*
* :
* 1) / 4
* - high = val >> 4, 4
* - low = val & 0x0F, 4
*
* 2) 16
* - 0~9 '0'~'9'
* - 10~15 'A'~'F'
* - hex[0] = 4
* - hex[1] = 4
*
* 3) UART
* - R_UART0_Send() 2
*
* 4)
* - delay(10000)
*
* :
* - 1 2 16
* - : val = 0xAF "AF"
*/
void uart_send_hex(uint8_t val)
{
uint8_t hex[2];
uint8_t high = (val >> 4) & 0x0F;
uint8_t low = val & 0x0F;
hex[0] = (high < 10) ? ('0' + high) : ('A' + (high - 10));
hex[1] = (low < 10) ? ('0' + low) : ('A' + (low - 10));
rs485_set_tx(1);
R_UART0_Send(hex, 2);
delay(10000);
}
void uart1_send_hex(uint8_t val)
{
uint8_t hex[2];
uint8_t high = (val >> 4) & 0x0F;
uint8_t low = val & 0x0F;
hex[0] = (high < 10) ? ('0' + high) : ('A' + (high - 10));
hex[1] = (low < 10) ? ('0' + low ) : ('A' + (low - 10));
R_UART1_Send(hex, 2);
delay(10000);
}

47
uart.h

@ -0,0 +1,47 @@
#include "r_cg_macrodriver.h"
#include "r_cg_serial.h"
#include "r_cg_adc.h"
#define ADC_RESOLUTION 1023.0f // 10-bit ADC
#define VREF 5.06f // V
#define RAM_BYTES 13
#define UART_RX_BUF_SIZE 256
// PC(USB, UART1) 출력 전용
#define PC_PRINT(s) uart1_send_string((s))
#define PC_PRINT_HEX(v) uart1_send_hex((v))
// RS485(UART0) 출력/송신 전용
#define RS485_PRINT(s) uart_send_string((s))
#define RS485_PRINT_HEX(v) uart_send_hex((v))
extern volatile uint8_t uart_rx_done;
extern volatile uint8_t uart_rx_index;
extern volatile uint8_t uart_rx_buffer[UART_RX_BUF_SIZE];
extern volatile uint16_t uart_rx_length;
extern uint8_t g_fixed_addr;
#define HOST_PRINT(s) do { \
if (g_fixed_addr == 0) PC_PRINT(s); \
else RS485_PRINT(s); \
} while(0)
void uart_send_string(const char *str); // UART0(RS485)
void uart_send_hex(uint8_t val); // UART0(RS485)
void uart1_send_string(const char *str); // UART1(PC)
void uart1_send_hex(uint8_t val); // UART1(PC)
//void UART0_ReceiveHandler(void);
void ADC_ReadAndSend_UART(void);
void cmd_enter_command_mode(const unsigned char *d, unsigned int len);
void cmd_unknown(const unsigned char *d, unsigned int len);
// RS485 EN(P45)
void rs485_init(void);
void rs485_set_tx(uint8_t on);
Loading…
Cancel
Save