From 8053a18f99d808884c7d877aecf8d11064027d1c Mon Sep 17 00:00:00 2001 From: Manikandan Nair Date: Mon, 30 Dec 2024 13:07:14 +0000 Subject: [PATCH] Base commit --- ADC.Opt | 52 + ADC.Uv2 | 107 ++ ADC.axf | Bin 0 -> 33412 bytes ADC.hex | 517 ++++++++ ADC.htm | 643 +++++++++ ADC.lnp | 5 + ADC.map | 841 ++++++++++++ ADC.plg | 102 ++ ADC.sct | 15 + ADC.tra | 26 + ADC_Opt.Bak | 53 + ADC_Target 1.dep | 24 + ADC_Uv2.Bak | 108 ++ Abstract.txt | 27 + Blinky.Opt | 72 ++ ExtDll.iex | 2 + IRQ.c | 22 + LCD.h | 19 + LCD_4bit.c | 308 +++++ LPC2300.d | 1 + LPC2300.lst | 2805 ++++++++++++++++++++++++++++++++++++++++ LPC2300.o | Bin 0 -> 2960 bytes LPC2300.s | 885 +++++++++++++ PN532_SPI.cpp | 210 +++ RFID_PN532.c | 251 ++++ RTC.c | 79 ++ Retarget.c | 42 + Serial.c | 65 + Servo_MG995.c | 42 + Sim.ini | 135 ++ Ultrasonic_HC_SR04.c | 110 ++ irq.crf | Bin 0 -> 29646 bytes irq.d | 2 + irq.o | Bin 0 -> 67580 bytes lcd_4bit.crf | Bin 0 -> 35755 bytes lcd_4bit.d | 3 + lcd_4bit.o | Bin 0 -> 74024 bytes main.c | 96 ++ main.crf | Bin 0 -> 35156 bytes main.d | 4 + main.o | Bin 0 -> 71568 bytes mg995_servo.__i | 5 + mg995_servo.d | 0 rfid_pn532.crf | Bin 0 -> 39494 bytes rfid_pn532.d | 5 + rfid_pn532.o | Bin 0 -> 75568 bytes rtc.crf | Bin 0 -> 34634 bytes rtc.d | 4 + rtc.o | Bin 0 -> 72088 bytes servo_mg995.crf | Bin 0 -> 38322 bytes servo_mg995.d | 5 + servo_mg995.o | Bin 0 -> 72844 bytes ultrasonic_hc_sr04.crf | Bin 0 -> 35184 bytes ultrasonic_hc_sr04.d | 4 + ultrasonic_hc_sr04.o | Bin 0 -> 74172 bytes 55 files changed, 7696 insertions(+) create mode 100644 ADC.Opt create mode 100644 ADC.Uv2 create mode 100644 ADC.axf create mode 100644 ADC.hex create mode 100644 ADC.htm create mode 100644 ADC.lnp create mode 100644 ADC.map create mode 100644 ADC.plg create mode 100644 ADC.sct create mode 100644 ADC.tra create mode 100644 ADC_Opt.Bak create mode 100644 ADC_Target 1.dep create mode 100644 ADC_Uv2.Bak create mode 100644 Abstract.txt create mode 100644 Blinky.Opt create mode 100644 ExtDll.iex create mode 100644 IRQ.c create mode 100644 LCD.h create mode 100644 LCD_4bit.c create mode 100644 LPC2300.d create mode 100644 LPC2300.lst create mode 100644 LPC2300.o create mode 100644 LPC2300.s create mode 100644 PN532_SPI.cpp create mode 100644 RFID_PN532.c create mode 100644 RTC.c create mode 100644 Retarget.c create mode 100644 Serial.c create mode 100644 Servo_MG995.c create mode 100644 Sim.ini create mode 100644 Ultrasonic_HC_SR04.c create mode 100644 irq.crf create mode 100644 irq.d create mode 100644 irq.o create mode 100644 lcd_4bit.crf create mode 100644 lcd_4bit.d create mode 100644 lcd_4bit.o create mode 100644 main.c create mode 100644 main.crf create mode 100644 main.d create mode 100644 main.o create mode 100644 mg995_servo.__i create mode 100644 mg995_servo.d create mode 100644 rfid_pn532.crf create mode 100644 rfid_pn532.d create mode 100644 rfid_pn532.o create mode 100644 rtc.crf create mode 100644 rtc.d create mode 100644 rtc.o create mode 100644 servo_mg995.crf create mode 100644 servo_mg995.d create mode 100644 servo_mg995.o create mode 100644 ultrasonic_hc_sr04.crf create mode 100644 ultrasonic_hc_sr04.d create mode 100644 ultrasonic_hc_sr04.o diff --git a/ADC.Opt b/ADC.Opt new file mode 100644 index 0000000..b8cd864 --- /dev/null +++ b/ADC.Opt @@ -0,0 +1,52 @@ +### uVision2 Project, (C) Keil Software +### Do not modify ! + + cExt (*.c) + aExt (*.s*; *.src; *.a*) + oExt (*.obj) + lExt (*.lib) + tExt (*.txt; *.h; *.inc) + pExt (*.plm) + CppX (*.cpp) + DaveTm { 0,0,0,0,0,0,0,0 } + +Target (Target 1), 0x0004 // Tools: 'ARM-ADS' +GRPOPT 1,(Source Group 1),1,0,0 +GRPOPT 2,(System Calls),1,0,0 + +OPTFFF 1,1,1,285212673,0,10,6,0,<.\Servo_MG995.c> +OPTFFF 1,2,1,1,0,1,1,0,<.\LCD_4bit.c> +OPTFFF 1,3,1,301989889,0,0,0,0,<.\IRQ.c> +OPTFFF 1,4,1,385875969,0,40,16,0,<.\RTC.c> +OPTFFF 1,5,1,838860801,0,70,107,0,<.\Ultrasonic_HC_SR04.c> +OPTFFF 1,6,1,436207616,0,64,77,0,<.\main.c> +OPTFFF 2,7,2,738197504,0,0,0,0,<.\LPC2300.s> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,247,2,0,0,60,1,0,0 } + + +TARGOPT 1, (Target 1) + ADSCLK=12000000 + OPTTT 1,1,1,0 + OPTHX 1,65535,0,0,0 + OPTLX 79,66,8,<.\> + OPTOX 16 + OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 + OPTXL 1,1,1,1,1,1,1,0,0 + OPTFL 1,0,1 + OPTAX 8 + OPTBL 0,(Data Sheet) + OPTBL 1,(User Manual) + OPTDL (SARM.DLL)(-cLPC237x)(DARMP.DLL)(-pLPC2378)(SARM.DLL)()(TARMP.DLL)(-pLPC2378) + OPTDBG 180222,0,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() + OPTKEY 0,(DLGDARM)((135=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(145=-1,-1,-1,-1,0)(147=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(152=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)(155=-1,-1,-1,-1,0)(177=-1,-1,-1,-1,0)(134=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(156=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(163=-1,-1,-1,-1,0)(164=-1,-1,-1,-1,0)(176=-1,-1,-1,-1,0)(178=-1,-1,-1,-1,0)(113=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)(169=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(137=-1,-1,-1,-1,0)(138=-1,-1,-1,-1,0)(171=-1,-1,-1,-1,0)(117=-1,-1,-1,-1,0)(172=-1,-1,-1,-1,0)(173=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(165=-1,-1,-1,-1,0)(166=-1,-1,-1,-1,0)(168=-1,-1,-1,-1,0)(141=191,61,623,629,0)(144=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(115=-1,-1,-1,-1,0)(116=-1,-1,-1,-1,0)) + OPTKEY 0,(DLGTARM)((135=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(145=-1,-1,-1,-1,0)(147=-1,-1,-1,-1,0)(150=83,115,386,293,0)(152=90,124,444,426,0)(151=98,132,350,574,0)(155=-1,-1,-1,-1,0)(177=-1,-1,-1,-1,0)(134=75,107,270,293,0)(80=-1,-1,-1,-1,0)(156=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(163=-1,-1,-1,-1,0)(164=-1,-1,-1,-1,0)(176=-1,-1,-1,-1,0)(178=-1,-1,-1,-1,0)(113=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)(169=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(137=-1,-1,-1,-1,0)(138=-1,-1,-1,-1,0)(171=-1,-1,-1,-1,0)(117=-1,-1,-1,-1,0)(172=-1,-1,-1,-1,0)(173=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(165=-1,-1,-1,-1,0)(166=-1,-1,-1,-1,0)(168=-1,-1,-1,-1,0)(141=-1,-1,-1,-1,0)(144=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(115=-1,-1,-1,-1,0)(116=-1,-1,-1,-1,0)) + OPTKEY 0,(ARMDBGFLAGS)(-T5F) + OPTKEY 0,(UL2ARM)(-UV0812UAE -O39 -S2 -C0 -N00("ARM7TDMI-S Core") -D00(4F1F0F0F) -L00(4) -FO15 -FD40000000 -FC800 -FN1 -FF0LPC_IAP2_512 -FS00 -FL07D000) + OPTWA 0,1,(AD_last,0x10) + OPTWA 0,2,(A_value,0x0A) + OPTMM 1,262,(0xE0034010) + OPTDF 0x1000086 + OPTLE <> + OPTLC <> + OPTLA 0,(((PORT1 & 0x00040000) >> 18 & 0x40000) >> 18)(FF00000000000000000000000000E0FFFFFFEF410100000000000000000000000000000028504F5254312026203078303030343030303029203E3E2031380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F120000000000000000000000000000000000000010030000) +EndOpt + diff --git a/ADC.Uv2 b/ADC.Uv2 new file mode 100644 index 0000000..b72fc23 --- /dev/null +++ b/ADC.Uv2 @@ -0,0 +1,107 @@ +### uVision2 Project, (C) Keil Software +### Do not modify ! + +Target (Target 1), 0x0004 // Tools: 'ARM-ADS' + +Group (Source Group 1) +Group (System Calls) + +File 1,1,<.\Servo_MG995.c> +File 1,1,<.\LCD_4bit.c> +File 1,1,<.\IRQ.c> +File 1,1,<.\RTC.c> +File 1,1,<.\Ultrasonic_HC_SR04.c> +File 1,1,<.\main.c> +File 2,2,<.\LPC2300.s> + + +Options 1,0,0 // Target 'Target 1' + Device (LPC2378) + Vendor (NXP (founded by Philips)) + Cpu (IRAM(0x40000000-0x40007FFF) IRAM2(0x7FE00000-0x7FE03FFF) IROM(0-0x7FFFF) CLOCK(12000000) CPUTYPE(ARM7TDMI)) + FlashUt (LPC210x_ISP.EXE ("#H" ^X $D COM1: 38400 1)) + StupF ("STARTUP\Philips\LPC2300.s" ("Philips LPC2300 Startup Code")) + FlashDR (UL2ARM(-U268761108 -O7 -S0 -C0 -FO15 -FD40000000 -FC800 -FN1 -FF0LPC_IAP2_512 -FS00 -FL07D000)) + DevID (4153) + Rgf (LPC23xx.H) + Mem () + C () + A () + RL () + OH () + DBC_IFX () + DBC_CMS () + DBC_AMS () + DBC_LMS () + UseEnv=0 + EnvBin () + EnvInc () + EnvLib () + EnvReg (˙Philips\) + OrgReg (˙Philips\) + TgStat=16 + OutDir (.\) + OutName (ADC) + GenApp=1 + GenLib=0 + GenHex=1 + Debug=1 + Browse=1 + LstDir (.\) + HexSel=1 + MG32K=0 + TGMORE=0 + RunUsr 0 0 <> + RunUsr 1 0 <> + BrunUsr 0 0 <> + BrunUsr 1 0 <> + CrunUsr 0 0 <> + CrunUsr 1 0 <> + SVCSID <> + GLFLAGS=1790 + ADSFLGA { 243,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ACPUTYP (ARM7TDMI) + RVDEV () + ADSTFLGA { 0,12,16,18,99,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0 } + OCMADSOCM { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + OCMADSIRAM { 0,0,0,0,64,0,128,0,0 } + OCMADSIROM { 1,0,0,0,0,0,0,8,0 } + OCMADSXRAM { 0,0,0,0,0,0,0,0,0 } + OCR_RVCT { 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,128,0,0,0,0,0,224,127,0,64,0,0 } + RV_STAVEC () + ADSCCFLG { 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSCMISC () + ADSCDEFN () + ADSCUDEF () + ADSCINCD () + ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSAMISC () + ADSADEFN () + ADSAUDEF () + ADSAINCD () + PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + IncBld=1 + AlwaysBuild=0 + GenAsm=0 + AsmAsm=0 + PublicsOnly=0 + StopCode=3 + CustArgs () + LibMods () + ADSLDFG { 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSLDTA (0x00000000) + ADSLDDA (0x40000000) + ADSLDSC () + ADSLDIB () + ADSLDIC () + ADSLDMC () + ADSLDIF () + ADSLDDW () + OPTDL (SARM.DLL)(-cLPC237x)(DARMP.DLL)(-pLPC2378)(SARM.DLL)()(TARMP.DLL)(-pLPC2378) + OPTDBG 180222,0,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() + FLASH1 { 9,0,0,0,1,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0 } + FLASH2 (BIN\UL2ARM.DLL) + FLASH3 ("LPC210x_ISP.EXE" ("#H" ^X $D COM1: 38400 1)) + FLASH4 () +EndOpt + diff --git a/ADC.axf b/ADC.axf new file mode 100644 index 0000000000000000000000000000000000000000..6c4fb578ff64419504890378a6326bd0a10025aa GIT binary patch literal 33412 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 + +Static Call Graph - [C:\Users\Lenovo\Documents\Keil uVision4\PetFeeder\ADC.axf] +
+

Static Call Graph for image C:\Users\Lenovo\Documents\Keil uVision4\PetFeeder\ADC.axf


+

#<CALLGRAPH># ARM Linker, 5.03 [Build 69]: Last Updated: Fri Dec 13 11:46:53 2024 +

+

Maximum Stack Usage = 188 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)

+Call chain for Maximum Stack Depth:

+main ⇒ calDistance ⇒ __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round +

+

+Functions with no stack information +

+ +

+

+Mutually Recursive functions +

  • Undef_Handler   ⇒   Undef_Handler
    +
  • SWI_Handler   ⇒   SWI_Handler
    +
  • PAbt_Handler   ⇒   PAbt_Handler
    +
  • DAbt_Handler   ⇒   DAbt_Handler
    +
  • IRQ_Handler   ⇒   IRQ_Handler
    +
  • FIQ_Handler   ⇒   FIQ_Handler
    + +

    +

    +Function Pointers +

      +
    • DAbt_Handler from lpc2300.o(RESET) referenced from lpc2300.o(RESET) +
    • FIQ_Handler from lpc2300.o(RESET) referenced from lpc2300.o(RESET) +
    • IRQ_Handler from lpc2300.o(RESET) referenced from lpc2300.o(RESET) +
    • PAbt_Handler from lpc2300.o(RESET) referenced from lpc2300.o(RESET) +
    • Reset_Handler from lpc2300.o(RESET) referenced from lpc2300.o(RESET) +
    • SWI_Handler from lpc2300.o(RESET) referenced from lpc2300.o(RESET) +
    • T0_IRQHandler from irq.o(.text) referenced from rtc.o(.text) +
    • Undef_Handler from lpc2300.o(RESET) referenced from lpc2300.o(RESET) +
    • __main from entry.o(.ARM.Collect$$$$00000000) referenced from lpc2300.o(RESET) +
    • _sputc from printfa.o(i._sputc) referenced from printfa.o(i.__0sprintf) +
    • main from main.o(.text) referenced from entry9a.o(.ARM.Collect$$$$0000000B) +
    +

    +

    +Global Symbols +

    +

    Reset_Handler (ARM, 0 bytes, Stack size unknown bytes, lpc2300.o(RESET)) +
    [Address Reference Count : 1]

    • lpc2300.o(RESET) +
    +

    __main (ARM, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000)) + +

    _main_stk (ARM, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) + +

    _main_scatterload (ARM, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) +

    [Calls]

    • >>   __scatterload (via Veneer) +
    + +

    __main_after_scatterload (ARM, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) +

    [Called By]

    • >>   __scatterload (via Veneer) +
    + +

    _main_clock (ARM, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) + +

    _main_cpp_init (ARM, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) + +

    _main_init (ARM, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) + +

    __rt_final_cpp (ARM, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D)) + +

    __rt_final_exit (ARM, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F)) + +

    PWM_Init (ARM, 60 bytes, Stack size 0 bytes, servo_mg995.o(.text)) +

    [Called By]

    • >>   main +
    • >>   trial_run_servo +
    + +

    WaitTime (ARM, 56 bytes, Stack size 0 bytes, servo_mg995.o(.text), UNUSED) + +

    PWM_SetDutyCycle (ARM, 52 bytes, Stack size 8 bytes, servo_mg995.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = PWM_SetDutyCycle ⇒ __aeabi_uidivmod +
    +
    [Calls]
    • >>   __aeabi_uidivmod (via Veneer) +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_servo +
    + +

    trial_run_servo (ARM, 28 bytes, Stack size 0 bytes, servo_mg995.o(.text), UNUSED) +

    [Calls]

    • >>   lcd_init +
    • >>   lcd_clear +
    • >>   PWM_SetDutyCycle +
    • >>   PWM_Init +
    + +

    lcd_write_4bit (ARM, 84 bytes, Stack size 8 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = lcd_write_4bit +
    +
    [Calls]
    • >>   delay +
    +
    [Called By]
    • >>   lcd_write_cmd +
    • >>   lcd_write_data +
    • >>   lcd_init +
    + +

    lcd_write_cmd (ARM, 48 bytes, Stack size 8 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = lcd_write_cmd ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   lcd_write_4bit +
    • >>   wait_while_busy +
    +
    [Called By]
    • >>   set_cursor +
    • >>   lcd_init +
    • >>   lcd_clear +
    + +

    lcd_putchar (ARM, 24 bytes, Stack size 8 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = lcd_putchar ⇒ lcd_write_data ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   lcd_write_data +
    +
    [Called By]
    • >>   updateRTCTimer +
    • >>   lcd_print +
    • >>   lcd_init +
    + +

    lcd_init (ARM, 176 bytes, Stack size 16 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = lcd_init ⇒ lcd_putchar ⇒ lcd_write_data ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   lcd_putchar +
    • >>   lcd_write_cmd +
    • >>   lcd_write_4bit +
    • >>   delay +
    +
    [Called By]
    • >>   main +
    • >>   setupTimer +
    • >>   trial_run_rtc +
    • >>   trial_run_servo +
    + +

    set_cursor (ARM, 52 bytes, Stack size 16 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = set_cursor ⇒ lcd_write_cmd ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   lcd_write_cmd +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_ultrasonic +
    • >>   trial_run_rtc +
    • >>   updateRTCTimer +
    • >>   lcd_clear +
    + +

    lcd_clear (ARM, 32 bytes, Stack size 8 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = lcd_clear ⇒ set_cursor ⇒ lcd_write_cmd ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   set_cursor +
    • >>   lcd_write_cmd +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_ultrasonic +
    • >>   setupTimer +
    • >>   trial_run_rtc +
    • >>   trial_run_servo +
    + +

    lcd_print (ARM, 40 bytes, Stack size 8 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = lcd_print ⇒ lcd_putchar ⇒ lcd_write_data ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   lcd_putchar +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_ultrasonic +
    • >>   trial_run_rtc +
    • >>   updateRTCTimer +
    + +

    T0_IRQHandler (ARM, 88 bytes, Stack size 8 bytes, irq.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = T0_IRQHandler +
    +
    [Address Reference Count : 1]
    • rtc.o(.text) +
    +

    RTCTimerEnable (ARM, 60 bytes, Stack size 0 bytes, rtc.o(.text)) +

    [Called By]

    • >>   main +
    • >>   trial_run_rtc +
    + +

    updateRTCTimer (ARM, 524 bytes, Stack size 8 bytes, rtc.o(.text)) +

    [Stack]

    • Max Depth = 48
    • Call Chain = updateRTCTimer ⇒ lcd_print ⇒ lcd_putchar ⇒ lcd_write_data ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   __2sprintf (via Veneer) +
    • >>   lcd_print +
    • >>   set_cursor +
    • >>   lcd_putchar +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_rtc +
    + +

    trial_run_rtc (ARM, 44 bytes, Stack size 0 bytes, rtc.o(.text), UNUSED) +

    [Calls]

    • >>   updateRTCTimer +
    • >>   RTCTimerEnable +
    • >>   lcd_print +
    • >>   set_cursor +
    • >>   lcd_init +
    • >>   lcd_clear +
    + +

    delayUS (ARM, 56 bytes, Stack size 0 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Called By]

    • >>   sendPulse +
    • >>   delayMS +
    + +

    initTimer0 (ARM, 52 bytes, Stack size 0 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Called By]

    • >>   setupTimer +
    + +

    startTimer0 (ARM, 24 bytes, Stack size 0 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Called By]

    • >>   calDistance +
    + +

    stopTimer0 (ARM, 24 bytes, Stack size 0 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Called By]

    • >>   calDistance +
    + +

    delayMS (ARM, 28 bytes, Stack size 4 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = delayMS +
    +
    [Calls]
    • >>   delayUS +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_ultrasonic +
    + +

    setPins (ARM, 76 bytes, Stack size 0 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Called By]

    • >>   setupTimer +
    + +

    setupTimer (ARM, 44 bytes, Stack size 16 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = setupTimer ⇒ lcd_init ⇒ lcd_putchar ⇒ lcd_write_data ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   setPins +
    • >>   initTimer0 +
    • >>   lcd_init +
    • >>   lcd_clear +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_ultrasonic +
    + +

    calDistance (ARM, 160 bytes, Stack size 32 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Stack]

    • Max Depth = 156
    • Call Chain = calDistance ⇒ __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round +
    +
    [Calls]
    • >>   __aeabi_i2d (via Veneer) +
    • >>   __aeabi_dmul (via Veneer) +
    • >>   __aeabi_ddiv (via Veneer) +
    • >>   __aeabi_d2f (via Veneer) +
    • >>   stopTimer0 +
    • >>   startTimer0 +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_ultrasonic +
    + +

    sendPulse (ARM, 72 bytes, Stack size 4 bytes, ultrasonic_hc_sr04.o(.text)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = sendPulse +
    +
    [Calls]
    • >>   delayUS +
    +
    [Called By]
    • >>   main +
    • >>   trial_run_ultrasonic +
    + +

    trial_run_ultrasonic (ARM, 240 bytes, Stack size 0 bytes, ultrasonic_hc_sr04.o(.text), UNUSED) +

    [Calls]

    • >>   __2sprintf (via Veneer) +
    • >>   __aeabi_f2d (via Veneer) +
    • >>   __aeabi_cfcmple (via Veneer) +
    • >>   sendPulse +
    • >>   calDistance +
    • >>   setupTimer +
    • >>   delayMS +
    • >>   lcd_print +
    • >>   set_cursor +
    • >>   lcd_clear +
    + +

    main (ARM, 540 bytes, Stack size 32 bytes, main.o(.text)) +

    [Stack]

    • Max Depth = 188
    • Call Chain = main ⇒ calDistance ⇒ __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round +
    +
    [Calls]
    • >>   __2sprintf (via Veneer) +
    • >>   __aeabi_idivmod (via Veneer) +
    • >>   __aeabi_f2d (via Veneer) +
    • >>   __aeabi_cfcmple (via Veneer) +
    • >>   sendPulse +
    • >>   calDistance +
    • >>   setupTimer +
    • >>   delayMS +
    • >>   updateRTCTimer +
    • >>   RTCTimerEnable +
    • >>   lcd_print +
    • >>   set_cursor +
    • >>   lcd_init +
    • >>   lcd_clear +
    • >>   PWM_SetDutyCycle +
    • >>   PWM_Init +
    +
    [Address Reference Count : 1]
    • entry9a.o(.ARM.Collect$$$$0000000B) +
    +

    __aeabi_uidiv (Thumb, 0 bytes, Stack size 8 bytes, uidiv.o(.text), UNUSED) + +

    __aeabi_uidivmod (Thumb, 46 bytes, Stack size 8 bytes, uidiv.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = __aeabi_uidivmod +
    +
    [Called By]
    • >>   _printf_core +
    • >>   __aeabi_idivmod +
    • >>   PWM_SetDutyCycle (via Veneer) +
    + +

    __aeabi_idiv (Thumb, 0 bytes, Stack size 16 bytes, idiv.o(.text), UNUSED) + +

    __aeabi_idivmod (Thumb, 44 bytes, Stack size 16 bytes, idiv.o(.text)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = __aeabi_idivmod ⇒ __aeabi_uidivmod +
    +
    [Calls]
    • >>   __aeabi_uidivmod +
    +
    [Called By]
    • >>   main (via Veneer) +
    + +

    __aeabi_dmul (Thumb, 206 bytes, Stack size 72 bytes, dmul.o(.text)) +

    [Stack]

    • Max Depth = 124
    • Call Chain = __aeabi_dmul ⇒ _double_epilogue ⇒ _double_round +
    +
    [Calls]
    • >>   _double_epilogue +
    +
    [Called By]
    • >>   _fp_digits +
    • >>   calDistance (via Veneer) +
    + +

    __aeabi_ddiv (Thumb, 238 bytes, Stack size 40 bytes, ddiv.o(.text)) +

    [Stack]

    • Max Depth = 44
    • Call Chain = __aeabi_ddiv ⇒ _double_round +
    +
    [Calls]
    • >>   _double_round +
    +
    [Called By]
    • >>   _fp_digits +
    • >>   calDistance (via Veneer) +
    + +

    __aeabi_i2d (Thumb, 36 bytes, Stack size 16 bytes, dflti.o(.text)) +

    [Stack]

    • Max Depth = 68
    • Call Chain = __aeabi_i2d ⇒ _double_epilogue ⇒ _double_round +
    +
    [Calls]
    • >>   _double_epilogue +
    +
    [Called By]
    • >>   calDistance (via Veneer) +
    + +

    __aeabi_f2d (Thumb, 40 bytes, Stack size 0 bytes, f2d.o(.text)) +

    [Called By]

    • >>   main (via Veneer) +
    • >>   trial_run_ultrasonic (via Veneer) +
    + +

    __aeabi_d2f (Thumb, 60 bytes, Stack size 8 bytes, d2f.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = __aeabi_d2f +
    +
    [Calls]
    • >>   _float_round +
    +
    [Called By]
    • >>   calDistance (via Veneer) +
    + +

    __aeabi_cfcmpeq (Thumb, 0 bytes, Stack size 0 bytes, cfcmple.o(.text), UNUSED) + +

    __aeabi_cfcmple (Thumb, 20 bytes, Stack size 0 bytes, cfcmple.o(.text)) +

    [Called By]

    • >>   main (via Veneer) +
    • >>   trial_run_ultrasonic (via Veneer) +
    + +

    __aeabi_uldivmod (Thumb, 104 bytes, Stack size 48 bytes, uldiv.o(.text), UNUSED) +

    [Calls]

    • >>   __aeabi_llsr +
    • >>   __aeabi_llsl +
    +
    [Called By]
    • >>   _printf_core +
    • >>   _fp_digits +
    + +

    __I$use$fp (ARM, 0 bytes, Stack size 0 bytes, iusefp.o(.text), UNUSED) + +

    _float_round (Thumb, 16 bytes, Stack size 0 bytes, fepilogue.o(.text)) +

    [Called By]

    • >>   __aeabi_d2f +
    + +

    _float_epilogue (Thumb, 116 bytes, Stack size 12 bytes, fepilogue.o(.text), UNUSED) + +

    _double_round (Thumb, 28 bytes, Stack size 4 bytes, depilogue.o(.text)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = _double_round +
    +
    [Called By]
    • >>   _double_epilogue +
    • >>   __aeabi_dadd +
    • >>   __aeabi_ddiv +
    + +

    _double_epilogue (Thumb, 170 bytes, Stack size 48 bytes, depilogue.o(.text)) +

    [Stack]

    • Max Depth = 52
    • Call Chain = _double_epilogue ⇒ _double_round +
    +
    [Calls]
    • >>   __ARM_clz +
    • >>   _double_round +
    • >>   __aeabi_llsr +
    • >>   __aeabi_llsl +
    +
    [Called By]
    • >>   __aeabi_dadd +
    • >>   __aeabi_i2d +
    • >>   __aeabi_dmul +
    + +

    __aeabi_dadd (Thumb, 330 bytes, Stack size 48 bytes, dadd.o(.text), UNUSED) +

    [Calls]

    • >>   _double_round +
    • >>   _double_epilogue +
    • >>   __aeabi_lasr +
    • >>   __aeabi_llsl +
    +
    [Called By]
    • >>   __aeabi_drsub +
    • >>   __aeabi_dsub +
    • >>   _fp_digits +
    + +

    __aeabi_dsub (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text), UNUSED) +

    [Calls]

    • >>   __aeabi_dadd +
    + +

    __aeabi_drsub (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text), UNUSED) +

    [Calls]

    • >>   __aeabi_dadd +
    + +

    __aeabi_d2ulz (Thumb, 58 bytes, Stack size 8 bytes, dfixul.o(.text), UNUSED) +

    [Calls]

    • >>   __aeabi_llsr +
    • >>   __aeabi_llsl +
    +
    [Called By]
    • >>   _fp_digits +
    + +

    __aeabi_cdrcmple (Thumb, 40 bytes, Stack size 0 bytes, cdrcmple.o(.text), UNUSED) +

    [Called By]

    • >>   _fp_digits +
    + +

    __scatterload (Thumb, 24 bytes, Stack size 0 bytes, init.o(.text)) +

    [Calls]

    • >>   __main_after_scatterload (via Veneer) +
    • >>   __ARM_common_call_via_r3 +
    +
    [Called By]
    • >>   _main_scatterload (via Veneer) +
    + +

    __scatterload_rt2 (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED) + +

    __aeabi_llsl (Thumb, 34 bytes, Stack size 4 bytes, llshl.o(.text)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = __aeabi_llsl +
    +
    [Called By]
    • >>   __aeabi_uldivmod +
    • >>   _double_epilogue +
    • >>   __aeabi_dadd +
    • >>   __aeabi_d2ulz +
    + +

    _ll_shift_l (Thumb, 0 bytes, Stack size 4 bytes, llshl.o(.text), UNUSED) + +

    __aeabi_llsr (Thumb, 36 bytes, Stack size 4 bytes, llushr.o(.text)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = __aeabi_llsr +
    +
    [Called By]
    • >>   __aeabi_uldivmod +
    • >>   _double_epilogue +
    • >>   __aeabi_d2ulz +
    + +

    _ll_ushift_r (Thumb, 0 bytes, Stack size 4 bytes, llushr.o(.text), UNUSED) + +

    __aeabi_lasr (Thumb, 40 bytes, Stack size 4 bytes, llsshr.o(.text), UNUSED) +

    [Called By]

    • >>   __aeabi_dadd +
    + +

    _ll_sshift_r (Thumb, 0 bytes, Stack size 4 bytes, llsshr.o(.text), UNUSED) + +

    __0sprintf (Thumb, 36 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED) +

    [Calls]

    • >>   _sputc +
    • >>   _printf_core +
    + +

    __1sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED) + +

    __2sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = __2sprintf +
    +
    [Called By]
    • >>   main (via Veneer) +
    • >>   trial_run_ultrasonic (via Veneer) +
    • >>   updateRTCTimer (via Veneer) +
    + +

    __c89sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED) + +

    sprintf (Thumb, 0 bytes, Stack size 24 bytes, printfa.o(i.__0sprintf), UNUSED) + +

    __ARM_clz (Thumb, 46 bytes, Stack size 0 bytes, depilogue.o(i.__ARM_clz)) +

    [Called By]

    • >>   _double_epilogue +
    + +

    __ARM_common_call_via_r2 (Thumb, 2 bytes, Stack size 0 bytes, printf1.o(i.__ARM_common_call_via_r2), UNUSED) +

    [Called By]

    • >>   _printf_core +
    + +

    __ARM_common_call_via_r3 (Thumb, 2 bytes, Stack size 0 bytes, init.o(i.__ARM_common_call_via_r3)) +

    [Called By]

    • >>   __scatterload +
    + +

    __ARM_common_call_via_r6 (Thumb, 2 bytes, Stack size 0 bytes, printfb.o(i.__ARM_common_call_via_r6), UNUSED) +

    [Called By]

    • >>   _printf_pre_padding +
    • >>   _printf_post_padding +
    + +

    __scatterload_copy (ARM, 28 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) + +

    __scatterload_null (ARM, 4 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) + +

    __scatterload_zeroinit (ARM, 24 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED) +

    +

    +Local Symbols +

    +

    delay (ARM, 24 bytes, Stack size 0 bytes, lcd_4bit.o(.text)) +

    [Called By]

    • >>   lcd_write_4bit +
    • >>   lcd_read_status +
    • >>   lcd_init +
    + +

    lcd_read_status (ARM, 188 bytes, Stack size 8 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = lcd_read_status +
    +
    [Calls]
    • >>   delay +
    +
    [Called By]
    • >>   wait_while_busy +
    + +

    wait_while_busy (ARM, 28 bytes, Stack size 8 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 16
    • Call Chain = wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   lcd_read_status +
    +
    [Called By]
    • >>   lcd_write_cmd +
    • >>   lcd_write_data +
    + +

    lcd_write_data (ARM, 48 bytes, Stack size 8 bytes, lcd_4bit.o(.text)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = lcd_write_data ⇒ wait_while_busy ⇒ lcd_read_status +
    +
    [Calls]
    • >>   lcd_write_4bit +
    • >>   wait_while_busy +
    +
    [Called By]
    • >>   lcd_putchar +
    + +

    Undef_Handler (ARM, 4 bytes, Stack size unknown bytes, lpc2300.o(RESET)) +

    [Calls]

    • >>   Undef_Handler +
    +
    [Called By]
    • >>   Undef_Handler +
    +
    [Address Reference Count : 1]
    • lpc2300.o(RESET) +
    +

    SWI_Handler (ARM, 4 bytes, Stack size unknown bytes, lpc2300.o(RESET)) +

    [Calls]

    • >>   SWI_Handler +
    +
    [Called By]
    • >>   SWI_Handler +
    +
    [Address Reference Count : 1]
    • lpc2300.o(RESET) +
    +

    PAbt_Handler (ARM, 4 bytes, Stack size unknown bytes, lpc2300.o(RESET)) +

    [Calls]

    • >>   PAbt_Handler +
    +
    [Called By]
    • >>   PAbt_Handler +
    +
    [Address Reference Count : 1]
    • lpc2300.o(RESET) +
    +

    DAbt_Handler (ARM, 4 bytes, Stack size unknown bytes, lpc2300.o(RESET)) +

    [Calls]

    • >>   DAbt_Handler +
    +
    [Called By]
    • >>   DAbt_Handler +
    +
    [Address Reference Count : 1]
    • lpc2300.o(RESET) +
    +

    IRQ_Handler (ARM, 4 bytes, Stack size unknown bytes, lpc2300.o(RESET)) +

    [Calls]

    • >>   IRQ_Handler +
    +
    [Called By]
    • >>   IRQ_Handler +
    +
    [Address Reference Count : 1]
    • lpc2300.o(RESET) +
    +

    FIQ_Handler (ARM, 4 bytes, Stack size unknown bytes, lpc2300.o(RESET)) +

    [Calls]

    • >>   FIQ_Handler +
    +
    [Called By]
    • >>   FIQ_Handler +
    +
    [Address Reference Count : 1]
    • lpc2300.o(RESET) +
    +

    _fp_digits (Thumb, 318 bytes, Stack size 56 bytes, printfa.o(i._fp_digits), UNUSED) +

    [Calls]

    • >>   __aeabi_uldivmod +
    • >>   __aeabi_dadd +
    • >>   __aeabi_d2ulz +
    • >>   __aeabi_cdrcmple +
    • >>   __aeabi_dmul +
    • >>   __aeabi_ddiv +
    +
    [Called By]
    • >>   _printf_core +
    + +

    _printf_core (Thumb, 1800 bytes, Stack size 128 bytes, printfa.o(i._printf_core), UNUSED) +

    [Calls]

    • >>   __aeabi_uldivmod +
    • >>   _printf_pre_padding +
    • >>   _printf_post_padding +
    • >>   _fp_digits +
    • >>   __ARM_common_call_via_r2 +
    • >>   __aeabi_uidivmod +
    +
    [Called By]
    • >>   __0sprintf +
    + +

    _printf_post_padding (Thumb, 38 bytes, Stack size 24 bytes, printfa.o(i._printf_post_padding), UNUSED) +

    [Calls]

    • >>   __ARM_common_call_via_r6 +
    +
    [Called By]
    • >>   _printf_core +
    + +

    _printf_pre_padding (Thumb, 50 bytes, Stack size 40 bytes, printfa.o(i._printf_pre_padding), UNUSED) +

    [Calls]

    • >>   __ARM_common_call_via_r6 +
    +
    [Called By]
    • >>   _printf_core +
    + +

    _sputc (Thumb, 10 bytes, Stack size 0 bytes, printfa.o(i._sputc)) +

    [Called By]

    • >>   __0sprintf +
    +
    [Address Reference Count : 1]
    • printfa.o(i.__0sprintf) +

    +

    +Undefined Global Symbols +


    diff --git a/ADC.lnp b/ADC.lnp new file mode 100644 index 0000000..58c0d00 --- /dev/null +++ b/ADC.lnp @@ -0,0 +1,5 @@ +--cpu ARM7TDMI "servo_mg995.o" "lcd_4bit.o" "irq.o" "rtc.o" "ultrasonic_hc_sr04.o" "main.o" "lpc2300.o" +--library_type=microlib --strict --scatter "ADC.sct" +--summary_stderr --info summarysizes --map --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers + --list ".\ADC.map" -o ADC.axf \ No newline at end of file diff --git a/ADC.map b/ADC.map new file mode 100644 index 0000000..e025630 --- /dev/null +++ b/ADC.map @@ -0,0 +1,841 @@ +ARM Linker, 5.03 [Build 69] [MDK-ARM Lite] + +============================================================================== + +Section Cross References + + servo_mg995.o(.text) refers to uidiv.o(.text) for __aeabi_uidivmod + servo_mg995.o(.text) refers to lcd_4bit.o(.text) for lcd_init + servo_mg995.o(.text) refers to servo_mg995.o(.data) for i + lcd_4bit.o(.text) refers to lcd_4bit.o(.constdata) for UserFont + irq.o(.text) refers to irq.o(.data) for clk_cntr + irq.o(.text) refers to rtc.o(.data) for clock_1s + rtc.o(.text) refers to printfa.o(i.__0sprintf) for __2sprintf + rtc.o(.text) refers to lcd_4bit.o(.text) for set_cursor + rtc.o(.text) refers to irq.o(.text) for T0_IRQHandler + rtc.o(.text) refers to rtc.o(.data) for clock_1s + ultrasonic_hc_sr04.o(.text) refers to lcd_4bit.o(.text) for lcd_init + ultrasonic_hc_sr04.o(.text) refers to dflti.o(.text) for __aeabi_i2d + ultrasonic_hc_sr04.o(.text) refers to dmul.o(.text) for __aeabi_dmul + ultrasonic_hc_sr04.o(.text) refers to ddiv.o(.text) for __aeabi_ddiv + ultrasonic_hc_sr04.o(.text) refers to d2f.o(.text) for __aeabi_d2f + ultrasonic_hc_sr04.o(.text) refers to cfcmple.o(.text) for __aeabi_cfcmple + ultrasonic_hc_sr04.o(.text) refers to f2d.o(.text) for __aeabi_f2d + ultrasonic_hc_sr04.o(.text) refers to printfa.o(i.__0sprintf) for __2sprintf + ultrasonic_hc_sr04.o(.text) refers to ultrasonic_hc_sr04.o(.data) for echoTime + ultrasonic_hc_sr04.o(.text) refers to ultrasonic_hc_sr04.o(.bss) for cVal + main.o(.text) refers to ultrasonic_hc_sr04.o(.text) for setupTimer + main.o(.text) refers to rtc.o(.text) for RTCTimerEnable + main.o(.text) refers to servo_mg995.o(.text) for PWM_Init + main.o(.text) refers to lcd_4bit.o(.text) for lcd_init + main.o(.text) refers to cfcmple.o(.text) for __aeabi_cfcmple + main.o(.text) refers to f2d.o(.text) for __aeabi_f2d + main.o(.text) refers to printfa.o(i.__0sprintf) for __2sprintf + main.o(.text) refers to idiv.o(.text) for __aeabi_idivmod + main.o(.text) refers to rtc.o(.data) for min + lpc2300.o(RESET) refers to lpc2300.o(STACK) for Stack_Top + lpc2300.o(RESET) refers to entry.o(.ARM.Collect$$$$00000000) for __main + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$0000000F) for __rt_final_exit + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry7b.o(.ARM.Collect$$$$00000008) for _main_clock + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry8b.o(.ARM.Collect$$$$0000000A) for _main_cpp_init + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry9a.o(.ARM.Collect$$$$0000000B) for _main_init + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry5.o(.ARM.Collect$$$$00000004) for _main_scatterload + entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry2.o(.ARM.Collect$$$$00000001) for _main_stk + idiv.o(.text) refers to uidiv.o(.text) for __aeabi_uidivmod + printfb.o(i.__0fprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0fprintf$bare) refers to fputc.o(i.fputc) for fputc + printfb.o(i.__0printf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0printf$bare) refers to fputc.o(i.fputc) for fputc + printfb.o(i.__0printf$bare) refers to stdout.o(.data) for __stdout + printfb.o(i.__0snprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0snprintf$bare) refers to printfb.o(i._snputc) for _snputc + printfb.o(i.__0sprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0sprintf$bare) refers to printfb.o(i._sputc) for _sputc + printfb.o(i.__0vfprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vfprintf$bare) refers to fputc.o(i.fputc) for fputc + printfb.o(i.__0vprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vprintf$bare) refers to fputc.o(i.fputc) for fputc + printfb.o(i.__0vprintf$bare) refers to stdout.o(.data) for __stdout + printfb.o(i.__0vsnprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vsnprintf$bare) refers to printfb.o(i._snputc) for _snputc + printfb.o(i.__0vsprintf$bare) refers to printfb.o(i._printf_core) for _printf_core + printfb.o(i.__0vsprintf$bare) refers to printfb.o(i._sputc) for _sputc + printfb.o(i._printf_core) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printf0.o(i.__0fprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0fprintf$0) refers to fputc.o(i.fputc) for fputc + printf0.o(i.__0printf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0printf$0) refers to fputc.o(i.fputc) for fputc + printf0.o(i.__0printf$0) refers to stdout.o(.data) for __stdout + printf0.o(i.__0snprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0snprintf$0) refers to printf0.o(i._snputc) for _snputc + printf0.o(i.__0sprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0sprintf$0) refers to printf0.o(i._sputc) for _sputc + printf0.o(i.__0vfprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vfprintf$0) refers to fputc.o(i.fputc) for fputc + printf0.o(i.__0vprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vprintf$0) refers to fputc.o(i.fputc) for fputc + printf0.o(i.__0vprintf$0) refers to stdout.o(.data) for __stdout + printf0.o(i.__0vsnprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vsnprintf$0) refers to printf0.o(i._snputc) for _snputc + printf0.o(i.__0vsprintf$0) refers to printf0.o(i._printf_core) for _printf_core + printf0.o(i.__0vsprintf$0) refers to printf0.o(i._sputc) for _sputc + printf0.o(i._printf_core) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printf1.o(i.__0fprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0fprintf$1) refers to fputc.o(i.fputc) for fputc + printf1.o(i.__0printf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0printf$1) refers to fputc.o(i.fputc) for fputc + printf1.o(i.__0printf$1) refers to stdout.o(.data) for __stdout + printf1.o(i.__0snprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0snprintf$1) refers to printf1.o(i._snputc) for _snputc + printf1.o(i.__0sprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0sprintf$1) refers to printf1.o(i._sputc) for _sputc + printf1.o(i.__0vfprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vfprintf$1) refers to fputc.o(i.fputc) for fputc + printf1.o(i.__0vprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vprintf$1) refers to fputc.o(i.fputc) for fputc + printf1.o(i.__0vprintf$1) refers to stdout.o(.data) for __stdout + printf1.o(i.__0vsnprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vsnprintf$1) refers to printf1.o(i._snputc) for _snputc + printf1.o(i.__0vsprintf$1) refers to printf1.o(i._printf_core) for _printf_core + printf1.o(i.__0vsprintf$1) refers to printf1.o(i._sputc) for _sputc + printf1.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printf1.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf2.o(i.__0fprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0fprintf$2) refers to fputc.o(i.fputc) for fputc + printf2.o(i.__0printf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0printf$2) refers to fputc.o(i.fputc) for fputc + printf2.o(i.__0printf$2) refers to stdout.o(.data) for __stdout + printf2.o(i.__0snprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0snprintf$2) refers to printf2.o(i._snputc) for _snputc + printf2.o(i.__0sprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0sprintf$2) refers to printf2.o(i._sputc) for _sputc + printf2.o(i.__0vfprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vfprintf$2) refers to fputc.o(i.fputc) for fputc + printf2.o(i.__0vprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vprintf$2) refers to fputc.o(i.fputc) for fputc + printf2.o(i.__0vprintf$2) refers to stdout.o(.data) for __stdout + printf2.o(i.__0vsnprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vsnprintf$2) refers to printf2.o(i._snputc) for _snputc + printf2.o(i.__0vsprintf$2) refers to printf2.o(i._printf_core) for _printf_core + printf2.o(i.__0vsprintf$2) refers to printf2.o(i._sputc) for _sputc + printf2.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printf3.o(i.__0fprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0fprintf$3) refers to fputc.o(i.fputc) for fputc + printf3.o(i.__0printf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0printf$3) refers to fputc.o(i.fputc) for fputc + printf3.o(i.__0printf$3) refers to stdout.o(.data) for __stdout + printf3.o(i.__0snprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0snprintf$3) refers to printf3.o(i._snputc) for _snputc + printf3.o(i.__0sprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0sprintf$3) refers to printf3.o(i._sputc) for _sputc + printf3.o(i.__0vfprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vfprintf$3) refers to fputc.o(i.fputc) for fputc + printf3.o(i.__0vprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vprintf$3) refers to fputc.o(i.fputc) for fputc + printf3.o(i.__0vprintf$3) refers to stdout.o(.data) for __stdout + printf3.o(i.__0vsnprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vsnprintf$3) refers to printf3.o(i._snputc) for _snputc + printf3.o(i.__0vsprintf$3) refers to printf3.o(i._printf_core) for _printf_core + printf3.o(i.__0vsprintf$3) refers to printf3.o(i._sputc) for _sputc + printf3.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printf3.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf4.o(i.__0fprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0fprintf$4) refers to fputc.o(i.fputc) for fputc + printf4.o(i.__0printf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0printf$4) refers to fputc.o(i.fputc) for fputc + printf4.o(i.__0printf$4) refers to stdout.o(.data) for __stdout + printf4.o(i.__0snprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0snprintf$4) refers to printf4.o(i._snputc) for _snputc + printf4.o(i.__0sprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0sprintf$4) refers to printf4.o(i._sputc) for _sputc + printf4.o(i.__0vfprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vfprintf$4) refers to fputc.o(i.fputc) for fputc + printf4.o(i.__0vprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vprintf$4) refers to fputc.o(i.fputc) for fputc + printf4.o(i.__0vprintf$4) refers to stdout.o(.data) for __stdout + printf4.o(i.__0vsnprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vsnprintf$4) refers to printf4.o(i._snputc) for _snputc + printf4.o(i.__0vsprintf$4) refers to printf4.o(i._printf_core) for _printf_core + printf4.o(i.__0vsprintf$4) refers to printf4.o(i._sputc) for _sputc + printf4.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printf4.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf5.o(i.__0fprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0fprintf$5) refers to fputc.o(i.fputc) for fputc + printf5.o(i.__0printf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0printf$5) refers to fputc.o(i.fputc) for fputc + printf5.o(i.__0printf$5) refers to stdout.o(.data) for __stdout + printf5.o(i.__0snprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0snprintf$5) refers to printf5.o(i._snputc) for _snputc + printf5.o(i.__0sprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0sprintf$5) refers to printf5.o(i._sputc) for _sputc + printf5.o(i.__0vfprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vfprintf$5) refers to fputc.o(i.fputc) for fputc + printf5.o(i.__0vprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vprintf$5) refers to fputc.o(i.fputc) for fputc + printf5.o(i.__0vprintf$5) refers to stdout.o(.data) for __stdout + printf5.o(i.__0vsnprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vsnprintf$5) refers to printf5.o(i._snputc) for _snputc + printf5.o(i.__0vsprintf$5) refers to printf5.o(i._printf_core) for _printf_core + printf5.o(i.__0vsprintf$5) refers to printf5.o(i._sputc) for _sputc + printf5.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printf5.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf6.o(i.__0fprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0fprintf$6) refers to fputc.o(i.fputc) for fputc + printf6.o(i.__0printf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0printf$6) refers to fputc.o(i.fputc) for fputc + printf6.o(i.__0printf$6) refers to stdout.o(.data) for __stdout + printf6.o(i.__0snprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0snprintf$6) refers to printf6.o(i._snputc) for _snputc + printf6.o(i.__0sprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0sprintf$6) refers to printf6.o(i._sputc) for _sputc + printf6.o(i.__0vfprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vfprintf$6) refers to fputc.o(i.fputc) for fputc + printf6.o(i.__0vprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vprintf$6) refers to fputc.o(i.fputc) for fputc + printf6.o(i.__0vprintf$6) refers to stdout.o(.data) for __stdout + printf6.o(i.__0vsnprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vsnprintf$6) refers to printf6.o(i._snputc) for _snputc + printf6.o(i.__0vsprintf$6) refers to printf6.o(i._printf_core) for _printf_core + printf6.o(i.__0vsprintf$6) refers to printf6.o(i._sputc) for _sputc + printf6.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printf6.o(i._printf_core) refers to printf6.o(i._printf_pre_padding) for _printf_pre_padding + printf6.o(i._printf_core) refers to printf6.o(i._printf_post_padding) for _printf_post_padding + printf6.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printf6.o(i._printf_post_padding) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printf6.o(i._printf_pre_padding) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printf7.o(i.__0fprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0fprintf$7) refers to fputc.o(i.fputc) for fputc + printf7.o(i.__0printf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0printf$7) refers to fputc.o(i.fputc) for fputc + printf7.o(i.__0printf$7) refers to stdout.o(.data) for __stdout + printf7.o(i.__0snprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0snprintf$7) refers to printf7.o(i._snputc) for _snputc + printf7.o(i.__0sprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0sprintf$7) refers to printf7.o(i._sputc) for _sputc + printf7.o(i.__0vfprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vfprintf$7) refers to fputc.o(i.fputc) for fputc + printf7.o(i.__0vprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vprintf$7) refers to fputc.o(i.fputc) for fputc + printf7.o(i.__0vprintf$7) refers to stdout.o(.data) for __stdout + printf7.o(i.__0vsnprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vsnprintf$7) refers to printf7.o(i._snputc) for _snputc + printf7.o(i.__0vsprintf$7) refers to printf7.o(i._printf_core) for _printf_core + printf7.o(i.__0vsprintf$7) refers to printf7.o(i._sputc) for _sputc + printf7.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printf7.o(i._printf_core) refers to printf7.o(i._printf_pre_padding) for _printf_pre_padding + printf7.o(i._printf_core) refers to printf7.o(i._printf_post_padding) for _printf_post_padding + printf7.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf7.o(i._printf_post_padding) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printf7.o(i._printf_pre_padding) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printf8.o(i.__0fprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0fprintf$8) refers to fputc.o(i.fputc) for fputc + printf8.o(i.__0printf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0printf$8) refers to fputc.o(i.fputc) for fputc + printf8.o(i.__0printf$8) refers to stdout.o(.data) for __stdout + printf8.o(i.__0snprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0snprintf$8) refers to printf8.o(i._snputc) for _snputc + printf8.o(i.__0sprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0sprintf$8) refers to printf8.o(i._sputc) for _sputc + printf8.o(i.__0vfprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vfprintf$8) refers to fputc.o(i.fputc) for fputc + printf8.o(i.__0vprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vprintf$8) refers to fputc.o(i.fputc) for fputc + printf8.o(i.__0vprintf$8) refers to stdout.o(.data) for __stdout + printf8.o(i.__0vsnprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vsnprintf$8) refers to printf8.o(i._snputc) for _snputc + printf8.o(i.__0vsprintf$8) refers to printf8.o(i._printf_core) for _printf_core + printf8.o(i.__0vsprintf$8) refers to printf8.o(i._sputc) for _sputc + printf8.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printf8.o(i._printf_core) refers to printf8.o(i._printf_pre_padding) for _printf_pre_padding + printf8.o(i._printf_core) refers to printf8.o(i._printf_post_padding) for _printf_post_padding + printf8.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printf8.o(i._printf_post_padding) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printf8.o(i._printf_pre_padding) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printfa.o(i.__0fprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0fprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0fprintf) refers to fputc.o(i.fputc) for fputc + printfa.o(i.__0printf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0printf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0printf) refers to fputc.o(i.fputc) for fputc + printfa.o(i.__0printf) refers to stdout.o(.data) for __stdout + printfa.o(i.__0snprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0snprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0snprintf) refers to printfa.o(i._snputc) for _snputc + printfa.o(i.__0sprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0sprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0sprintf) refers to printfa.o(i._sputc) for _sputc + printfa.o(i.__0vfprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vfprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vfprintf) refers to fputc.o(i.fputc) for fputc + printfa.o(i.__0vprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vprintf) refers to fputc.o(i.fputc) for fputc + printfa.o(i.__0vprintf) refers to stdout.o(.data) for __stdout + printfa.o(i.__0vsnprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vsnprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vsnprintf) refers to printfa.o(i._snputc) for _snputc + printfa.o(i.__0vsprintf) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i.__0vsprintf) refers to printfa.o(i._printf_core) for _printf_core + printfa.o(i.__0vsprintf) refers to printfa.o(i._sputc) for _sputc + printfa.o(i._fp_digits) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._fp_digits) refers to dmul.o(.text) for __aeabi_dmul + printfa.o(i._fp_digits) refers to ddiv.o(.text) for __aeabi_ddiv + printfa.o(i._fp_digits) refers to cdrcmple.o(.text) for __aeabi_cdrcmple + printfa.o(i._fp_digits) refers to dadd.o(.text) for __aeabi_dadd + printfa.o(i._fp_digits) refers to dfixul.o(.text) for __aeabi_d2ulz + printfa.o(i._fp_digits) refers to uldiv.o(.text) for __aeabi_uldivmod + printfa.o(i._printf_core) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._printf_core) refers to printf1.o(i.__ARM_common_call_via_r2) for __ARM_common_call_via_r2 + printfa.o(i._printf_core) refers to printfa.o(i._printf_pre_padding) for _printf_pre_padding + printfa.o(i._printf_core) refers to uldiv.o(.text) for __aeabi_uldivmod + printfa.o(i._printf_core) refers to printfa.o(i._printf_post_padding) for _printf_post_padding + printfa.o(i._printf_core) refers to printfa.o(i._fp_digits) for _fp_digits + printfa.o(i._printf_core) refers to uidiv.o(.text) for __aeabi_uidivmod + printfa.o(i._printf_post_padding) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._printf_post_padding) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printfa.o(i._printf_pre_padding) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._printf_pre_padding) refers to printfb.o(i.__ARM_common_call_via_r6) for __ARM_common_call_via_r6 + printfa.o(i._snputc) refers (Special) to iusefp.o(.text) for __I$use$fp + printfa.o(i._sputc) refers (Special) to iusefp.o(.text) for __I$use$fp + dmul.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + dmul.o(.text) refers to depilogue.o(.text) for _double_epilogue + ddiv.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + ddiv.o(.text) refers to depilogue.o(.text) for _double_round + dflti.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + dflti.o(.text) refers to depilogue.o(.text) for _double_epilogue + f2d.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + d2f.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + d2f.o(.text) refers to fepilogue.o(.text) for _float_round + cfcmple.o(.text) refers (Special) to iusefp.o(.text) for __I$use$fp + entry2.o(.ARM.Collect$$$$00000001) refers to entry2.o(.ARM.Collect$$$$00002712) for __lit__00000000 + entry2.o(.ARM.Collect$$$$00002712) refers to lpc2300.o(STACK) for __initial_sp + entry5.o(.ARM.Collect$$$$00000004) refers to init.o(.text) for __scatterload + entry9a.o(.ARM.Collect$$$$0000000B) refers to main.o(.text) for main + entry9b.o(.ARM.Collect$$$$0000000C) refers to main.o(.text) for main + fputc.o(i.fputc) refers (Special) to iusesemip.o(.text) for __I$use$semihosting$fputc + fputc.o(i.fputc) refers (Special) to semi.o(.text) for __semihosting_library_function + uldiv.o(.text) refers to llushr.o(.text) for __aeabi_llsr + uldiv.o(.text) refers to llshl.o(.text) for __aeabi_llsl + depilogue.o(.text) refers to depilogue.o(i.__ARM_clz) for __ARM_clz + depilogue.o(.text) refers to llshl.o(.text) for __aeabi_llsl + depilogue.o(.text) refers to llushr.o(.text) for __aeabi_llsr + dadd.o(.text) refers to llshl.o(.text) for __aeabi_llsl + dadd.o(.text) refers to llsshr.o(.text) for __aeabi_lasr + dadd.o(.text) refers to depilogue.o(.text) for _double_epilogue + dfixul.o(.text) refers to llushr.o(.text) for __aeabi_llsr + dfixul.o(.text) refers to llshl.o(.text) for __aeabi_llsl + init.o(.text) refers to init.o(i.__ARM_common_call_via_r3) for __ARM_common_call_via_r3 + init.o(.text) refers to entry5.o(.ARM.Collect$$$$00000004) for __main_after_scatterload + + +============================================================================== + +Removing Unused input sections from the image. + + Removing lpc2300.o(HEAP), (0 bytes). + +1 unused section(s) (total 0 bytes) removed from the image. + +============================================================================== + +Adding Veneers to the image + + Adding AT veneer (8 bytes, Inline) for call to '__aeabi_uidivmod' from servo_mg995.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__aeabi_idivmod' from main.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__aeabi_dmul' from ultrasonic_hc_sr04.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__aeabi_ddiv' from ultrasonic_hc_sr04.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__aeabi_i2d' from ultrasonic_hc_sr04.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__aeabi_f2d' from ultrasonic_hc_sr04.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__aeabi_d2f' from ultrasonic_hc_sr04.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__aeabi_cfcmple' from ultrasonic_hc_sr04.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__scatterload' from entry5.o(.ARM.Collect$$$$00000004). + Adding TA veneer (8 bytes, Short) for call to '__main_after_scatterload' from init.o(.text). + Adding AT veneer (8 bytes, Inline) for call to '__2sprintf' from rtc.o(.text). + +11 Veneer(s) (total 88 bytes) added to the image. + +============================================================================== + +Image Symbol Table + + Local Symbols + + Symbol Name Value Ov Type Size Object(Section) + + RESET 0x00000000 Section 556 lpc2300.o(RESET) + ../clib/microlib/division.c 0x00000000 Number 0 uldiv.o ABSOLUTE + ../clib/microlib/division.c 0x00000000 Number 0 idiv.o ABSOLUTE + ../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE + ../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printfa.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf4.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf5.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf7.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf8.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf6.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printfb.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf0.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf1.o ABSOLUTE + ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf3.o ABSOLUTE + ../clib/microlib/printf/stubs.s 0x00000000 Number 0 stubs.o ABSOLUTE + ../clib/microlib/stdio/fputc.c 0x00000000 Number 0 fputc.o ABSOLUTE + ../clib/microlib/stdio/semi.s 0x00000000 Number 0 semi.o ABSOLUTE + ../clib/microlib/stdio/streams.c 0x00000000 Number 0 stdout.o ABSOLUTE + ../clib/microlib/stubs.s 0x00000000 Number 0 iusesemip.o ABSOLUTE + ../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE + ../fplib/microlib/d2f.c 0x00000000 Number 0 d2f.o ABSOLUTE + ../fplib/microlib/f2d.c 0x00000000 Number 0 f2d.o ABSOLUTE + ../fplib/microlib/fpadd.c 0x00000000 Number 0 dadd.o ABSOLUTE + ../fplib/microlib/fpdiv.c 0x00000000 Number 0 ddiv.o ABSOLUTE + ../fplib/microlib/fpepilogue.c 0x00000000 Number 0 depilogue.o ABSOLUTE + ../fplib/microlib/fpepilogue.c 0x00000000 Number 0 fepilogue.o ABSOLUTE + ../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixul.o ABSOLUTE + ../fplib/microlib/fpflt.c 0x00000000 Number 0 dflti.o ABSOLUTE + ../fplib/microlib/fpmul.c 0x00000000 Number 0 dmul.o ABSOLUTE + IRQ.c 0x00000000 Number 0 irq.o ABSOLUTE + LCD_4bit.c 0x00000000 Number 0 lcd_4bit.o ABSOLUTE + LPC2300.s 0x00000000 Number 0 lpc2300.o ABSOLUTE + RTC.c 0x00000000 Number 0 rtc.o ABSOLUTE + Servo_MG995.c 0x00000000 Number 0 servo_mg995.o ABSOLUTE + Ultrasonic_HC_SR04.c 0x00000000 Number 0 ultrasonic_hc_sr04.o ABSOLUTE + cdrcmple.s 0x00000000 Number 0 cdrcmple.o ABSOLUTE + cfcmple.s 0x00000000 Number 0 cfcmple.o ABSOLUTE + dc.s 0x00000000 Number 0 dc.o ABSOLUTE + handlers.s 0x00000000 Number 0 handlers.o ABSOLUTE + init.s 0x00000000 Number 0 init.o ABSOLUTE + main.c 0x00000000 Number 0 main.o ABSOLUTE + Undef_Handler 0x00000040 ARM Code 4 lpc2300.o(RESET) + SWI_Handler 0x00000044 ARM Code 4 lpc2300.o(RESET) + PAbt_Handler 0x00000048 ARM Code 4 lpc2300.o(RESET) + DAbt_Handler 0x0000004c ARM Code 4 lpc2300.o(RESET) + IRQ_Handler 0x00000050 ARM Code 4 lpc2300.o(RESET) + FIQ_Handler 0x00000054 ARM Code 4 lpc2300.o(RESET) + .ARM.Collect$$$$00000000 0x0000022c Section 0 entry.o(.ARM.Collect$$$$00000000) + .ARM.Collect$$$$00000001 0x0000022c Section 4 entry2.o(.ARM.Collect$$$$00000001) + .ARM.Collect$$$$00000004 0x00000230 Section 4 entry5.o(.ARM.Collect$$$$00000004) + .ARM.Collect$$$$00000008 0x00000234 Section 0 entry7b.o(.ARM.Collect$$$$00000008) + .ARM.Collect$$$$0000000A 0x00000234 Section 0 entry8b.o(.ARM.Collect$$$$0000000A) + .ARM.Collect$$$$0000000B 0x00000234 Section 12 entry9a.o(.ARM.Collect$$$$0000000B) + .ARM.Collect$$$$0000000D 0x00000240 Section 0 entry10a.o(.ARM.Collect$$$$0000000D) + .ARM.Collect$$$$0000000F 0x00000240 Section 0 entry11a.o(.ARM.Collect$$$$0000000F) + .ARM.Collect$$$$00002712 0x00000240 Section 4 entry2.o(.ARM.Collect$$$$00002712) + __lit__00000000 0x00000240 Data 4 entry2.o(.ARM.Collect$$$$00002712) + .text 0x00000244 Section 0 servo_mg995.o(.text) + .text 0x00000318 Section 0 lcd_4bit.o(.text) + delay 0x00000318 ARM Code 24 lcd_4bit.o(.text) + lcd_read_status 0x00000330 ARM Code 188 lcd_4bit.o(.text) + wait_while_busy 0x000003ec ARM Code 28 lcd_4bit.o(.text) + lcd_write_data 0x0000048c ARM Code 48 lcd_4bit.o(.text) + .text 0x00000610 Section 0 irq.o(.text) + .text 0x00000674 Section 0 rtc.o(.text) + .text 0x0000092c Section 0 ultrasonic_hc_sr04.o(.text) + .text 0x00000c84 Section 0 main.o(.text) + .text 0x00000eec Section 0 uidiv.o(.text) + .text 0x00000f24 Section 0 idiv.o(.text) + .text 0x00000f58 Section 0 dmul.o(.text) + .text 0x00001034 Section 0 ddiv.o(.text) + .text 0x00001130 Section 0 dflti.o(.text) + .text 0x00001160 Section 0 f2d.o(.text) + .text 0x00001190 Section 0 d2f.o(.text) + .text 0x000011d4 Section 20 cfcmple.o(.text) + .text 0x000011e8 Section 0 uldiv.o(.text) + .text 0x00001250 Section 0 iusefp.o(.text) + .text 0x00001250 Section 0 fepilogue.o(.text) + .text 0x000012d4 Section 0 depilogue.o(.text) + .text 0x0000139c Section 0 dadd.o(.text) + .text 0x00001504 Section 0 dfixul.o(.text) + .text 0x00001548 Section 40 cdrcmple.o(.text) + .text 0x00001578 Section 32 init.o(.text) + .text 0x00001598 Section 0 llshl.o(.text) + .text 0x000015ba Section 0 llushr.o(.text) + .text 0x000015de Section 0 llsshr.o(.text) + i.__0sprintf 0x00001618 Section 0 printfa.o(i.__0sprintf) + i.__ARM_clz 0x00001640 Section 0 depilogue.o(i.__ARM_clz) + i.__ARM_common_call_via_r2 0x0000166e Section 0 printf1.o(i.__ARM_common_call_via_r2) + i.__ARM_common_call_via_r3 0x00001670 Section 2 init.o(i.__ARM_common_call_via_r3) + i.__ARM_common_call_via_r6 0x00001672 Section 0 printfb.o(i.__ARM_common_call_via_r6) + i.__scatterload_copy 0x00001674 Section 28 handlers.o(i.__scatterload_copy) + i.__scatterload_null 0x00001690 Section 4 handlers.o(i.__scatterload_null) + i.__scatterload_zeroinit 0x00001694 Section 24 handlers.o(i.__scatterload_zeroinit) + i._fp_digits 0x000016ac Section 0 printfa.o(i._fp_digits) + _fp_digits 0x000016ad Thumb Code 318 printfa.o(i._fp_digits) + i._printf_core 0x00001808 Section 0 printfa.o(i._printf_core) + _printf_core 0x00001809 Thumb Code 1800 printfa.o(i._printf_core) + i._printf_post_padding 0x00001f20 Section 0 printfa.o(i._printf_post_padding) + _printf_post_padding 0x00001f21 Thumb Code 38 printfa.o(i._printf_post_padding) + i._printf_pre_padding 0x00001f46 Section 0 printfa.o(i._printf_pre_padding) + _printf_pre_padding 0x00001f47 Thumb Code 50 printfa.o(i._printf_pre_padding) + i._sputc 0x00001f78 Section 0 printfa.o(i._sputc) + _sputc 0x00001f79 Thumb Code 10 printfa.o(i._sputc) + .constdata 0x00001f82 Section 64 lcd_4bit.o(.constdata) + .data 0x40000000 Section 8 servo_mg995.o(.data) + .data 0x40000008 Section 4 irq.o(.data) + clk_cntr 0x40000008 Data 4 irq.o(.data) + .data 0x4000000c Section 23 rtc.o(.data) + .data 0x40000024 Section 16 ultrasonic_hc_sr04.o(.data) + .bss 0x40000034 Section 10 ultrasonic_hc_sr04.o(.bss) + STACK 0x40000040 Section 1288 lpc2300.o(STACK) + Stack_Top 0x40000548 Data 0 lpc2300.o(STACK) + + Global Symbols + + Symbol Name Value Ov Type Size Object(Section) + + BuildAttributes$$THM_ISAv1$ARM_ISAv4$S$PE$A:L22$X:L11$S22$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OTIME$ROPI$EBA8$MICROLIB$REQ8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE + __ARM_use_no_argv 0x00000000 Number 0 main.o ABSOLUTE + _printf_a 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_c 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_charcount 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_d 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_e 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_f 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_flags 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_fp_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_fp_hex 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_g 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_i 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_int_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_l 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_ll 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lld 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_lli 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llo 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llu 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_llx 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_dec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_hex 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_longlong_oct 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_ls 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_mbtowc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_n 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_o 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_p 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_percent 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_pre_padding 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_return_value 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_s 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_sizespec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_str 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_truncate_signed 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_truncate_unsigned 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_u 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_wc 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_wctomb 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_widthprec 0x00000000 Number 0 stubs.o ABSOLUTE + _printf_x 0x00000000 Number 0 stubs.o ABSOLUTE + __cpp_initialize__aeabi_ - Undefined Weak Reference + __cxa_finalize - Undefined Weak Reference + __decompress - Undefined Weak Reference + _clock_init - Undefined Weak Reference + _microlib_exit - Undefined Weak Reference + Reset_Handler 0x00000058 ARM Code 0 lpc2300.o(RESET) + __main 0x0000022c ARM Code 0 entry.o(.ARM.Collect$$$$00000000) + _main_stk 0x0000022c ARM Code 0 entry2.o(.ARM.Collect$$$$00000001) + _main_scatterload 0x00000230 ARM Code 0 entry5.o(.ARM.Collect$$$$00000004) + __main_after_scatterload 0x00000234 ARM Code 0 entry5.o(.ARM.Collect$$$$00000004) + _main_clock 0x00000234 ARM Code 0 entry7b.o(.ARM.Collect$$$$00000008) + _main_cpp_init 0x00000234 ARM Code 0 entry8b.o(.ARM.Collect$$$$0000000A) + _main_init 0x00000234 ARM Code 0 entry9a.o(.ARM.Collect$$$$0000000B) + __rt_final_cpp 0x00000240 ARM Code 0 entry10a.o(.ARM.Collect$$$$0000000D) + __rt_final_exit 0x00000240 ARM Code 0 entry11a.o(.ARM.Collect$$$$0000000F) + PWM_Init 0x00000244 ARM Code 60 servo_mg995.o(.text) + WaitTime 0x00000280 ARM Code 56 servo_mg995.o(.text) + PWM_SetDutyCycle 0x000002b8 ARM Code 52 servo_mg995.o(.text) + trial_run_servo 0x000002ec ARM Code 28 servo_mg995.o(.text) + lcd_write_4bit 0x00000408 ARM Code 84 lcd_4bit.o(.text) + lcd_write_cmd 0x0000045c ARM Code 48 lcd_4bit.o(.text) + lcd_putchar 0x000004bc ARM Code 24 lcd_4bit.o(.text) + lcd_init 0x000004d4 ARM Code 176 lcd_4bit.o(.text) + set_cursor 0x00000584 ARM Code 52 lcd_4bit.o(.text) + lcd_clear 0x000005b8 ARM Code 32 lcd_4bit.o(.text) + lcd_print 0x000005d8 ARM Code 40 lcd_4bit.o(.text) + T0_IRQHandler 0x00000610 ARM Code 88 irq.o(.text) + RTCTimerEnable 0x00000674 ARM Code 60 rtc.o(.text) + updateRTCTimer 0x000006b0 ARM Code 524 rtc.o(.text) + trial_run_rtc 0x000008bc ARM Code 44 rtc.o(.text) + delayUS 0x0000092c ARM Code 56 ultrasonic_hc_sr04.o(.text) + initTimer0 0x00000964 ARM Code 52 ultrasonic_hc_sr04.o(.text) + startTimer0 0x00000998 ARM Code 24 ultrasonic_hc_sr04.o(.text) + stopTimer0 0x000009b0 ARM Code 24 ultrasonic_hc_sr04.o(.text) + delayMS 0x000009c8 ARM Code 28 ultrasonic_hc_sr04.o(.text) + setPins 0x000009e4 ARM Code 76 ultrasonic_hc_sr04.o(.text) + setupTimer 0x00000a30 ARM Code 44 ultrasonic_hc_sr04.o(.text) + calDistance 0x00000a5c ARM Code 160 ultrasonic_hc_sr04.o(.text) + sendPulse 0x00000afc ARM Code 72 ultrasonic_hc_sr04.o(.text) + trial_run_ultrasonic 0x00000b44 ARM Code 240 ultrasonic_hc_sr04.o(.text) + main 0x00000c84 ARM Code 540 main.o(.text) + Inline ARM to Thumb Veneer to __aeabi_uidivmod 0x00000ee4 ARM Code 8 uidiv.o(.text) + __aeabi_uidiv 0x00000eed Thumb Code 0 uidiv.o(.text) + __aeabi_uidivmod 0x00000eed Thumb Code 46 uidiv.o(.text) + Inline ARM to Thumb Veneer to __aeabi_idivmod 0x00000f1c ARM Code 8 idiv.o(.text) + __aeabi_idiv 0x00000f25 Thumb Code 0 idiv.o(.text) + __aeabi_idivmod 0x00000f25 Thumb Code 44 idiv.o(.text) + Inline ARM to Thumb Veneer to __aeabi_dmul 0x00000f50 ARM Code 8 dmul.o(.text) + __aeabi_dmul 0x00000f59 Thumb Code 206 dmul.o(.text) + Inline ARM to Thumb Veneer to __aeabi_ddiv 0x0000102c ARM Code 8 ddiv.o(.text) + __aeabi_ddiv 0x00001035 Thumb Code 238 ddiv.o(.text) + Inline ARM to Thumb Veneer to __aeabi_i2d 0x00001128 ARM Code 8 dflti.o(.text) + __aeabi_i2d 0x00001131 Thumb Code 36 dflti.o(.text) + Inline ARM to Thumb Veneer to __aeabi_f2d 0x00001158 ARM Code 8 f2d.o(.text) + __aeabi_f2d 0x00001161 Thumb Code 40 f2d.o(.text) + Inline ARM to Thumb Veneer to __aeabi_d2f 0x00001188 ARM Code 8 d2f.o(.text) + __aeabi_d2f 0x00001191 Thumb Code 60 d2f.o(.text) + Inline ARM to Thumb Veneer to __aeabi_cfcmple 0x000011cc ARM Code 8 cfcmple.o(.text) + __aeabi_cfcmpeq 0x000011d5 Thumb Code 0 cfcmple.o(.text) + __aeabi_cfcmple 0x000011d5 Thumb Code 20 cfcmple.o(.text) + __aeabi_uldivmod 0x000011e9 Thumb Code 104 uldiv.o(.text) + __I$use$fp 0x00001250 ARM Code 0 iusefp.o(.text) + _float_round 0x00001251 Thumb Code 16 fepilogue.o(.text) + _float_epilogue 0x00001261 Thumb Code 116 fepilogue.o(.text) + _double_round 0x000012d5 Thumb Code 28 depilogue.o(.text) + _double_epilogue 0x000012f1 Thumb Code 170 depilogue.o(.text) + __aeabi_dadd 0x0000139d Thumb Code 330 dadd.o(.text) + __aeabi_dsub 0x000014e7 Thumb Code 12 dadd.o(.text) + __aeabi_drsub 0x000014f3 Thumb Code 12 dadd.o(.text) + __aeabi_d2ulz 0x00001505 Thumb Code 58 dfixul.o(.text) + __aeabi_cdrcmple 0x00001549 Thumb Code 40 cdrcmple.o(.text) + Inline ARM to Thumb Veneer to __scatterload 0x00001570 ARM Code 8 init.o(.text) + __scatterload 0x00001579 Thumb Code 24 init.o(.text) + __scatterload_rt2 0x00001579 Thumb Code 0 init.o(.text) + __aeabi_llsl 0x00001599 Thumb Code 34 llshl.o(.text) + _ll_shift_l 0x00001599 Thumb Code 0 llshl.o(.text) + __aeabi_llsr 0x000015bb Thumb Code 36 llushr.o(.text) + _ll_ushift_r 0x000015bb Thumb Code 0 llushr.o(.text) + __aeabi_lasr 0x000015df Thumb Code 40 llsshr.o(.text) + _ll_sshift_r 0x000015df Thumb Code 0 llsshr.o(.text) + Short Thumb to ARM Veneer to __main_after_scatterload 0x00001609 Thumb Code 8 anon$$obj.o(Veneer$$Code) + Inline ARM to Thumb Veneer to __2sprintf 0x00001610 ARM Code 8 printfa.o(i.__0sprintf) + __0sprintf 0x00001619 Thumb Code 36 printfa.o(i.__0sprintf) + __1sprintf 0x00001619 Thumb Code 0 printfa.o(i.__0sprintf) + __2sprintf 0x00001619 Thumb Code 0 printfa.o(i.__0sprintf) + __c89sprintf 0x00001619 Thumb Code 0 printfa.o(i.__0sprintf) + sprintf 0x00001619 Thumb Code 0 printfa.o(i.__0sprintf) + __ARM_clz 0x00001641 Thumb Code 46 depilogue.o(i.__ARM_clz) + __ARM_common_call_via_r2 0x0000166f Thumb Code 2 printf1.o(i.__ARM_common_call_via_r2) + __ARM_common_call_via_r3 0x00001671 Thumb Code 2 init.o(i.__ARM_common_call_via_r3) + __ARM_common_call_via_r6 0x00001673 Thumb Code 2 printfb.o(i.__ARM_common_call_via_r6) + __scatterload_copy 0x00001674 ARM Code 28 handlers.o(i.__scatterload_copy) + __scatterload_null 0x00001690 ARM Code 4 handlers.o(i.__scatterload_null) + __scatterload_zeroinit 0x00001694 ARM Code 24 handlers.o(i.__scatterload_zeroinit) + UserFont 0x00001f82 Data 64 lcd_4bit.o(.constdata) + Region$$Table$$Base 0x00001fc4 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x00001fe4 Number 0 anon$$obj.o(Region$$Table) + i 0x40000000 Data 4 servo_mg995.o(.data) + dutyCycle 0x40000004 Data 4 servo_mg995.o(.data) + j 0x4000000c Data 4 rtc.o(.data) + hr 0x40000010 Data 4 rtc.o(.data) + min 0x40000014 Data 4 rtc.o(.data) + sec 0x40000018 Data 4 rtc.o(.data) + hrVal 0x4000001c Data 2 rtc.o(.data) + minVal 0x4000001e Data 2 rtc.o(.data) + secV 0x40000020 Data 2 rtc.o(.data) + clock_1s 0x40000022 Data 1 rtc.o(.data) + echoTime 0x40000024 Data 4 ultrasonic_hc_sr04.o(.data) + distance 0x40000028 Data 4 ultrasonic_hc_sr04.o(.data) + k 0x4000002c Data 4 ultrasonic_hc_sr04.o(.data) + pulsecnt 0x40000030 Data 4 ultrasonic_hc_sr04.o(.data) + cVal 0x40000034 Data 10 ultrasonic_hc_sr04.o(.bss) + __initial_sp 0x40000440 Data 264 lpc2300.o(STACK) + + + +============================================================================== + +Memory Map of the image + + Image Entry point : 0x0000022c + + Load Region LR_IROM1 (Base: 0x00000000, Size: 0x00002018, Max: 0x00080000, ABSOLUTE) + + Execution Region ER_IROM1 (Base: 0x00000000, Size: 0x00001fe4, Max: 0x00080000, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x00000000 0x0000022c Code RO 112 RESET lpc2300.o + 0x0000022c 0x00000000 Code RO 116 * .ARM.Collect$$$$00000000 mc_t.l(entry.o) + 0x0000022c 0x00000004 Code RO 400 .ARM.Collect$$$$00000001 mc_t.l(entry2.o) + 0x00000230 0x00000004 Code RO 402 .ARM.Collect$$$$00000004 mc_t.l(entry5.o) + 0x00000234 0x00000000 Code RO 404 .ARM.Collect$$$$00000008 mc_t.l(entry7b.o) + 0x00000234 0x00000000 Code RO 406 .ARM.Collect$$$$0000000A mc_t.l(entry8b.o) + 0x00000234 0x0000000c Code RO 407 .ARM.Collect$$$$0000000B mc_t.l(entry9a.o) + 0x00000240 0x00000000 Code RO 409 .ARM.Collect$$$$0000000D mc_t.l(entry10a.o) + 0x00000240 0x00000000 Code RO 411 .ARM.Collect$$$$0000000F mc_t.l(entry11a.o) + 0x00000240 0x00000004 Code RO 401 .ARM.Collect$$$$00002712 mc_t.l(entry2.o) + 0x00000244 0x000000d4 Code RO 1 .text servo_mg995.o + 0x00000318 0x000002f8 Code RO 28 .text lcd_4bit.o + 0x00000610 0x00000064 Code RO 49 .text irq.o + 0x00000674 0x000002b8 Code RO 63 .text rtc.o + 0x0000092c 0x00000358 Code RO 78 .text ultrasonic_hc_sr04.o + 0x00000c84 0x00000260 Code RO 97 .text main.o + 0x00000ee4 0x00000008 Ven RO 119 .text mc_t.l(uidiv.o) + 0x00000eec 0x0000002e Code RO 119 .text mc_t.l(uidiv.o) + 0x00000f1a 0x00000002 PAD + 0x00000f1c 0x00000008 Ven RO 121 .text mc_t.l(idiv.o) + 0x00000f24 0x0000002c Code RO 121 .text mc_t.l(idiv.o) + 0x00000f50 0x00000008 Ven RO 388 .text mf_t.l(dmul.o) + 0x00000f58 0x000000d4 Code RO 388 .text mf_t.l(dmul.o) + 0x0000102c 0x00000008 Ven RO 390 .text mf_t.l(ddiv.o) + 0x00001034 0x000000f4 Code RO 390 .text mf_t.l(ddiv.o) + 0x00001128 0x00000008 Ven RO 392 .text mf_t.l(dflti.o) + 0x00001130 0x00000028 Code RO 392 .text mf_t.l(dflti.o) + 0x00001158 0x00000008 Ven RO 394 .text mf_t.l(f2d.o) + 0x00001160 0x00000028 Code RO 394 .text mf_t.l(f2d.o) + 0x00001188 0x00000008 Ven RO 396 .text mf_t.l(d2f.o) + 0x00001190 0x0000003c Code RO 396 .text mf_t.l(d2f.o) + 0x000011cc 0x00000008 Ven RO 398 .text mf_t.l(cfcmple.o) + 0x000011d4 0x00000014 Code RO 398 .text mf_t.l(cfcmple.o) + 0x000011e8 0x00000068 Code RO 416 .text mc_t.l(uldiv.o) + 0x00001250 0x00000000 Code RO 418 .text mc_t.l(iusefp.o) + 0x00001250 0x00000084 Code RO 419 .text mf_t.l(fepilogue.o) + 0x000012d4 0x000000c6 Code RO 421 .text mf_t.l(depilogue.o) + 0x0000139a 0x00000002 PAD + 0x0000139c 0x00000168 Code RO 425 .text mf_t.l(dadd.o) + 0x00001504 0x00000044 Code RO 427 .text mf_t.l(dfixul.o) + 0x00001548 0x00000028 Code RO 429 .text mf_t.l(cdrcmple.o) + 0x00001570 0x00000008 Ven RO 431 .text mc_t.l(init.o) + 0x00001578 0x00000020 Code RO 431 .text mc_t.l(init.o) + 0x00001598 0x00000022 Code RO 436 .text mc_t.l(llshl.o) + 0x000015ba 0x00000024 Code RO 438 .text mc_t.l(llushr.o) + 0x000015de 0x00000028 Code RO 440 .text mc_t.l(llsshr.o) + 0x00001606 0x00000002 PAD + 0x00001608 0x00000008 Ven RO 461 Veneer$$Code anon$$obj.o + 0x00001610 0x00000008 Ven RO 362 i.__0sprintf mc_t.l(printfa.o) + 0x00001618 0x00000028 Code RO 362 i.__0sprintf mc_t.l(printfa.o) + 0x00001640 0x0000002e Code RO 423 i.__ARM_clz mf_t.l(depilogue.o) + 0x0000166e 0x00000002 Code RO 191 i.__ARM_common_call_via_r2 mc_t.l(printf1.o) + 0x00001670 0x00000002 Code RO 433 i.__ARM_common_call_via_r3 mc_t.l(init.o) + 0x00001672 0x00000002 Code RO 145 i.__ARM_common_call_via_r6 mc_t.l(printfb.o) + 0x00001674 0x0000001c Code RO 445 i.__scatterload_copy mc_t.l(handlers.o) + 0x00001690 0x00000004 Code RO 446 i.__scatterload_null mc_t.l(handlers.o) + 0x00001694 0x00000018 Code RO 447 i.__scatterload_zeroinit mc_t.l(handlers.o) + 0x000016ac 0x0000015c Code RO 367 i._fp_digits mc_t.l(printfa.o) + 0x00001808 0x00000718 Code RO 368 i._printf_core mc_t.l(printfa.o) + 0x00001f20 0x00000026 Code RO 369 i._printf_post_padding mc_t.l(printfa.o) + 0x00001f46 0x00000032 Code RO 370 i._printf_pre_padding mc_t.l(printfa.o) + 0x00001f78 0x0000000a Code RO 372 i._sputc mc_t.l(printfa.o) + 0x00001f82 0x00000040 Data RO 29 .constdata lcd_4bit.o + 0x00001fc2 0x00000002 PAD + 0x00001fc4 0x00000020 Data RO 443 Region$$Table anon$$obj.o + + + Execution Region RW_IRAM1 (Base: 0x40000000, Size: 0x00000548, Max: 0x00008000, ABSOLUTE) + + Base Addr Size Type Attr Idx E Section Name Object + + 0x40000000 0x00000008 Data RW 2 .data servo_mg995.o + 0x40000008 0x00000004 Data RW 50 .data irq.o + 0x4000000c 0x00000017 Data RW 64 .data rtc.o + 0x40000023 0x00000001 PAD + 0x40000024 0x00000010 Data RW 80 .data ultrasonic_hc_sr04.o + 0x40000034 0x0000000a Zero RW 79 .bss ultrasonic_hc_sr04.o + 0x4000003e 0x00000002 PAD + 0x40000040 0x00000508 Zero RW 110 STACK lpc2300.o + + +============================================================================== + +Image component sizes + + + Code (inc. data) RO Data RW Data ZI Data Debug Object Name + + 100 12 0 4 0 432 irq.o + 760 16 64 0 0 3398 lcd_4bit.o + 556 80 0 0 1288 356 lpc2300.o + 608 68 0 0 0 811 main.o + 696 68 0 23 0 1588 rtc.o + 212 16 0 8 0 2571 servo_mg995.o + 856 80 0 16 10 2806 ultrasonic_hc_sr04.o + + ---------------------------------------------------------------------- + 3796 340 98 52 1300 11962 Object Totals + 8 0 32 0 0 0 (incl. Generated) + 0 0 2 1 2 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name + + 0 0 0 0 0 0 entry.o + 0 0 0 0 0 0 entry10a.o + 0 0 0 0 0 0 entry11a.o + 8 4 0 0 0 0 entry2.o + 4 0 0 0 0 0 entry5.o + 0 0 0 0 0 0 entry7b.o + 0 0 0 0 0 0 entry8b.o + 12 4 0 0 0 0 entry9a.o + 56 0 0 0 0 0 handlers.o + 52 0 0 0 0 84 idiv.o + 42 8 0 0 0 136 init.o + 0 0 0 0 0 0 iusefp.o + 34 0 0 0 0 72 llshl.o + 40 0 0 0 0 72 llsshr.o + 36 0 0 0 0 72 llushr.o + 2 0 0 0 0 60 printf1.o + 2310 96 0 0 0 524 printfa.o + 2 0 0 0 0 60 printfb.o + 54 0 0 0 0 72 uidiv.o + 104 0 0 0 0 96 uldiv.o + 40 0 0 0 0 68 cdrcmple.o + 28 0 0 0 0 68 cfcmple.o + 68 0 0 0 0 80 d2f.o + 360 6 0 0 0 152 dadd.o + 252 6 0 0 0 96 ddiv.o + 244 0 0 0 0 232 depilogue.o + 68 10 0 0 0 80 dfixul.o + 48 4 0 0 0 76 dflti.o + 220 6 0 0 0 100 dmul.o + 48 0 0 0 0 60 f2d.o + 132 0 0 0 0 144 fepilogue.o + + ---------------------------------------------------------------------- + 4270 144 0 0 0 2404 Library Totals + 6 0 0 0 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Name + + 2756 112 0 0 0 1248 mc_t.l + 1508 32 0 0 0 1156 mf_t.l + + ---------------------------------------------------------------------- + 4270 144 0 0 0 2404 Library Totals + + ---------------------------------------------------------------------- + +============================================================================== + + + Code (inc. data) RO Data RW Data ZI Data Debug + + 8066 484 98 52 1300 12834 Grand Totals + 8066 484 98 52 1300 12834 ELF Image Totals + 8066 484 98 52 0 0 ROM Totals + +============================================================================== + + Total RO Size (Code + RO Data) 8164 ( 7.97kB) + Total RW Size (RW Data + ZI Data) 1352 ( 1.32kB) + Total ROM Size (Code + RO Data + RW Data) 8216 ( 8.02kB) + +============================================================================== + diff --git a/ADC.plg b/ADC.plg new file mode 100644 index 0000000..e45f0c3 --- /dev/null +++ b/ADC.plg @@ -0,0 +1,102 @@ + + +
    +

    µVision Build Log

    +

    Project:

    +C:\Users\Lenovo\Documents\Keil uVision4\PetFeeder\ADC.uvproj +Project File Date: + +

    Output:

    +Rebuild target 'Target 1' +compiling Servo_MG995.c... +compiling LCD_4bit.c... +compiling IRQ.c... +compiling RTC.c... +RTC.c(12): warning: #1295-D: Deprecated declaration PWM_SetDutyCycle - give arg types +RTC.c(13): warning: #1295-D: Deprecated declaration PWM_Init - give arg types +compiling Ultrasonic_HC_SR04.c... +Ultrasonic_HC_SR04.c(95): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +Ultrasonic_HC_SR04.c(102): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +Ultrasonic_HC_SR04.c(110): warning: #1-D: last line of file ends without a newline +compiling main.c... +main.c(12): warning: #1295-D: Deprecated declaration PWM_SetDutyCycle - give arg types +main.c(13): warning: #1295-D: Deprecated declaration PWM_Init - give arg types +main.c(14): warning: #1295-D: Deprecated declaration updateRTCTimer - give arg types +main.c(15): warning: #1295-D: Deprecated declaration RTCTimerEnable - give arg types +main.c(16): warning: #1295-D: Deprecated declaration setupTimer - give arg types +main.c(17): warning: #1295-D: Deprecated declaration sendPulse - give arg types +main.c(18): warning: #1295-D: Deprecated declaration delayMS - give arg types +main.c(19): warning: #1295-D: Deprecated declaration calDistance - give arg types +main.c(54): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(63): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(79): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(31): warning: #550-D: variable "fed" was set but never used +main.c(33): warning: #177-D: variable "feeding_time_flag" was declared but never referenced +main.c(33): warning: #177-D: variable "pet_presence_flag" was declared but never referenced +assembling LPC2300.s... +linking... +Program Size: Code=8066 RO-data=98 RW-data=52 ZI-data=1300 +FromELF: creating hex file... +"ADC.axf" - 0 Error(s), 19 Warning(s). +Rebuild target 'Target 1' +compiling Servo_MG995.c... +compiling LCD_4bit.c... +compiling IRQ.c... +compiling RTC.c... +RTC.c(12): warning: #1295-D: Deprecated declaration PWM_SetDutyCycle - give arg types +RTC.c(13): warning: #1295-D: Deprecated declaration PWM_Init - give arg types +compiling Ultrasonic_HC_SR04.c... +Ultrasonic_HC_SR04.c(95): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +Ultrasonic_HC_SR04.c(102): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +Ultrasonic_HC_SR04.c(110): warning: #1-D: last line of file ends without a newline +compiling main.c... +main.c(12): warning: #1295-D: Deprecated declaration PWM_SetDutyCycle - give arg types +main.c(13): warning: #1295-D: Deprecated declaration PWM_Init - give arg types +main.c(14): warning: #1295-D: Deprecated declaration updateRTCTimer - give arg types +main.c(15): warning: #1295-D: Deprecated declaration RTCTimerEnable - give arg types +main.c(16): warning: #1295-D: Deprecated declaration setupTimer - give arg types +main.c(17): warning: #1295-D: Deprecated declaration sendPulse - give arg types +main.c(18): warning: #1295-D: Deprecated declaration delayMS - give arg types +main.c(19): warning: #1295-D: Deprecated declaration calDistance - give arg types +main.c(54): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(63): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(79): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(31): warning: #550-D: variable "fed" was set but never used +main.c(33): warning: #177-D: variable "feeding_time_flag" was declared but never referenced +main.c(33): warning: #177-D: variable "pet_presence_flag" was declared but never referenced +assembling LPC2300.s... +linking... +Program Size: Code=8066 RO-data=98 RW-data=52 ZI-data=1300 +FromELF: creating hex file... +"ADC.axf" - 0 Error(s), 19 Warning(s). +Rebuild target 'Target 1' +compiling Servo_MG995.c... +compiling LCD_4bit.c... +compiling IRQ.c... +compiling RTC.c... +RTC.c(12): warning: #1295-D: Deprecated declaration PWM_SetDutyCycle - give arg types +RTC.c(13): warning: #1295-D: Deprecated declaration PWM_Init - give arg types +compiling Ultrasonic_HC_SR04.c... +Ultrasonic_HC_SR04.c(95): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +Ultrasonic_HC_SR04.c(102): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +Ultrasonic_HC_SR04.c(110): warning: #1-D: last line of file ends without a newline +compiling main.c... +main.c(12): warning: #1295-D: Deprecated declaration PWM_SetDutyCycle - give arg types +main.c(13): warning: #1295-D: Deprecated declaration PWM_Init - give arg types +main.c(14): warning: #1295-D: Deprecated declaration updateRTCTimer - give arg types +main.c(15): warning: #1295-D: Deprecated declaration RTCTimerEnable - give arg types +main.c(16): warning: #1295-D: Deprecated declaration setupTimer - give arg types +main.c(17): warning: #1295-D: Deprecated declaration sendPulse - give arg types +main.c(18): warning: #1295-D: Deprecated declaration delayMS - give arg types +main.c(19): warning: #1295-D: Deprecated declaration calDistance - give arg types +main.c(54): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(63): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(79): warning: #167-D: argument of type "char *" is incompatible with parameter of type "const unsigned char *" +main.c(31): warning: #550-D: variable "fed" was set but never used +main.c(33): warning: #177-D: variable "feeding_time_flag" was declared but never referenced +main.c(33): warning: #177-D: variable "pet_presence_flag" was declared but never referenced +assembling LPC2300.s... +linking... +Program Size: Code=8066 RO-data=98 RW-data=52 ZI-data=1300 +FromELF: creating hex file... +"ADC.axf" - 0 Error(s), 19 Warning(s). diff --git a/ADC.sct b/ADC.sct new file mode 100644 index 0000000..1ba2f83 --- /dev/null +++ b/ADC.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x00000000 0x00080000 { ; load region size_region + ER_IROM1 0x00000000 0x00080000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x40000000 0x00008000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/ADC.tra b/ADC.tra new file mode 100644 index 0000000..64e3d41 --- /dev/null +++ b/ADC.tra @@ -0,0 +1,26 @@ +*** Creating Trace Output File 'ADC.tra' Ok. +### Preparing for ADS-LD. +### Creating ADS-LD Command Line +### List of Objects: adding '"servo_mg995.o"' +### List of Objects: adding '"lcd_4bit.o"' +### List of Objects: adding '"irq.o"' +### List of Objects: adding '"rtc.o"' +### List of Objects: adding '"ultrasonic_hc_sr04.o"' +### List of Objects: adding '"main.o"' +### List of Objects: adding '"lpc2300.o"' +### ADS-LD Command completed: +--cpu ARM7TDMI "servo_mg995.o" "lcd_4bit.o" "irq.o" "rtc.o" "ultrasonic_hc_sr04.o" "main.o" "lpc2300.o" +--library_type=microlib --strict --scatter "ADC.sct" +--summary_stderr --info summarysizes --map --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers + --list ".\ADC.map" -o ADC.axf### Preparing Environment (PrepEnvAds) +### ADS-LD Output File: 'ADC.axf' +### ADS-LD Command File: 'ADC.lnp' +### Checking for dirty Components... +### Creating CmdFile 'ADC.lnp', Handle=0x0000073C +### Writing '.lnp' file +### ADS-LD Command file 'ADC.lnp' is ready. +### ADS-LD: About to start ADS-LD Thread. +### ADS-LD: executed with 0 errors +### Updating obj list +### LDADS_file() completed. diff --git a/ADC_Opt.Bak b/ADC_Opt.Bak new file mode 100644 index 0000000..243a54c --- /dev/null +++ b/ADC_Opt.Bak @@ -0,0 +1,53 @@ +### uVision2 Project, (C) Keil Software +### Do not modify ! + + cExt (*.c) + aExt (*.s*; *.src; *.a*) + oExt (*.obj) + lExt (*.lib) + tExt (*.txt; *.h; *.inc) + pExt (*.plm) + CppX (*.cpp) + DaveTm { 0,0,0,0,0,0,0,0 } + +Target (Target 1), 0x0004 // Tools: 'ARM-ADS' +GRPOPT 1,(Source Group 1),1,0,0 +GRPOPT 2,(System Calls),1,0,0 + +OPTFFF 1,1,1,503316481,0,11,41,0,<.\Servo_MG995.c> +OPTFFF 1,2,1,268435457,0,0,0,0,<.\LCD_4bit.c> +OPTFFF 1,3,1,0,0,1,1,0,<.\RFID_PN532.c> +OPTFFF 1,4,1,301989889,0,0,0,0,<.\IRQ.c> +OPTFFF 1,5,1,318767105,0,1,70,0,<.\RTC.c> +OPTFFF 1,6,1,369098753,0,204,219,0,<.\Ultrasonic_HC_SR04.c> +OPTFFF 1,7,1,536870912,0,0,0,0,<.\main.c> +OPTFFF 2,8,2,738197504,0,0,0,0,<.\LPC2300.s> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,247,2,0,0,60,1,0,0 } + + +TARGOPT 1, (Target 1) + ADSCLK=12000000 + OPTTT 1,1,1,0 + OPTHX 1,65535,0,0,0 + OPTLX 79,66,8,<.\> + OPTOX 16 + OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 + OPTXL 1,1,1,1,1,1,1,0,0 + OPTFL 1,0,1 + OPTAX 8 + OPTBL 0,(Data Sheet) + OPTBL 1,(User Manual) + OPTDL (SARM.DLL)(-cLPC237x)(DARMP.DLL)(-pLPC2378)(SARM.DLL)()(TARMP.DLL)(-pLPC2378) + OPTDBG 180222,0,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() + OPTKEY 0,(DLGDARM)((135=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(145=-1,-1,-1,-1,0)(147=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(152=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)(155=-1,-1,-1,-1,0)(177=-1,-1,-1,-1,0)(134=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(156=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(163=-1,-1,-1,-1,0)(164=-1,-1,-1,-1,0)(176=-1,-1,-1,-1,0)(178=-1,-1,-1,-1,0)(113=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)(169=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(137=-1,-1,-1,-1,0)(138=-1,-1,-1,-1,0)(171=-1,-1,-1,-1,0)(117=-1,-1,-1,-1,0)(172=-1,-1,-1,-1,0)(173=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(165=-1,-1,-1,-1,0)(166=-1,-1,-1,-1,0)(168=-1,-1,-1,-1,0)(141=191,61,623,629,0)(144=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(115=-1,-1,-1,-1,0)(116=-1,-1,-1,-1,0)) + OPTKEY 0,(DLGTARM)((135=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(145=-1,-1,-1,-1,0)(147=-1,-1,-1,-1,0)(150=83,115,386,293,0)(152=90,124,444,426,0)(151=98,132,350,574,0)(155=-1,-1,-1,-1,0)(177=-1,-1,-1,-1,0)(134=75,107,270,293,0)(80=-1,-1,-1,-1,0)(156=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(163=-1,-1,-1,-1,0)(164=-1,-1,-1,-1,0)(176=-1,-1,-1,-1,0)(178=-1,-1,-1,-1,0)(113=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)(169=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(137=-1,-1,-1,-1,0)(138=-1,-1,-1,-1,0)(171=-1,-1,-1,-1,0)(117=-1,-1,-1,-1,0)(172=-1,-1,-1,-1,0)(173=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(165=-1,-1,-1,-1,0)(166=-1,-1,-1,-1,0)(168=-1,-1,-1,-1,0)(141=-1,-1,-1,-1,0)(144=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(121=-1,-1,-1,-1,0)(122=-1,-1,-1,-1,0)(115=-1,-1,-1,-1,0)(116=-1,-1,-1,-1,0)) + OPTKEY 0,(ARMDBGFLAGS)(-T5F) + OPTKEY 0,(UL2ARM)(-UV0812UAE -O39 -S2 -C0 -N00("ARM7TDMI-S Core") -D00(4F1F0F0F) -L00(4) -FO15 -FD40000000 -FC800 -FN1 -FF0LPC_IAP2_512 -FS00 -FL07D000) + OPTWA 0,1,(AD_last,0x10) + OPTWA 0,2,(A_value,0x0A) + OPTMM 1,262,(0xE0034010) + OPTDF 0x1000086 + OPTLE <> + OPTLC <> + OPTLA 0,(((PORT1 & 0x00040000) >> 18 & 0x40000) >> 18)(FF00000000000000000000000000E0FFFFFFEF410100000000000000000000000000000028504F5254312026203078303030343030303029203E3E2031380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F120000000000000000000000000000000000000010030000) +EndOpt + diff --git a/ADC_Target 1.dep b/ADC_Target 1.dep new file mode 100644 index 0000000..76cc3d0 --- /dev/null +++ b/ADC_Target 1.dep @@ -0,0 +1,24 @@ +Dependencies for Project 'ADC', Target 'Target 1': (DO NOT MODIFY !) +F (.\Servo_MG995.c)(0x675BD0B4)(-c --cpu ARM7TDMI -D__EVAL -D__MICROLIB -g -O0 --apcs=interwork -I C:\Universidad\Keil\ARM\RV31\INC -I C:\Universidad\Keil\ARM\CMSIS\Include -I C:\Universidad\Keil\ARM\Inc\Philips -o "servo_mg995.o" --omf_browse "servo_mg995.crf" --depend "servo_mg995.d") +I (C:\Universidad\Keil\ARM\Inc\Philips\LPC23xx.h)(0x5086BE16) +I (C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdio.h)(0x516EA50E) +I (C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdlib.h)(0x516EA50E) +I (LCD.h)(0x66E532C3) +F (.\LCD_4bit.c)(0x6736D45A)(-c --cpu ARM7TDMI -D__EVAL -D__MICROLIB -g -O0 --apcs=interwork -I C:\Universidad\Keil\ARM\RV31\INC -I C:\Universidad\Keil\ARM\CMSIS\Include -I C:\Universidad\Keil\ARM\Inc\Philips -o "lcd_4bit.o" --omf_browse "lcd_4bit.crf" --depend "lcd_4bit.d") +I (C:\Universidad\Keil\ARM\Inc\Philips\LPC23xx.H)(0x5086BE16) +I (C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdlib.h)(0x516EA50E) +F (.\IRQ.c)(0x673716E8)(-c --cpu ARM7TDMI -D__EVAL -D__MICROLIB -g -O0 --apcs=interwork -I C:\Universidad\Keil\ARM\RV31\INC -I C:\Universidad\Keil\ARM\CMSIS\Include -I C:\Universidad\Keil\ARM\Inc\Philips -o "irq.o" --omf_browse "irq.crf" --depend "irq.d") +I (C:\Universidad\Keil\ARM\Inc\Philips\LPC23xx.H)(0x5086BE16) +F (.\RTC.c)(0x675BD0C4)(-c --cpu ARM7TDMI -D__EVAL -D__MICROLIB -g -O0 --apcs=interwork -I C:\Universidad\Keil\ARM\RV31\INC -I C:\Universidad\Keil\ARM\CMSIS\Include -I C:\Universidad\Keil\ARM\Inc\Philips -o "rtc.o" --omf_browse "rtc.crf" --depend "rtc.d") +I (C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdio.h)(0x516EA50E) +I (C:\Universidad\Keil\ARM\Inc\Philips\LPC23xx.H)(0x5086BE16) +I (LCD.h)(0x66E532C3) +F (.\Ultrasonic_HC_SR04.c)(0x675BD110)(-c --cpu ARM7TDMI -D__EVAL -D__MICROLIB -g -O0 --apcs=interwork -I C:\Universidad\Keil\ARM\RV31\INC -I C:\Universidad\Keil\ARM\CMSIS\Include -I C:\Universidad\Keil\ARM\Inc\Philips -o "ultrasonic_hc_sr04.o" --omf_browse "ultrasonic_hc_sr04.crf" --depend "ultrasonic_hc_sr04.d") +I (C:\Universidad\Keil\ARM\Inc\Philips\LPC23XX.H)(0x5086BE16) +I (C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdio.h)(0x516EA50E) +I (LCD.h)(0x66E532C3) +F (.\main.c)(0x675BD147)(-c --cpu ARM7TDMI -D__EVAL -D__MICROLIB -g -O0 --apcs=interwork -I C:\Universidad\Keil\ARM\RV31\INC -I C:\Universidad\Keil\ARM\CMSIS\Include -I C:\Universidad\Keil\ARM\Inc\Philips -o "main.o" --omf_browse "main.crf" --depend "main.d") +I (C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdio.h)(0x516EA50E) +I (C:\Universidad\Keil\ARM\Inc\Philips\LPC23xx.H)(0x5086BE16) +I (LCD.h)(0x66E532C3) +F (.\LPC2300.s)(0x66E532C3)(--cpu ARM7TDMI --pd "__EVAL SETA 1" -g --apcs=interwork --pd "__MICROLIB SETA 1" -I C:\Universidad\Keil\ARM\RV31\INC -I C:\Universidad\Keil\ARM\CMSIS\Include -I C:\Universidad\Keil\ARM\Inc\Philips --list "LPC2300.lst" --xref -o "LPC2300.o" --depend "LPC2300.d") diff --git a/ADC_Uv2.Bak b/ADC_Uv2.Bak new file mode 100644 index 0000000..0768a65 --- /dev/null +++ b/ADC_Uv2.Bak @@ -0,0 +1,108 @@ +### uVision2 Project, (C) Keil Software +### Do not modify ! + +Target (Target 1), 0x0004 // Tools: 'ARM-ADS' + +Group (Source Group 1) +Group (System Calls) + +File 1,1,<.\Servo_MG995.c> +File 1,1,<.\LCD_4bit.c> +File 1,1,<.\RFID_PN532.c> +File 1,1,<.\IRQ.c> +File 1,1,<.\RTC.c> +File 1,1,<.\Ultrasonic_HC_SR04.c> +File 1,1,<.\main.c> +File 2,2,<.\LPC2300.s> + + +Options 1,0,0 // Target 'Target 1' + Device (LPC2378) + Vendor (NXP (founded by Philips)) + Cpu (IRAM(0x40000000-0x40007FFF) IRAM2(0x7FE00000-0x7FE03FFF) IROM(0-0x7FFFF) CLOCK(12000000) CPUTYPE(ARM7TDMI)) + FlashUt (LPC210x_ISP.EXE ("#H" ^X $D COM1: 38400 1)) + StupF ("STARTUP\Philips\LPC2300.s" ("Philips LPC2300 Startup Code")) + FlashDR (UL2ARM(-U268761108 -O7 -S0 -C0 -FO15 -FD40000000 -FC800 -FN1 -FF0LPC_IAP2_512 -FS00 -FL07D000)) + DevID (4153) + Rgf (LPC23xx.H) + Mem () + C () + A () + RL () + OH () + DBC_IFX () + DBC_CMS () + DBC_AMS () + DBC_LMS () + UseEnv=0 + EnvBin () + EnvInc () + EnvLib () + EnvReg (˙Philips\) + OrgReg (˙Philips\) + TgStat=16 + OutDir (.\) + OutName (ADC) + GenApp=1 + GenLib=0 + GenHex=1 + Debug=1 + Browse=1 + LstDir (.\) + HexSel=1 + MG32K=0 + TGMORE=0 + RunUsr 0 0 <> + RunUsr 1 0 <> + BrunUsr 0 0 <> + BrunUsr 1 0 <> + CrunUsr 0 0 <> + CrunUsr 1 0 <> + SVCSID <> + GLFLAGS=1790 + ADSFLGA { 243,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ACPUTYP (ARM7TDMI) + RVDEV () + ADSTFLGA { 0,12,16,18,99,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0 } + OCMADSOCM { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + OCMADSIRAM { 0,0,0,0,64,0,128,0,0 } + OCMADSIROM { 1,0,0,0,0,0,0,8,0 } + OCMADSXRAM { 0,0,0,0,0,0,0,0,0 } + OCR_RVCT { 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,128,0,0,0,0,0,224,127,0,64,0,0 } + RV_STAVEC () + ADSCCFLG { 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSCMISC () + ADSCDEFN () + ADSCUDEF () + ADSCINCD () + ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSAMISC () + ADSADEFN () + ADSAUDEF () + ADSAINCD () + PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + IncBld=1 + AlwaysBuild=0 + GenAsm=0 + AsmAsm=0 + PublicsOnly=0 + StopCode=3 + CustArgs () + LibMods () + ADSLDFG { 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } + ADSLDTA (0x00000000) + ADSLDDA (0x40000000) + ADSLDSC () + ADSLDIB () + ADSLDIC () + ADSLDMC () + ADSLDIF () + ADSLDDW () + OPTDL (SARM.DLL)(-cLPC237x)(DARMP.DLL)(-pLPC2378)(SARM.DLL)()(TARMP.DLL)(-pLPC2378) + OPTDBG 180222,0,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() + FLASH1 { 9,0,0,0,1,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0 } + FLASH2 (BIN\UL2ARM.DLL) + FLASH3 ("LPC210x_ISP.EXE" ("#H" ^X $D COM1: 38400 1)) + FLASH4 () +EndOpt + diff --git a/Abstract.txt b/Abstract.txt new file mode 100644 index 0000000..b838182 --- /dev/null +++ b/Abstract.txt @@ -0,0 +1,27 @@ +The Blinky project is a simple program for the LPC2378 +using Keil 'MCB2300' Evaluation Board and demonstrating +interrupt functionality. + +Example functionality: + - Clock Settings: + - XTAL = 12 MHz + - PLL = 288 MHz + - processor clock = 48 MHz + - USB clock = 48 MHz + - peripheral clock = 12 MHz + - UART1 settings + (baudrate = 9600, 8 data bits, 1 stop bits, no parity) + - Timer0 timer is activating clock_1s every 1 second, + starting AD conversion (every 1 ms) and displaying + bargraph on 8 LEDs, it works in interrupt mode + - AD conversion is done in interrupt mode + - AD value is sent every 1 second on UART1 + - text is displayed to textual LCD + - bargraph is displayed to textual LCD, according to + potentiometer position + - 8 LEDs state represent the potentiometer position + +The Blinky program is available in different targets: + Simulator: configured for software Simulator + MCB2300 Flash: runs from Internal Flash located on chip + (used for production or target debugging) diff --git a/Blinky.Opt b/Blinky.Opt new file mode 100644 index 0000000..49f5229 --- /dev/null +++ b/Blinky.Opt @@ -0,0 +1,72 @@ +### uVision2 Project, (C) Keil Software +### Do not modify ! + + cExt (*.c) + aExt (*.s*; *.src; *.a*) + oExt (*.obj) + lExt (*.lib) + tExt (*.txt; *.h; *.inc) + pExt (*.plm) + CppX (*.cpp) + DaveTm { 0,0,0,0,0,0,0,0 } + +Target (Simulator), 0x0004 // Tools: 'ARM-ADS' +Target (LPC2378 Flash), 0x0004 // Tools: 'ARM-ADS' +GRPOPT 1,(Startup Code),1,0,0 +GRPOPT 2,(Source Code),1,0,0 +GRPOPT 3,(Documentation),1,0,0 + +OPTFFF 1,1,2,0,0,0,0,0,<.\LPC2300.s> +OPTFFF 2,2,1,0,0,0,0,0,<.\Blinky.c> { 44,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,170,1,0,0,255,255,255,255,255,255,255,255,44,0,0,0,58,0,0,0,248,3,0,0,114,1,0,0 } +OPTFFF 2,3,1,0,0,0,0,0,<.\LCD_4bit.c> { 44,0,0,0,0,0,0,0,2,0,0,0,160,0,0,0,170,1,0,0,255,255,255,255,255,255,255,255,22,0,0,0,29,0,0,0,226,3,0,0,85,1,0,0 } +OPTFFF 2,4,1,0,0,0,0,0,<.\IRQ.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,204,3,0,0,56,1,0,0 } +OPTFFF 3,5,5,16777216,0,0,0,0,<.\Abstract.txt> + + +TARGOPT 1, (Simulator) + ADSCLK=12000000 + OPTTT 1,1,1,0 + OPTHX 1,65535,0,0,0 + OPTLX 79,66,8,<.\Flash\> + OPTOX 16 + OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 + OPTXL 1,1,1,1,1,1,1,0,0 + OPTFL 1,0,0 + OPTAX 8 + OPTBL 0,(Data Sheet) + OPTBL 1,(User Manual) + OPTDL (SARM.DLL)(-cLPC237x)(DARMP.DLL)(-pLPC2378)(SARM.DLL)()(TARMP.DLL)(-pLPC2378) + OPTDBG 45053,0,()()()()(.\Sim.ini)()()()()() (BIN\UL2ARM.DLL)()()() + OPTKEY 0,(ARMDBGFLAGS)(-T5F) + OPTKEY 0,(DLGDARM)((135=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(145=-1,-1,-1,-1,0)(147=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(152=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)(155=-1,-1,-1,-1,0)(134=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(156=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=2404,663,2992,861,0)(163=-1,-1,-1,-1,0)(164=-1,-1,-1,-1,0)(113=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)(137=-1,-1,-1,-1,0)(138=-1,-1,-1,-1,0)(117=-1,-1,-1,-1,0)(146=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(165=-1,-1,-1,-1,0)(166=-1,-1,-1,-1,0)(114=-1,-1,-1,-1,0)(141=-1,-1,-1,-1,0)(142=-1,-1,-1,-1,0)(143=-1,-1,-1,-1,0)(144=-1,-1,-1,-1,0)(116=-1,-1,-1,-1,0)) + OPTKEY 0,(DLGTARM)((107=-1,-1,-1,-1,0)(108=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(103=-1,-1,-1,-1,0)(113=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)(117=-1,-1,-1,-1,0)(118=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(114=-1,-1,-1,-1,0)(115=-1,-1,-1,-1,0)(116=-1,-1,-1,-1,0)) + OPTKEY 0,(UL2ARM)(-U268761108 -O7 -S0 -C0 -FO15 -FD40000000 -FC800 -FN0) + OPTBT 0,(Analog Input)(analog0(3.3)) + OPTDF 0xA2 + OPTLE <> + OPTLC <> +EndOpt + +TARGOPT 2, (LPC2378 Flash) + ADSCLK=12000000 + OPTTT 1,1,1,0 + OPTHX 1,65535,0,0,0 + OPTLX 79,66,8,<.\Flash\> + OPTOX 16 + OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 + OPTXL 1,1,1,1,1,1,1,0,0 + OPTFL 1,0,1 + OPTAX 8 + OPTBL 0,(Data Sheet) + OPTBL 1,(User Manual) + OPTDL (SARM.DLL)(-cLPC237x)(DARMP.DLL)(-pLPC2378)(SARM.DLL)()(TARMP.DLL)(-pLPC2378) + OPTDBG 49150,16,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() + OPTKEY 0,(DLGTARM)((134=-1,-1,-1,-1,0)(135=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(108=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(113=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)(136=-1,-1,-1,-1,0)(117=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(114=-1,-1,-1,-1,0)(115=-1,-1,-1,-1,0)(116=-1,-1,-1,-1,0)) + OPTKEY 0,(ARMDBGFLAGS)() + OPTKEY 0,(UL2ARM)(-UV1234567 -O7 -S2 -C0 -N00("ARM7TDMI-S Core") -D00(4F1F0F0F) -L00(4) -FO15 -FD40000000 -FC800 -FN1 -FF0LPC_IAP2_512 -FS00 -FL07D000) + OPTWA 0,1,(AD_last) + OPTDF 0x82 + OPTLE <> + OPTLC <> +EndOpt + diff --git a/ExtDll.iex b/ExtDll.iex new file mode 100644 index 0000000..b661f48 --- /dev/null +++ b/ExtDll.iex @@ -0,0 +1,2 @@ +[EXTDLL] +Count=0 diff --git a/IRQ.c b/IRQ.c new file mode 100644 index 0000000..9509620 --- /dev/null +++ b/IRQ.c @@ -0,0 +1,22 @@ +#include /* LPC23xx definitions */ + +extern unsigned char clock_1s; /* Flag activated each second */ + +//int x; +//int flag = 0; +/* Timer0 IRQ: Executed periodically */ +__irq void T0_IRQHandler (void) { + static int clk_cntr; + + + clk_cntr++; + if (clk_cntr >= 1000) { + clk_cntr = 0; + clock_1s = 1; /* Activate flag every 1 second */ + } + + T0IR = 1; /* Clear interrupt flag */ + VICVectAddr = 0; /* Acknowledge Interrupt */ +} + + diff --git a/LCD.h b/LCD.h new file mode 100644 index 0000000..2fae44c --- /dev/null +++ b/LCD.h @@ -0,0 +1,19 @@ +/******************************************************************************/ +/* LCD.h Text LCD function prototypes */ +/******************************************************************************/ +/* This file is part of the uVision/ARM development tools. */ +/* Copyright (c) 2005-2006 Keil Software. All rights reserved. */ +/* This software may only be used under the terms of a valid, current, */ +/* end user licence from KEIL for a compatible version of KEIL software */ +/* development tools. Nothing else gives you the right to use this software. */ +/******************************************************************************/ + + +extern void lcd_init (void); +extern void lcd_clear (void); +extern void lcd_putchar (char c); +extern void set_cursor (unsigned char column, unsigned char line); +extern void lcd_print (unsigned char const *string); +//extern void lcd_string (char data[34]); +/******************************************************************************/ + diff --git a/LCD_4bit.c b/LCD_4bit.c new file mode 100644 index 0000000..ac547ba --- /dev/null +++ b/LCD_4bit.c @@ -0,0 +1,308 @@ +/******************************************************************************/ +/* LCD.c: Functions for 2 line 16 character Text LCD, with 4-bit interface */ +/******************************************************************************/ +/* This file is part of the uVision/ARM development tools. */ +/* Copyright (c) 2005-2006 Keil Software. All rights reserved. */ +/* This software may only be used under the terms of a valid, current, */ +/* end user licence from KEIL for a compatible version of KEIL software */ +/* development tools. Nothing else gives you the right to use this software. */ +/******************************************************************************/ + +#include +#include /* LPC23xx definitions */ + + +/*********************** Hardware specific configuration **********************/ + +/*------------------------- Speed dependant settings -------------------------*/ + +/* If processor works on high frequency delay has to be increased, it can be + increased by factor 2^N by this constant */ +#define DELAY_2N 0 + +/*------------------------- Text LCD size definitions ------------------------*/ + +#define LineLen 16 /* Width (in characters) */ +#define NumLines 2 /* Hight (in lines) */ + +/*-------------------- LCD interface hardware definitions --------------------*/ + +/* PINS: + - DB4 = P1.24 + - DB5 = P1.25 + - DB6 = P1.26 + - DB7 = P1.27 + - E = P1.31 (for V1 P1.30) + - RW = P1.29 + - RS = P1.28 */ + + +#define MCB2300_V1 /* First version of MCB2300 */ + +#define PIN_E 0x80000000 +#define PIN_RW 0x20000000 +#define PIN_RS 0x10000000 +#define PINS_CTRL 0xB0000000 +#define PINS_DATA 0x0F000000 + +#ifdef MCB2300_V1 + #undef PIN_E + #define PIN_E 0xC0000000 + #undef PINS_CTRL + #define PINS_CTRL 0xF0000000 +#endif + +/* pin E setting to 0 or 1 */ +#define LCD_E(x) ((x) ? (IOSET1 = PIN_E) : (IOCLR1 = PIN_E) ); + +/* pin RW setting to 0 or 1 */ +#define LCD_RW(x) ((x) ? (IOSET1 = PIN_RW) : (IOCLR1 = PIN_RW)); + +/* pin RS setting to 0 or 1 */ +#define LCD_RS(x) ((x) ? (IOSET1 = PIN_RS) : (IOCLR1 = PIN_RS)); + +/* Reading DATA pins */ +#define LCD_DATA_IN ((IOPIN1 >> 24) & 0xF) + +/* Writing value to DATA pins */ +#define LCD_DATA_OUT(x) IOCLR1 = PINS_DATA; IOSET1 = (x & 0xF) << 24; + +/* Setting all pins to output mode */ +#define LCD_ALL_DIR_OUT IODIR1 |= PINS_CTRL | PINS_DATA; + +/* Setting DATA pins to input mode */ +#define LCD_DATA_DIR_IN IODIR1 &= ~PINS_DATA; + +/* Setting DATA pins to output mode */ +#define LCD_DATA_DIR_OUT IODIR1 |= PINS_DATA; + +/******************************************************************************/ + + +/* 8 user defined characters to be loaded into CGRAM (used for bargraph) */ +const unsigned char UserFont[8][8] = { + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10 }, + { 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18 }, + { 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C }, + { 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E }, + { 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } +}; + + +/************************ Global function definitions *************************/ + + +/******************************************************************************* +* Delay in while loop cycles * +* Parameter: cnt: number of while cycles to delay * +* Return: * +*******************************************************************************/ + +static void delay (int cnt) +{ + cnt <<= DELAY_2N; + + while (cnt--); +} + + +/******************************************************************************* +* Read status of LCD controller * +* Parameter: none * +* Return: Status byte contains busy flag and address pointer * +*******************************************************************************/ + +static unsigned char lcd_read_status (void) +{ + unsigned char status; + + LCD_DATA_DIR_IN + LCD_RS(0) + LCD_RW(1) + delay(10); + LCD_E(1) + delay(10); + status = LCD_DATA_IN << 4; + LCD_E(0) + delay(10); + LCD_E(1) + delay(10); + status |= LCD_DATA_IN; + LCD_E(0) + LCD_DATA_DIR_OUT + return (status); +} + + +/******************************************************************************* +* Wait until LCD controller busy flag is 0 * +* Parameter: * +* Return: Status byte of LCD controller (busy + address) * +*******************************************************************************/ + +static unsigned char wait_while_busy (void) +{ + unsigned char status; + + do { + status = lcd_read_status(); + } while (status & 0x80); /* Wait for busy flag */ + + return (status); +} + + +/******************************************************************************* +* Write 4-bits to LCD controller * +* Parameter: c: command to be written * +* Return: * +*******************************************************************************/ + +void lcd_write_4bit (unsigned char c) +{ + LCD_RW(0) + LCD_E(1) + LCD_DATA_OUT(c&0x0F) + delay(10); + LCD_E(0) + delay(10); +} + + +/******************************************************************************* +* Write command to LCD controller * +* Parameter: c: command to be written * +* Return: * +*******************************************************************************/ + +void lcd_write_cmd (unsigned char c) +{ + wait_while_busy(); + + LCD_RS(0) + lcd_write_4bit (c>>4); + lcd_write_4bit (c); +} + + +/******************************************************************************* +* Write data to LCD controller * +* Parameter: c: data to be written * +* Return: * +*******************************************************************************/ + +static void lcd_write_data (unsigned char c) +{ + wait_while_busy(); + + LCD_RS(1) + lcd_write_4bit (c>>4); + lcd_write_4bit (c); +} + + +/******************************************************************************* +* Print Character to current cursor position * +* Parameter: c: character to be printed * +* Return: * +*******************************************************************************/ + +void lcd_putchar (char c) +{ + lcd_write_data (c); +} + + +/******************************************************************************* +* Initialize the LCD controller * +* Parameter: * +* Return: * +*******************************************************************************/ + +void lcd_init (void) +{ + int i; + unsigned char const *p; + + /* Set all pins for LCD as outputs */ + LCD_ALL_DIR_OUT + + delay (15000); + LCD_RS(0) + lcd_write_4bit (0x3); /* Select 4-bit interface */ + delay (4100); + lcd_write_4bit (0x3); + delay (100); + lcd_write_4bit (0x3); + lcd_write_4bit (0x2); + + lcd_write_cmd (0x28); /* 2 lines, 5x8 character matrix */ + lcd_write_cmd (0x0C); /* Display ctrl:Disp=ON,Curs/Blnk=OFF */ + lcd_write_cmd (0x06); /* Entry mode: Move right, no shift */ + + /* Load user-specific characters into CGRAM */ + lcd_write_cmd(0x40); /* Set CGRAM address counter to 0 */ + p = &UserFont[0][0]; + for (i = 0; i < sizeof(UserFont); i++, p++) + lcd_putchar (*p); + + lcd_write_cmd(0x80); /* Set DDRAM address counter to 0 */ +} + + + +/******************************************************************************* +* Set cursor position on LCD display * +* Parameter: column: column position * +* line: line position * +* Return: * +*******************************************************************************/ + +void set_cursor (unsigned char column, unsigned char line) +{ + unsigned char address; + + address = (line * 40) + column; + address = 0x80 + (address & 0x7F); + lcd_write_cmd(address); /* Set DDRAM address counter to 0 */ +} + +/******************************************************************************* +* Clear the LCD display * +* Parameter: * +* Return: * +*******************************************************************************/ + +void lcd_clear (void) +{ + lcd_write_cmd(0x01); /* Display clear */ + set_cursor (0, 0); +} + + +/******************************************************************************* +* Print sting to LCD display * +* Parameter: string: pointer to output string * +* Return: * +*******************************************************************************/ + +void lcd_print (char *string) +{ + while (*string) { + lcd_putchar (*string++); + } +} + +/******************************************************************************/ + +/*void lcd_string (char data[34]) +{ + int i =0; + while (data[i]) { + lcd_putchar (data[i]); + i++; + } +}*/ diff --git a/LPC2300.d b/LPC2300.d new file mode 100644 index 0000000..918d88f --- /dev/null +++ b/LPC2300.d @@ -0,0 +1 @@ +LPC2300.o: LPC2300.s diff --git a/LPC2300.lst b/LPC2300.lst new file mode 100644 index 0000000..195daad --- /dev/null +++ b/LPC2300.lst @@ -0,0 +1,2805 @@ + + + +ARM Macro Assembler Page 1 + + + 1 00000000 ;/****************************************************** + ***********************/ + 2 00000000 ;/* LPC2300.S: Startup file for Philips LPC2300 device s + eries */ + 3 00000000 ;/****************************************************** + ***********************/ + 4 00000000 ;/* <<< Use Configuration Wizard in Context Menu >>> + */ + 5 00000000 ;/****************************************************** + ***********************/ + 6 00000000 ;/* This file is part of the uVision/ARM development too + ls. */ + 7 00000000 ;/* Copyright (c) 2007 Keil - An ARM Company. All rights + reserved. */ + 8 00000000 ;/* This software may only be used under the terms of a + valid, current, */ + 9 00000000 ;/* end user licence from KEIL for a compatible version + of KEIL software */ + 10 00000000 ;/* development tools. Nothing else gives you the right + to use this software. */ + 11 00000000 ;/****************************************************** + ***********************/ + 12 00000000 + 13 00000000 + 14 00000000 ;/* + 15 00000000 ; * The LPC2300.S code is executed after CPU Reset. Thi + s file may be + 16 00000000 ; * translated with the following SET symbols. In uVisi + on these SET + 17 00000000 ; * symbols are entered under Options - ASM - Define. + 18 00000000 ; * + 19 00000000 ; * NO_CLOCK_SETUP: when set the startup code will not + initialize Clock + 20 00000000 ; * (used mostly when clock is already initialized from + script .ini + 21 00000000 ; * file). + 22 00000000 ; * + 23 00000000 ; * NO_EMC_SETUP: when set the startup code will not in + itializes External + 24 00000000 ; * Memory Controller (used mostly when external memory + is already initialized + 25 00000000 ; * and loaded from script .ini file). + 26 00000000 ; * + 27 00000000 ; * RAM_INTVEC: when set the startup code copies except + ion vectors + 28 00000000 ; * from on-chip Flash to on-chip RAM. + 29 00000000 ; * + 30 00000000 ; * REMAP: when set the startup code initializes the re + gister MEMMAP + 31 00000000 ; * which overwrites the settings of the CPU configurat + ion pins. The + 32 00000000 ; * startup and interrupt vectors are remapped from: + 33 00000000 ; * 0x00000000 default setting (not remapped) + 34 00000000 ; * 0x40000000 when RAM_MODE is used + 35 00000000 ; * 0x80000000 when EXTMEM_MODE is used + 36 00000000 ; * + 37 00000000 ; * EXTMEM_MODE: when set the device is configured for + code execution + 38 00000000 ; * from external memory starting at address 0x80000000 + + + +ARM Macro Assembler Page 2 + + + . + 39 00000000 ; * + 40 00000000 ; * RAM_MODE: when set the device is configured for cod + e execution + 41 00000000 ; * from on-chip RAM starting at address 0x40000000. + 42 00000000 ; */ + 43 00000000 + 44 00000000 + 45 00000000 ; Standard definitions of Mode bits and Interrupt (I & F + ) flags in PSRs + 46 00000000 + 47 00000000 00000010 + Mode_USR + EQU 0x10 + 48 00000000 00000011 + Mode_FIQ + EQU 0x11 + 49 00000000 00000012 + Mode_IRQ + EQU 0x12 + 50 00000000 00000013 + Mode_SVC + EQU 0x13 + 51 00000000 00000017 + Mode_ABT + EQU 0x17 + 52 00000000 0000001B + Mode_UND + EQU 0x1B + 53 00000000 0000001F + Mode_SYS + EQU 0x1F + 54 00000000 + 55 00000000 00000080 + I_Bit EQU 0x80 ; when I bit is set + , IRQ is disabled + 56 00000000 00000040 + F_Bit EQU 0x40 ; when F bit is set + , FIQ is disabled + 57 00000000 + 58 00000000 + 59 00000000 ;----------------------- Memory Definitions ------------ + ------------------------ + 60 00000000 + 61 00000000 ; Internal Memory Base Addresses + 62 00000000 00000000 + FLASH_BASE + EQU 0x00000000 + 63 00000000 40000000 + RAM_BASE + EQU 0x40000000 + 64 00000000 80000000 + EXTMEM_BASE + EQU 0x80000000 + 65 00000000 + 66 00000000 ; External Memory Base Addresses + 67 00000000 80000000 + STA_MEM0_BASE + EQU 0x80000000 + + + +ARM Macro Assembler Page 3 + + + 68 00000000 81000000 + STA_MEM1_BASE + EQU 0x81000000 + 69 00000000 + 70 00000000 + 71 00000000 ;----------------------- Stack and Heap Definitions ---- + ------------------------ + 72 00000000 + 73 00000000 ;// Stack Configuration (Stack Sizes in Bytes) + 74 00000000 ;// Undefined Mode <0x0-0xFFFFFFFF:8> + 75 00000000 ;// Supervisor Mode <0x0-0xFFFFFFFF:8> + 76 00000000 ;// Abort Mode <0x0-0xFFFFFFFF:8> + 77 00000000 ;// Fast Interrupt Mode <0x0-0xFFFFFFFF:8> + 78 00000000 ;// Interrupt Mode <0x0-0xFFFFFFFF:8> + 79 00000000 ;// User/System Mode <0x0-0xFFFFFFFF:8> + 80 00000000 ;// + 81 00000000 + 82 00000000 00000000 + UND_Stack_Size + EQU 0x00000000 + 83 00000000 00000008 + SVC_Stack_Size + EQU 0x00000008 + 84 00000000 00000000 + ABT_Stack_Size + EQU 0x00000000 + 85 00000000 00000000 + FIQ_Stack_Size + EQU 0x00000000 + 86 00000000 00000100 + IRQ_Stack_Size + EQU 0x00000100 + 87 00000000 00000400 + USR_Stack_Size + EQU 0x00000400 + 88 00000000 + 90 00000000 00000108 + ISR_Stack_Size + EQU (UND_Stack_Size + SVC_Stack_Siz +e + ABT_Stack_Size +  FIQ_Stack_Size + IRQ_Stack_Size +) + 91 00000000 + 92 00000000 AREA STACK, NOINIT, READWRITE, ALIGN +=3 + 93 00000000 + 94 00000000 Stack_Mem + SPACE USR_Stack_Size + 95 00000400 __initial_sp + SPACE ISR_Stack_Size + 96 00000508 + 97 00000508 Stack_Top + 98 00000508 + 99 00000508 + 100 00000508 ;// Heap Configuration + 101 00000508 ;// Heap Size (in Bytes) <0x0-0xFFFFFFFF> + 102 00000508 ;// + 103 00000508 + 104 00000508 00000000 + Heap_Size + + + +ARM Macro Assembler Page 4 + + + EQU 0x00000000 + 105 00000508 + 106 00000508 AREA HEAP, NOINIT, READWRITE, ALIGN= +3 + 107 00000000 __heap_base + 108 00000000 Heap_Mem + SPACE Heap_Size + 109 00000000 __heap_limit + 110 00000000 + 111 00000000 + 112 00000000 ;----------------------- System Control Block (SCB) Modu + le Definitions --------- + 113 00000000 + 114 00000000 E01FC000 + SCB_BASE + EQU 0xE01FC000 ; SCB Base Address + 115 00000000 00000080 + PLLCON_OFS + EQU 0x80 ; PLL Control Offse + t + 116 00000000 00000084 + PLLCFG_OFS + EQU 0x84 ; PLL Configuration + Offset + 117 00000000 00000088 + PLLSTAT_OFS + EQU 0x88 ; PLL Status Offset + + 118 00000000 0000008C + PLLFEED_OFS + EQU 0x8C ; PLL Feed Offset + 119 00000000 00000104 + CCLKCFG_OFS + EQU 0x104 ; CPU Clock Divider + Reg Offset + 120 00000000 00000108 + USBCLKCFG_OFS + EQU 0x108 ; USB Clock Divider + Reg Offset + 121 00000000 0000010C + CLKSRCSEL_OFS + EQU 0x10C ; Clock Source Sele + ct Reg Offset + 122 00000000 000001A0 + SCS_OFS EQU 0x1A0 ; System Control an + d Status Reg Offset + + 123 00000000 000001A8 + PCLKSEL0_OFS + EQU 0x1A8 ; Peripheral Clock + Select Reg 0 Offset + + 124 00000000 000001AC + PCLKSEL1_OFS + EQU 0x1AC ; Peripheral Clock + Select Reg 1 Offset + + 125 00000000 + 126 00000000 000000C0 + + + +ARM Macro Assembler Page 5 + + + PCON_OFS + EQU 0x0C0 ; Power Mode Contro + l Reg Offset + 127 00000000 000000C4 + PCONP_OFS + EQU 0x0C4 ; Power Control for + Periphs Reg Offset + + 128 00000000 + 129 00000000 ; Constants + 130 00000000 00000010 + OSCRANGE + EQU (1<<4) ; Oscillator Range + Select + 131 00000000 00000020 + OSCEN EQU (1<<5) ; Main oscillator E + nable + 132 00000000 00000040 + OSCSTAT EQU (1<<6) ; Main Oscillator S + tatus + 133 00000000 00000001 + PLLCON_PLLE + EQU (1<<0) ; PLL Enable + 134 00000000 00000002 + PLLCON_PLLC + EQU (1<<1) ; PLL Connect + 135 00000000 00007FFF + PLLSTAT_M + EQU (0x7FFF<<0) ; PLL M Value + 136 00000000 00FF0000 + PLLSTAT_N + EQU (0xFF<<16) ; PLL N Value + 137 00000000 04000000 + PLLSTAT_PLOCK + EQU (1<<26) ; PLL Lock Status + 138 00000000 + 139 00000000 ;// Clock Setup + 140 00000000 ;// System Controls and Status Register (SCS) + 141 00000000 ;// OSCRANGE: Main Oscillator Range Select + + 142 00000000 ;// <0=> 1 MHz to 20 MHz + 143 00000000 ;// <1=> 15 MHz to 24 MHz + 144 00000000 ;// OSCEN: Main Oscillator Enable + 145 00000000 ;// + 146 00000000 ;// + 147 00000000 ;// + 148 00000000 ;// Clock Source Select Register (CLKSRCSEL) + 149 00000000 ;// CLKSRC: PLL Clock Source Selection + 150 00000000 ;// <0=> Internal RC oscillator + 151 00000000 ;// <1=> Main oscillator + 152 00000000 ;// <1=> RTC oscillator + 153 00000000 ;// + 154 00000000 ;// + 155 00000000 ;// PLL Configuration Register (PLLCFG) + 156 00000000 ;// PLL_clk = (2* M * PLL_clk_sr + c) / N + 157 00000000 ;// MSEL: PLL Multiplier Selection + 158 00000000 ;// <1-32768><#-1> + 159 00000000 ;// M Value + + + +ARM Macro Assembler Page 6 + + + 160 00000000 ;// NSEL: PLL Divider Selection + 161 00000000 ;// <1-256><#-1> + 162 00000000 ;// N Value + 163 00000000 ;// + 164 00000000 ;// + 165 00000000 ;// CPU Clock Configuration Register (CCLKCFG) + 166 00000000 ;// CCLKSEL: Divide Value for CPU Clock f + rom PLL + 167 00000000 ;// <1-256><#-1> + 168 00000000 ;// + 169 00000000 ;// + 170 00000000 ;// USB Clock Configuration Register (USBCLKCFG) + 171 00000000 ;// USBSEL: Divide Value for USB Clock f + rom PLL + 172 00000000 ;// <1-16><#-1> + 173 00000000 ;// + 174 00000000 ;// + 175 00000000 ;// Peripheral Clock Selection Register 0 (PCLKSEL + 0) + 176 00000000 ;// PCLK_WDT: Peripheral Clock Select + ion for WDT + 177 00000000 ;// <0=> Pclk = Cclk / 4 + 178 00000000 ;// <1=> Pclk = Cclk + 179 00000000 ;// <2=> Pclk = Cclk / 2 + 180 00000000 ;// <3=> Pclk = Hclk / 8 + 181 00000000 ;// PCLK_TIMER0: Peripheral Clock Select + ion for TIMER0 + 182 00000000 ;// <0=> Pclk = Cclk / 4 + 183 00000000 ;// <1=> Pclk = Cclk + 184 00000000 ;// <2=> Pclk = Cclk / 2 + 185 00000000 ;// <3=> Pclk = Hclk / 8 + 186 00000000 ;// PCLK_TIMER1: Peripheral Clock Select + ion for TIMER1 + 187 00000000 ;// <0=> Pclk = Cclk / 4 + 188 00000000 ;// <1=> Pclk = Cclk + 189 00000000 ;// <2=> Pclk = Cclk / 2 + 190 00000000 ;// <3=> Pclk = Hclk / 8 + 191 00000000 ;// PCLK_UART0: Peripheral Clock Select + ion for UART0 + 192 00000000 ;// <0=> Pclk = Cclk / 4 + 193 00000000 ;// <1=> Pclk = Cclk + 194 00000000 ;// <2=> Pclk = Cclk / 2 + 195 00000000 ;// <3=> Pclk = Hclk / 8 + 196 00000000 ;// PCLK_UART1: Peripheral Clock Select + ion for UART1 + 197 00000000 ;// <0=> Pclk = Cclk / 4 + 198 00000000 ;// <1=> Pclk = Cclk + 199 00000000 ;// <2=> Pclk = Cclk / 2 + 200 00000000 ;// <3=> Pclk = Hclk / 8 + 201 00000000 ;// PCLK_PWM0: Peripheral Clock Select + ion for PWM0 + 202 00000000 ;// <0=> Pclk = Cclk / 4 + 203 00000000 ;// <1=> Pclk = Cclk + 204 00000000 ;// <2=> Pclk = Cclk / 2 + 205 00000000 ;// <3=> Pclk = Hclk / 8 + 206 00000000 ;// PCLK_PWM1: Peripheral Clock Select + ion for PWM1 + 207 00000000 ;// <0=> Pclk = Cclk / 4 + 208 00000000 ;// <1=> Pclk = Cclk + + + +ARM Macro Assembler Page 7 + + + 209 00000000 ;// <2=> Pclk = Cclk / 2 + 210 00000000 ;// <3=> Pclk = Hclk / 8 + 211 00000000 ;// PCLK_I2C0: Peripheral Clock Select + ion for I2C0 + 212 00000000 ;// <0=> Pclk = Cclk / 4 + 213 00000000 ;// <1=> Pclk = Cclk + 214 00000000 ;// <2=> Pclk = Cclk / 2 + 215 00000000 ;// <3=> Pclk = Hclk / 8 + 216 00000000 ;// PCLK_SPI: Peripheral Clock Select + ion for SPI + 217 00000000 ;// <0=> Pclk = Cclk / 4 + 218 00000000 ;// <1=> Pclk = Cclk + 219 00000000 ;// <2=> Pclk = Cclk / 2 + 220 00000000 ;// <3=> Pclk = Hclk / 8 + 221 00000000 ;// PCLK_RTC: Peripheral Clock Select + ion for RTC + 222 00000000 ;// <0=> Pclk = Cclk / 4 + 223 00000000 ;// <1=> Pclk = Cclk + 224 00000000 ;// <2=> Pclk = Cclk / 2 + 225 00000000 ;// <3=> Pclk = Hclk / 8 + 226 00000000 ;// PCLK_SSP1: Peripheral Clock Select + ion for SSP1 + 227 00000000 ;// <0=> Pclk = Cclk / 4 + 228 00000000 ;// <1=> Pclk = Cclk + 229 00000000 ;// <2=> Pclk = Cclk / 2 + 230 00000000 ;// <3=> Pclk = Hclk / 8 + 231 00000000 ;// PCLK_DAC: Peripheral Clock Select + ion for DAC + 232 00000000 ;// <0=> Pclk = Cclk / 4 + 233 00000000 ;// <1=> Pclk = Cclk + 234 00000000 ;// <2=> Pclk = Cclk / 2 + 235 00000000 ;// <3=> Pclk = Hclk / 8 + 236 00000000 ;// PCLK_ADC: Peripheral Clock Select + ion for ADC + 237 00000000 ;// <0=> Pclk = Cclk / 4 + 238 00000000 ;// <1=> Pclk = Cclk + 239 00000000 ;// <2=> Pclk = Cclk / 2 + 240 00000000 ;// <3=> Pclk = Hclk / 8 + 241 00000000 ;// PCLK_CAN1: Peripheral Clock Select + ion for CAN1 + 242 00000000 ;// <0=> Pclk = Cclk / 4 + 243 00000000 ;// <1=> Pclk = Cclk + 244 00000000 ;// <2=> Pclk = Cclk / 2 + 245 00000000 ;// <3=> Pclk = Hclk / 6 + 246 00000000 ;// PCLK_CAN2: Peripheral Clock Select + ion for CAN2 + 247 00000000 ;// <0=> Pclk = Cclk / 4 + 248 00000000 ;// <1=> Pclk = Cclk + 249 00000000 ;// <2=> Pclk = Cclk / 2 + 250 00000000 ;// <3=> Pclk = Hclk / 6 + 251 00000000 ;// PCLK_ACF: Peripheral Clock Select + ion for ACF + 252 00000000 ;// <0=> Pclk = Cclk / 4 + 253 00000000 ;// <1=> Pclk = Cclk + 254 00000000 ;// <2=> Pclk = Cclk / 2 + 255 00000000 ;// <3=> Pclk = Hclk / 6 + 256 00000000 ;// + 257 00000000 ;// + 258 00000000 ;// Peripheral Clock Selection Register 1 (PCLKSEL + + + +ARM Macro Assembler Page 8 + + + 1) + 259 00000000 ;// PCLK_BAT_RAM: Peripheral Clock Select + ion for the Battery Supported RAM + 260 00000000 ;// <0=> Pclk = Cclk / 4 + 261 00000000 ;// <1=> Pclk = Cclk + 262 00000000 ;// <2=> Pclk = Cclk / 2 + 263 00000000 ;// <3=> Pclk = Hclk / 8 + 264 00000000 ;// PCLK_GPIO: Peripheral Clock Select + ion for GPIOs + 265 00000000 ;// <0=> Pclk = Cclk / 4 + 266 00000000 ;// <1=> Pclk = Cclk + 267 00000000 ;// <2=> Pclk = Cclk / 2 + 268 00000000 ;// <3=> Pclk = Hclk / 8 + 269 00000000 ;// PCLK_PCB: Peripheral Clock Select + ion for Pin Connect Block + 270 00000000 ;// <0=> Pclk = Cclk / 4 + 271 00000000 ;// <1=> Pclk = Cclk + 272 00000000 ;// <2=> Pclk = Cclk / 2 + 273 00000000 ;// <3=> Pclk = Hclk / 8 + 274 00000000 ;// PCLK_I2C1: Peripheral Clock Select + ion for I2C1 + 275 00000000 ;// <0=> Pclk = Cclk / 4 + 276 00000000 ;// <1=> Pclk = Cclk + 277 00000000 ;// <2=> Pclk = Cclk / 2 + 278 00000000 ;// <3=> Pclk = Hclk / 8 + 279 00000000 ;// PCLK_SSP0: Peripheral Clock Select + ion for SSP0 + 280 00000000 ;// <0=> Pclk = Cclk / 4 + 281 00000000 ;// <1=> Pclk = Cclk + 282 00000000 ;// <2=> Pclk = Cclk / 2 + 283 00000000 ;// <3=> Pclk = Hclk / 8 + 284 00000000 ;// PCLK_TIMER2: Peripheral Clock Select + ion for TIMER2 + 285 00000000 ;// <0=> Pclk = Cclk / 4 + 286 00000000 ;// <1=> Pclk = Cclk + 287 00000000 ;// <2=> Pclk = Cclk / 2 + 288 00000000 ;// <3=> Pclk = Hclk / 8 + 289 00000000 ;// PCLK_TIMER3: Peripheral Clock Select + ion for TIMER3 + 290 00000000 ;// <0=> Pclk = Cclk / 4 + 291 00000000 ;// <1=> Pclk = Cclk + 292 00000000 ;// <2=> Pclk = Cclk / 2 + 293 00000000 ;// <3=> Pclk = Hclk / 8 + 294 00000000 ;// PCLK_UART2: Peripheral Clock Select + ion for UART2 + 295 00000000 ;// <0=> Pclk = Cclk / 4 + 296 00000000 ;// <1=> Pclk = Cclk + 297 00000000 ;// <2=> Pclk = Cclk / 2 + 298 00000000 ;// <3=> Pclk = Hclk / 8 + 299 00000000 ;// PCLK_UART3: Peripheral Clock Select + ion for UART3 + 300 00000000 ;// <0=> Pclk = Cclk / 4 + 301 00000000 ;// <1=> Pclk = Cclk + 302 00000000 ;// <2=> Pclk = Cclk / 2 + 303 00000000 ;// <3=> Pclk = Hclk / 8 + 304 00000000 ;// PCLK_I2C2: Peripheral Clock Select + ion for I2C2 + 305 00000000 ;// <0=> Pclk = Cclk / 4 + 306 00000000 ;// <1=> Pclk = Cclk + + + +ARM Macro Assembler Page 9 + + + 307 00000000 ;// <2=> Pclk = Cclk / 2 + 308 00000000 ;// <3=> Pclk = Hclk / 8 + 309 00000000 ;// PCLK_I2S: Peripheral Clock Select + ion for I2S + 310 00000000 ;// <0=> Pclk = Cclk / 4 + 311 00000000 ;// <1=> Pclk = Cclk + 312 00000000 ;// <2=> Pclk = Cclk / 2 + 313 00000000 ;// <3=> Pclk = Hclk / 8 + 314 00000000 ;// PCLK_MCI: Peripheral Clock Select + ion for MCI + 315 00000000 ;// <0=> Pclk = Cclk / 4 + 316 00000000 ;// <1=> Pclk = Cclk + 317 00000000 ;// <2=> Pclk = Cclk / 2 + 318 00000000 ;// <3=> Pclk = Hclk / 8 + 319 00000000 ;// PCLK_SYSCON: Peripheral Clock Select + ion for System Control Block + 320 00000000 ;// <0=> Pclk = Cclk / 4 + 321 00000000 ;// <1=> Pclk = Cclk + 322 00000000 ;// <2=> Pclk = Cclk / 2 + 323 00000000 ;// <3=> Pclk = Hclk / 8 + 324 00000000 ;// + 325 00000000 ;// Power Control for Peripherals Register (PCONP) + + 326 00000000 ;// PCUSB: USB interface power/clock ena + ble + 327 00000000 ;// PCENET: Ethernet block power/clock e + nable + 328 00000000 ;// PCGPDMA: GP DMA function power/clock + enable + 329 00000000 ;// PCSDC: SD card interface power/clock + enable + 330 00000000 ;// PCI2S: I2S interface power/clock ena + ble + 331 00000000 ;// PCI2C2: I2C interface 2 power/clock + enable + 332 00000000 ;// PCUART3: UART 3 power/clock enable + 333 00000000 ;// PCUART2: UART 2 power/clock enable + 334 00000000 ;// PCTIM3: Timer 3 power/clock enable + 335 00000000 ;// PCTIM2: Timer 2 power/clock enable + 336 00000000 ;// PCSSP0: SSP interface 0 power/clock + enable + 337 00000000 ;// PCI2C1: I2C interface 1 power/clock + enable + 338 00000000 ;// PCAN2: CAN controller 2 power/clock + enable + 339 00000000 ;// PCAN1: CAN controller 1 power/clock + enable + 340 00000000 ;// PCAD: A/D converter power/clock enab + le + 341 00000000 ;// PCEMC: External memory controller po + wer/clock enable + 342 00000000 ;// PCSSP1: SSP interface 1 power/clock + enable + 343 00000000 ;// PCRTC: RTC power/clock enable + 344 00000000 ;// PCSPI: SPI interface power/clock ena + ble + 345 00000000 ;// PCI2C0: I2C interface 0 power/clock + enable + 346 00000000 ;// PCPWM1: PWM 1 power/clock enable + + + +ARM Macro Assembler Page 10 + + + 347 00000000 ;// PCUART1: UART 1 power/clock enable + 348 00000000 ;// PCUART0: UART 0 power/clock enable + 349 00000000 ;// PCTIM1: Timer/Counter 1 power/clock + enable + 350 00000000 ;// PCTIM0: Timer/Counter 0 power/clock + enable + 351 00000000 ;// + 352 00000000 ;// + 353 00000000 00000001 + CLOCK_SETUP + EQU 1 + 354 00000000 00000020 + SCS_Val EQU 0x00000020 + 355 00000000 00000001 + CLKSRCSEL_Val + EQU 0x00000001 + 356 00000000 0000000B + PLLCFG_Val + EQU 0x0000000B + 357 00000000 00000005 + CCLKCFG_Val + EQU 0x00000005 + 358 00000000 00000005 + USBCLKCFG_Val + EQU 0x00000005 + 359 00000000 00000000 + PCLKSEL0_Val + EQU 0x00000000 + 360 00000000 00000000 + PCLKSEL1_Val + EQU 0x00000000 + 361 00000000 04280FDE + PCONP_Val + EQU 0x04280FDE + 362 00000000 + 363 00000000 ;----------------------- Memory Accelerator Module (MAM) + Definitions ----------- + 364 00000000 + 365 00000000 E01FC000 + MAM_BASE + EQU 0xE01FC000 ; MAM Base Address + 366 00000000 00000000 + MAMCR_OFS + EQU 0x00 ; MAM Control Offse + t + 367 00000000 00000004 + MAMTIM_OFS + EQU 0x04 ; MAM Timing Offset + + 368 00000000 + 369 00000000 ;// MAM Setup + 370 00000000 ;// MAM Control + 371 00000000 ;// <0=> Disabled + 372 00000000 ;// <1=> Partially Enabled + 373 00000000 ;// <2=> Fully Enabled + 374 00000000 ;// Mode + 375 00000000 ;// MAM Timing + 376 00000000 ;// <0=> Reserved <1=> 1 <2=> 2 <3=> + 3 + + + +ARM Macro Assembler Page 11 + + + 377 00000000 ;// <4=> 4 <5=> 5 <6=> 6 <7=> + 7 + 378 00000000 ;// Fetch Cycles + 379 00000000 ;// + 380 00000000 00000001 + MAM_SETUP + EQU 1 + 381 00000000 00000002 + MAMCR_Val + EQU 0x00000002 + 382 00000000 00000004 + MAMTIM_Val + EQU 0x00000004 + 383 00000000 + 384 00000000 + 385 00000000 ;----------------------- Pin Connect Block Definitions - + ------------------------ + 386 00000000 + 387 00000000 E002C000 + PCB_BASE + EQU 0xE002C000 ; PCB Base Address + 388 00000000 00000000 + PINSEL0_OFS + EQU 0x00 ; PINSEL0 Address + Offset + 389 00000000 00000004 + PINSEL1_OFS + EQU 0x04 ; PINSEL1 Address + Offset + 390 00000000 00000008 + PINSEL2_OFS + EQU 0x08 ; PINSEL2 Address + Offset + 391 00000000 0000000C + PINSEL3_OFS + EQU 0x0C ; PINSEL3 Address + Offset + 392 00000000 00000010 + PINSEL4_OFS + EQU 0x10 ; PINSEL4 Address + Offset + 393 00000000 00000014 + PINSEL5_OFS + EQU 0x14 ; PINSEL5 Address + Offset + 394 00000000 00000018 + PINSEL6_OFS + EQU 0x18 ; PINSEL6 Address + Offset + 395 00000000 0000001C + PINSEL7_OFS + EQU 0x1C ; PINSEL7 Address + Offset + 396 00000000 00000020 + PINSEL8_OFS + EQU 0x20 ; PINSEL8 Address + Offset + 397 00000000 00000024 + PINSEL9_OFS + + + +ARM Macro Assembler Page 12 + + + EQU 0x24 ; PINSEL9 Address + Offset + 398 00000000 00000028 + PINSEL10_OFS + EQU 0x28 ; PINSEL10 Address + Offset + 399 00000000 + 400 00000000 + 401 00000000 ;----------------------- External Memory Controller (EMC + ) Definitons ----------- + 402 00000000 + 403 00000000 FFE08000 + EMC_BASE + EQU 0xFFE08000 ; EMC Base Address + 404 00000000 + 405 00000000 00000000 + EMC_CTRL_OFS + EQU 0x000 ; EMCControl + 406 00000000 00000004 + EMC_STAT_OFS + EQU 0x004 ; EMCStatus + 407 00000000 00000008 + EMC_CONFIG_OFS + EQU 0x008 ; EMCConfig + 408 00000000 00000200 + EMC_STA_CFG0_OFS + EQU 0x200 ; EMCStaticConfig0 + 409 00000000 00000204 + EMC_STA_WWEN0_OFS + EQU 0x204 ; EMCStaticWaitWen0 + + 410 00000000 00000208 + EMC_STA_WOEN0_OFS + EQU 0x208 ; EMCStaticWaitOen0 + + 411 00000000 0000020C + EMC_STA_WRD0_OFS + EQU 0x20C ; EMCStaticWaitRd0 + 412 00000000 00000210 + EMC_STA_WPAGE0_OFS + EQU 0x210 ; EMCStaticWaitPage + 0 + 413 00000000 00000214 + EMC_STA_WWR0_OFS + EQU 0x214 ; EMCStaticWaitWr0 + 414 00000000 00000218 + EMC_STA_WTURN0_OFS + EQU 0x218 ; EMCStaticWaitTurn + 0 + 415 00000000 00000220 + EMC_STA_CFG1_OFS + EQU 0x220 ; EMCStaticConfig1 + 416 00000000 00000224 + EMC_STA_WWEN1_OFS + EQU 0x224 ; EMCStaticWaitWen1 + + 417 00000000 00000228 + EMC_STA_WOEN1_OFS + EQU 0x228 ; EMCStaticWaitOen1 + + + +ARM Macro Assembler Page 13 + + + + 418 00000000 0000022C + EMC_STA_WRD1_OFS + EQU 0x22C ; EMCStaticWaitRd1 + 419 00000000 00000230 + EMC_STA_WPAGE1_OFS + EQU 0x230 ; EMCStaticWaitPage + 1 + 420 00000000 00000234 + EMC_STA_WWR1_OFS + EQU 0x234 ; EMCStaticWaitWr1 + 421 00000000 00000238 + EMC_STA_WTURN1_OFS + EQU 0x238 ; EMCStaticWaitTurn + 1 + 422 00000000 00000880 + EMC_STA_EXT_W_OFS + EQU 0x880 ; EMCStaticExtended + Wait + 423 00000000 + 424 00000000 00080000 + BUFEN_Const + EQU (1 << 19) ; Buffer enable bit + + 425 00000000 00000800 + EMC_PCONP_Const + EQU (1 << 11) ; PCONP val to enab + le power for EMC + 426 00000000 + 427 00000000 ; External Memory Pins definitions + 428 00000000 ; pin functions for external memory interfacing + 429 00000000 00005555 + EMC_PINSEL6_Val + EQU 0x00005555 ; D0 .. D7 + 430 00000000 55555555 + EMC_PINSEL8_Val + EQU 0x55555555 ; A0 .. A15 + 431 00000000 50090000 + EMC_PINSEL9_Val + EQU 0x50090000 ; ; !OE, !WE (B + LS0 because of erra + ta), !CS0, !CS1 + 432 00000000 + 433 00000000 ;// External Memory Controller Setup (EMC) --------- + ------------------------ + 434 00000000 ;// External Memory Controller Setup (EMC) + 435 00000000 00000001 + EMC_SETUP + EQU 1 + 436 00000000 + 437 00000000 ;// EMC Control Register (EMCControl) + 438 00000000 ;// Controls operation of the memory controller + 439 00000000 ;// L: Low-power mode enable + 440 00000000 ;// M: Address mirror enable + 441 00000000 ;// E: EMC enable + 442 00000000 ;// + 443 00000000 00000001 + EMC_CTRL_Val + EQU 0x00000001 + + + +ARM Macro Assembler Page 14 + + + 444 00000000 + 445 00000000 ;// EMC Configuration Register (EMCConfig) + 446 00000000 ;// Endian mode + 447 00000000 ;// <0=> Little-endian + 448 00000000 ;// <1=> Big-endian + 449 00000000 ;// + 450 00000000 00000000 + EMC_CONFIG_Val + EQU 0x00000000 + 451 00000000 + 452 00000000 ;// Configure External Bus Behaviour for Static CS + 0 Area ----------------- + 453 00000000 ;// Configure External Bus Behaviour for Static CS + 0 Area + 454 00000000 00000001 + EMC_STACS0_SETUP + EQU 1 + 455 00000000 + 456 00000000 ;// Static Memory Configuration Register (EMCSta + ticConfig0) + 457 00000000 ;// Defines the configuration information for + the static memory CS0 + 458 00000000 ;// WP: Write protect + 459 00000000 ;// B: Write buffer enable + 460 00000000 ;// EW: Extended wait enable + 461 00000000 ;// PC: Chip select polarity + 462 00000000 ;// <0=> Active LOW chip select + 463 00000000 ;// <1=> Active HIGH chip select + 464 00000000 ;// PM: Async page mode enable + 465 00000000 ;// MW: Memory width + 466 00000000 ;// <0=> 8 bit + 467 00000000 ;// <1=> 16 bit + 468 00000000 ;// <2=> 32 bit + 469 00000000 ;// + 470 00000000 00000000 + EMC_STA_CFG0_Val + EQU 0x00000000 + 471 00000000 + 472 00000000 ;// Static Memory Write Enable Delay Register (E + MCStaticWaitWen0) + 473 00000000 ;// Selects the delay from CS0 to write enable + + 474 00000000 ;// WAITWEN: Wait write enable <1-16> <#- + 1> + 475 00000000 ;// The delay is in CCLK cycles + 476 00000000 ;// + 477 00000000 00000002 + EMC_STA_WWEN0_Val + EQU 0x00000002 + 478 00000000 + 479 00000000 ;// Static Memory Output Enable Delay register ( + EMCStaticWaitOen0) + 480 00000000 ;// Selects the delay from CS0 or address chan + ge, whichever is later, to output enable + 481 00000000 ;// WAITOEN: Wait output enable <0-15> + 482 00000000 ;// The delay is in CCLK cycles + 483 00000000 ;// + 484 00000000 00000002 + EMC_STA_WOEN0_Val + + + +ARM Macro Assembler Page 15 + + + EQU 0x00000002 + 485 00000000 + 486 00000000 ;// Static Memory Read Delay Register (EMCStatic + WaitRd0) + 487 00000000 ;// Selects the delay from CS0 to a read acces + s + 488 00000000 ;// WAITRD: Non-page mode read wait state + s or asynchronous page mode read first access wait state + s <1-32> <#-1> + 489 00000000 ;// The delay is in CCLK cycles + 490 00000000 ;// + 491 00000000 0000001F + EMC_STA_WRD0_Val + EQU 0x0000001F + 492 00000000 + 493 00000000 ;// Static Memory Page Mode Read Delay Register + (EMCStaticWaitPage0) + 494 00000000 ;// Selects the delay for asynchronous page mo + de sequential accesses for CS0 + 495 00000000 ;// WAITPAGE: Asynchronous page mode read + after the first read wait states <1-32> <#-1> + 496 00000000 ;// The delay is in CCLK cycles + 497 00000000 ;// + 498 00000000 0000001F + EMC_STA_WPAGE0_Val + EQU 0x0000001F + 499 00000000 + 500 00000000 ;// Static Memory Write Delay Register (EMCStati + cWaitWr0) + 501 00000000 ;// Selects the delay from CS0 to a write acce + ss + 502 00000000 ;// WAITWR: Write wait states <2-33> <#-2 + > + 503 00000000 ;// The delay is in CCLK cycles + 504 00000000 ;// + 505 00000000 0000001F + EMC_STA_WWR0_Val + EQU 0x0000001F + 506 00000000 + 507 00000000 ;// Static Memory Turn Round Delay Register (EMC + StaticWaitTurn0) + 508 00000000 ;// Selects the number of bus turnaround cycle + s for CS0 + 509 00000000 ;// WAITTURN: Bus turnaround cycles <1-16 + > <#-1> + 510 00000000 ;// The delay is in CCLK cycles + 511 00000000 ;// + 512 00000000 0000000F + EMC_STA_WTURN0_Val + EQU 0x0000000F + 513 00000000 + 514 00000000 ;// End of Static Setup for Static CS0 Area + 515 00000000 + 516 00000000 ;// Configure External Bus Behaviour for Static CS + 1 Area ----------------- + 517 00000000 ;// Configure External Bus Behaviour for Static CS + 1 Area + 518 00000000 00000000 + EMC_STACS1_SETUP + + + +ARM Macro Assembler Page 16 + + + EQU 0 + 519 00000000 + 520 00000000 ;// Static Memory Configuration Register (EMCSta + ticConfig1) + 521 00000000 ;// Defines the configuration information for + the static memory CS1 + 522 00000000 ;// WP: Write protect + 523 00000000 ;// B: Write buffer enable + 524 00000000 ;// EW: Extended wait enable + 525 00000000 ;// PC: Chip select polarity + 526 00000000 ;// <0=> Active LOW chip select + 527 00000000 ;// <1=> Active HIGH chip select + 528 00000000 ;// PM: Async page mode enable + 529 00000000 ;// MW: Memory width + 530 00000000 ;// <0=> 8 bit + 531 00000000 ;// <1=> 16 bit + 532 00000000 ;// <2=> 32 bit + 533 00000000 ;// + 534 00000000 00000000 + EMC_STA_CFG1_Val + EQU 0x00000000 + 535 00000000 + 536 00000000 ;// Static Memory Write Enable Delay Register (E + MCStaticWaitWen1) + 537 00000000 ;// Selects the delay from CS1 to write enable + + 538 00000000 ;// WAITWEN: Wait write enable <1-16> <#- + 1> + 539 00000000 ;// The delay is in CCLK cycles + 540 00000000 ;// + 541 00000000 00000000 + EMC_STA_WWEN1_Val + EQU 0x00000000 + 542 00000000 + 543 00000000 ;// Static Memory Output Enable Delay register ( + EMCStaticWaitOen1) + 544 00000000 ;// Selects the delay from CS1 or address chan + ge, whichever is later, to output enable + 545 00000000 ;// WAITOEN: Wait output enable <0-15> + 546 00000000 ;// The delay is in CCLK cycles + 547 00000000 ;// + 548 00000000 00000000 + EMC_STA_WOEN1_Val + EQU 0x00000000 + 549 00000000 + 550 00000000 ;// Static Memory Read Delay Register (EMCStatic + WaitRd1) + 551 00000000 ;// Selects the delay from CS1 to a read acces + s + 552 00000000 ;// WAITRD: Non-page mode read wait state + s or asynchronous page mode read first access wait state + s <1-32> <#-1> + 553 00000000 ;// The delay is in CCLK cycles + 554 00000000 ;// + 555 00000000 0000001F + EMC_STA_WRD1_Val + EQU 0x0000001F + 556 00000000 + 557 00000000 ;// Static Memory Page Mode Read Delay Register + + + +ARM Macro Assembler Page 17 + + + (EMCStaticWaitPage0) + 558 00000000 ;// Selects the delay for asynchronous page mo + de sequential accesses for CS1 + 559 00000000 ;// WAITPAGE: Asynchronous page mode read + after the first read wait states <1-32> <#-1> + 560 00000000 ;// The delay is in CCLK cycles + 561 00000000 ;// + 562 00000000 0000001F + EMC_STA_WPAGE1_Val + EQU 0x0000001F + 563 00000000 + 564 00000000 ;// Static Memory Write Delay Register (EMCStati + cWaitWr1) + 565 00000000 ;// Selects the delay from CS1 to a write acce + ss + 566 00000000 ;// WAITWR: Write wait states <2-33> <#-2 + > + 567 00000000 ;// The delay is in CCLK cycles + 568 00000000 ;// + 569 00000000 0000001F + EMC_STA_WWR1_Val + EQU 0x0000001F + 570 00000000 + 571 00000000 ;// Static Memory Turn Round Delay Register (EMC + StaticWaitTurn1) + 572 00000000 ;// Selects the number of bus turnaround cycle + s for CS1 + 573 00000000 ;// WAITTURN: Bus turnaround cycles <1-16 + > <#-1> + 574 00000000 ;// The delay is in CCLK cycles + 575 00000000 ;// + 576 00000000 0000000F + EMC_STA_WTURN1_Val + EQU 0x0000000F + 577 00000000 + 578 00000000 ;// End of Static Setup for Static CS1 Area + 579 00000000 + 580 00000000 ;// Static Memory Extended Wait Register (EMCStati + cExtendedWait) + 581 00000000 ;// Time long static memory read and write trans + fers + 582 00000000 ;// EXTENDEDWAIT: Extended wait time out <1 + -64><#-1> + 583 00000000 ;// The delay is in (16 * CCLK) cycles + 584 00000000 ;// + 585 00000000 00000000 + EMC_STA_EXT_W_Val + EQU 0x00000000 + 586 00000000 + 587 00000000 ;// End of EMC Setup + 588 00000000 + 589 00000000 + 590 00000000 ; Area Definition and Entry Point + 591 00000000 ; Startup Code must be linked first at Address at which + it expects to run. + 592 00000000 + 593 00000000 AREA RESET, CODE, READONLY + 594 00000000 ARM + 595 00000000 + + + +ARM Macro Assembler Page 18 + + + 596 00000000 + 597 00000000 ; Exception Vectors + 598 00000000 ; Mapped to Address 0. + 599 00000000 ; Absolute addressing mode must be used. + 600 00000000 ; Dummy Handlers are implemented as infinite loops whic + h can be modified. + 601 00000000 + 602 00000000 E59FF018 + Vectors LDR PC, Reset_Addr + 603 00000004 E59FF018 LDR PC, Undef_Addr + 604 00000008 E59FF018 LDR PC, SWI_Addr + 605 0000000C E59FF018 LDR PC, PAbt_Addr + 606 00000010 E59FF018 LDR PC, DAbt_Addr + 607 00000014 E1A00000 NOP ; Reserved Vector + 608 00000018 ; LDR PC, IRQ_Addr + 609 00000018 E51FF120 LDR PC, [PC, #-0x0120] ; Vector fro + m VicVectAddr + 610 0000001C E59FF018 LDR PC, FIQ_Addr + 611 00000020 + 612 00000020 00000000 + Reset_Addr + DCD Reset_Handler + 613 00000024 00000000 + Undef_Addr + DCD Undef_Handler + 614 00000028 00000000 + SWI_Addr + DCD SWI_Handler + 615 0000002C 00000000 + PAbt_Addr + DCD PAbt_Handler + 616 00000030 00000000 + DAbt_Addr + DCD DAbt_Handler + 617 00000034 00000000 DCD 0 ; Reserved Address + + 618 00000038 00000000 + IRQ_Addr + DCD IRQ_Handler + 619 0000003C 00000000 + FIQ_Addr + DCD FIQ_Handler + 620 00000040 + 621 00000040 EAFFFFFE + Undef_Handler + B Undef_Handler + 622 00000044 EAFFFFFE + SWI_Handler + B SWI_Handler + 623 00000048 EAFFFFFE + PAbt_Handler + B PAbt_Handler + 624 0000004C EAFFFFFE + DAbt_Handler + B DAbt_Handler + 625 00000050 EAFFFFFE + IRQ_Handler + B IRQ_Handler + 626 00000054 EAFFFFFE + + + +ARM Macro Assembler Page 19 + + + FIQ_Handler + B FIQ_Handler + 627 00000058 + 628 00000058 + 629 00000058 ; Reset Handler + 630 00000058 + 631 00000058 EXPORT Reset_Handler + 632 00000058 Reset_Handler + 633 00000058 + 634 00000058 + 635 00000058 + 636 00000058 ; Clock Setup ------------------------------------------ + ------------------------ + 637 00000058 + 638 00000058 IF (:LNOT:(:DEF:NO_CLOCK_SETUP)):L +AND:(CLOCK_SETUP != 0) + 639 00000058 E59F019C LDR R0, =SCB_BASE + 640 0000005C E3A010AA MOV R1, #0xAA + 641 00000060 E3A02055 MOV R2, #0x55 + 642 00000064 + 643 00000064 ; Configure and Enable PLL + 644 00000064 E3A03020 LDR R3, =SCS_Val ; Enable main osci + llator + 645 00000068 E58031A0 STR R3, [R0, #SCS_OFS] + 646 0000006C + 647 0000006C IF (SCS_Val:AND:OSCEN) != 0 + 648 0000006C E59031A0 + OSC_Loop + LDR R3, [R0, #SCS_OFS] ; Wait for m + ain osc stabilize + 649 00000070 E2133040 ANDS R3, R3, #OSCSTAT + 650 00000074 0AFFFFFC BEQ OSC_Loop + 651 00000078 ENDIF + 652 00000078 + 653 00000078 E3A03001 LDR R3, =CLKSRCSEL_Val ; Select PLL + source clock + 654 0000007C E580310C STR R3, [R0, #CLKSRCSEL_OFS] + 655 00000080 E3A0300B LDR R3, =PLLCFG_Val + 656 00000084 E5803084 STR R3, [R0, #PLLCFG_OFS] + 657 00000088 E580108C STR R1, [R0, #PLLFEED_OFS] + 658 0000008C E580208C STR R2, [R0, #PLLFEED_OFS] + 659 00000090 E3A03001 MOV R3, #PLLCON_PLLE + 660 00000094 E5803080 STR R3, [R0, #PLLCON_OFS] + 661 00000098 E580108C STR R1, [R0, #PLLFEED_OFS] + 662 0000009C E580208C STR R2, [R0, #PLLFEED_OFS] + 663 000000A0 + 664 000000A0 ; Wait until PLL Locked + 665 000000A0 E5903088 + PLL_Loop + LDR R3, [R0, #PLLSTAT_OFS] + 666 000000A4 E2133301 ANDS R3, R3, #PLLSTAT_PLOCK + 667 000000A8 0AFFFFFC BEQ PLL_Loop + 668 000000AC + 669 000000AC E5903088 + M_N_Lock + LDR R3, [R0, #PLLSTAT_OFS] + 670 000000B0 E59F4148 LDR R4, =(PLLSTAT_M:OR:PLLSTAT_N) + 671 000000B4 E0033004 AND R3, R3, R4 + 672 000000B8 E3A0400B LDR R4, =PLLCFG_Val + + + +ARM Macro Assembler Page 20 + + + 673 000000BC E0333004 EORS R3, R3, R4 + 674 000000C0 1AFFFFF9 BNE M_N_Lock + 675 000000C4 + 676 000000C4 ; Setup CPU clock divider + 677 000000C4 E3A03005 MOV R3, #CCLKCFG_Val + 678 000000C8 E5803104 STR R3, [R0, #CCLKCFG_OFS] + 679 000000CC + 680 000000CC ; Setup USB clock divider + 681 000000CC E3A03005 LDR R3, =USBCLKCFG_Val + 682 000000D0 E5803108 STR R3, [R0, #USBCLKCFG_OFS] + 683 000000D4 + 684 000000D4 ; Setup Peripheral Clock + 685 000000D4 E3A03000 LDR R3, =PCLKSEL0_Val + 686 000000D8 E58031A8 STR R3, [R0, #PCLKSEL0_OFS] + 687 000000DC E3A03000 LDR R3, =PCLKSEL1_Val + 688 000000E0 E58031AC STR R3, [R0, #PCLKSEL1_OFS] + 689 000000E4 + 690 000000E4 ; Switch to PLL Clock + 691 000000E4 E3A03003 MOV R3, #(PLLCON_PLLE:OR:PLLCON_PLL +C) + 692 000000E8 E5803080 STR R3, [R0, #PLLCON_OFS] + 693 000000EC E580108C STR R1, [R0, #PLLFEED_OFS] + 694 000000F0 E580208C STR R2, [R0, #PLLFEED_OFS] + 695 000000F4 + 696 000000F4 E59F4108 LDR R4, =PCONP_Val ; Enable Periphe + ral Clocks + 697 000000F8 E58040C4 STR R4, [R0, #PCONP_OFS] + 698 000000FC ENDIF ; CLOCK_SETUP + 699 000000FC + 700 000000FC + 701 000000FC ; Setup Memory Accelerator Module ---------------------- + ------------------------ + 702 000000FC + 703 000000FC IF MAM_SETUP != 0 + 704 000000FC E59F00F8 LDR R0, =MAM_BASE + 705 00000100 E3A01004 MOV R1, #MAMTIM_Val + 706 00000104 E5801004 STR R1, [R0, #MAMTIM_OFS] + 707 00000108 E3A01002 MOV R1, #MAMCR_Val + 708 0000010C E5801000 STR R1, [R0, #MAMCR_OFS] + 709 00000110 ENDIF ; MAM_SETUP + 710 00000110 + 711 00000110 + 712 00000110 ; Setup External Memory Controller --------------------- + ------------------------ + 713 00000110 + 714 00000110 IF (:DEF:NO_EMC_SETUP):LOR:(EMC_SE +TUP != 0) + 715 00000110 E59F00F0 LDR R0, =EMC_BASE + 716 00000114 E59F10E0 LDR R1, =SCB_BASE + 717 00000118 E59F20EC LDR R2, =PCB_BASE + 718 0000011C + 719 0000011C E59140C4 LDR R4, [R1, #PCONP_OFS] + 720 00000120 E3844B02 ORR R4, R4, #EMC_PCONP_Const + ; Enable EMC clock + 721 00000124 E58140C4 STR R4, [R1, #PCONP_OFS] + 722 00000128 + 723 00000128 E3A04001 LDR R4, =EMC_CTRL_Val + 724 0000012C E5804000 STR R4, [R0, #EMC_CTRL_OFS] + 725 00000130 E3A04000 LDR R4, =EMC_CONFIG_Val + + + +ARM Macro Assembler Page 21 + + + 726 00000134 E5804008 STR R4, [R0, #EMC_CONFIG_OFS] + 727 00000138 + 728 00000138 ; Setup pin functions for External Bus functionality + 729 00000138 E59F40D0 LDR R4, =EMC_PINSEL6_Val + 730 0000013C E5824018 STR R4, [R2, #PINSEL6_OFS] + 731 00000140 E59F40CC LDR R4, =EMC_PINSEL8_Val + 732 00000144 E5824020 STR R4, [R2, #PINSEL8_OFS] + 733 00000148 E59F40C8 LDR R4, =EMC_PINSEL9_Val + 734 0000014C E5824024 STR R4, [R2, #PINSEL9_OFS] + 735 00000150 + 736 00000150 E59F60C4 LDR R6, =1200000 ; Number of cycles + to delay + 737 00000154 E2566001 + Wait_0 SUBS R6, R6, #1 ; Delay ~100 ms @ p + roc clk 48 MHz + 738 00000158 1AFFFFFD BNE Wait_0 + 739 0000015C + 740 0000015C IF (EMC_STACS0_SETUP != 0) + 741 0000015C E3A04000 LDR R4, =EMC_STA_CFG0_Val + 742 00000160 E5804200 STR R4, [R0, #EMC_STA_CFG0_OFS] + 743 00000164 E3A04002 LDR R4, =EMC_STA_WWEN0_Val + 744 00000168 E5804204 STR R4, [R0, #EMC_STA_WWEN0_OFS] + 745 0000016C E3A04002 LDR R4, =EMC_STA_WOEN0_Val + 746 00000170 E5804208 STR R4, [R0, #EMC_STA_WOEN0_OFS] + 747 00000174 E3A0401F LDR R4, =EMC_STA_WRD0_Val + 748 00000178 E580420C STR R4, [R0, #EMC_STA_WRD0_OFS] + 749 0000017C E3A0401F LDR R4, =EMC_STA_WPAGE0_Val + 750 00000180 E5804210 STR R4, [R0, #EMC_STA_WPAGE0_OFS] + 751 00000184 E3A0401F LDR R4, =EMC_STA_WWR0_Val + 752 00000188 E5804214 STR R4, [R0, #EMC_STA_WWR0_OFS] + 753 0000018C E3A0400F LDR R4, =EMC_STA_WTURN0_Val + 754 00000190 E5804218 STR R4, [R0, #EMC_STA_WTURN0_OFS] + 755 00000194 ENDIF + 756 00000194 + 757 00000194 IF (EMC_STACS1_SETUP != 0) + 772 ENDIF + 773 00000194 + 774 00000194 E59F6084 LDR R6, =120000 ; Number of cycles + to delay + 775 00000198 E2566001 + Wait_1 SUBS R6, R6, #1 ; Delay ~10 ms @ pr + oc clk 48 MHz + 776 0000019C 1AFFFFFD BNE Wait_1 + 777 000001A0 + 778 000001A0 E3A04000 LDR R4, =EMC_STA_EXT_W_Val + 779 000001A4 E3A05D22 LDR R5, =EMC_STA_EXT_W_OFS + 780 000001A8 E0855000 ADD R5, R5, R0 + 781 000001AC E5854000 STR R4, [R5, #0] + 782 000001B0 + 783 000001B0 ENDIF ; EMC_SETUP + 784 000001B0 + 785 000001B0 + 786 000001B0 ; Copy Exception Vectors to Internal RAM --------------- + ------------------------ + 787 000001B0 + 788 000001B0 IF :DEF:RAM_INTVEC + 795 ENDIF + 796 000001B0 + 797 000001B0 + + + +ARM Macro Assembler Page 22 + + + 798 000001B0 ; Memory Mapping (when Interrupt Vectors are in RAM) --- + ------------------------ + 799 000001B0 + 800 000001B0 E01FC040 + MEMMAP EQU 0xE01FC040 ; Memory Mapping Co + ntrol + 801 000001B0 IF :DEF:REMAP + 811 ENDIF + 812 000001B0 + 813 000001B0 + 814 000001B0 ; Setup Stack for each mode ---------------------------- + ------------------------ + 815 000001B0 + 816 000001B0 E59F006C LDR R0, =Stack_Top + 817 000001B4 + 818 000001B4 ; Enter Undefined Instruction Mode and set its Stack Po + inter + 819 000001B4 E321F0DB MSR CPSR_c, #Mode_UND:OR:I_Bit:OR:F +_Bit + 820 000001B8 E1A0D000 MOV SP, R0 + 821 000001BC E2400000 SUB R0, R0, #UND_Stack_Size + 822 000001C0 + 823 000001C0 ; Enter Abort Mode and set its Stack Pointer + 824 000001C0 E321F0D7 MSR CPSR_c, #Mode_ABT:OR:I_Bit:OR:F +_Bit + 825 000001C4 E1A0D000 MOV SP, R0 + 826 000001C8 E2400000 SUB R0, R0, #ABT_Stack_Size + 827 000001CC + 828 000001CC ; Enter FIQ Mode and set its Stack Pointer + 829 000001CC E321F0D1 MSR CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F +_Bit + 830 000001D0 E1A0D000 MOV SP, R0 + 831 000001D4 E2400000 SUB R0, R0, #FIQ_Stack_Size + 832 000001D8 + 833 000001D8 ; Enter IRQ Mode and set its Stack Pointer + 834 000001D8 E321F0D2 MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F +_Bit + 835 000001DC E1A0D000 MOV SP, R0 + 836 000001E0 E2400C01 SUB R0, R0, #IRQ_Stack_Size + 837 000001E4 + 838 000001E4 ; Enter Supervisor Mode and set its Stack Pointer + 839 000001E4 E321F0D3 MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F +_Bit + 840 000001E8 E1A0D000 MOV SP, R0 + 841 000001EC E2400008 SUB R0, R0, #SVC_Stack_Size + 842 000001F0 + 843 000001F0 ; Enter User Mode and set its Stack Pointer + 844 000001F0 E321F010 MSR CPSR_c, #Mode_USR + 845 000001F4 IF :DEF:__MICROLIB + 846 000001F4 + 847 000001F4 EXPORT __initial_sp + 848 000001F4 + 849 000001F4 ELSE + 854 ENDIF + 855 000001F4 + 856 000001F4 + 857 000001F4 ; Enter the C code ------------------------------------- + ------------------------ + 858 000001F4 + + + +ARM Macro Assembler Page 23 + + + 859 000001F4 IMPORT __main + 860 000001F4 E59F002C LDR R0, =__main + 861 000001F8 E12FFF10 BX R0 + 862 000001FC + 863 000001FC + 864 000001FC IF :DEF:__MICROLIB + 865 000001FC + 866 000001FC EXPORT __heap_base + 867 000001FC EXPORT __heap_limit + 868 000001FC + 869 000001FC ELSE + 882 ENDIF + 883 000001FC + 884 000001FC + 885 000001FC END + E01FC000 + 00FF7FFF + 04280FDE + FFE08000 + E002C000 + 00005555 + 55555555 + 50090000 + 00124F80 + 0001D4C0 + 00000000 + 00000000 +Command Line: --debug --xref --apcs=interwork --depend=LPC2300.d -oLPC2300.o -I +C:\Universidad\Keil\ARM\RV31\INC -IC:\Universidad\Keil\ARM\CMSIS\Include -IC:\U +niversidad\Keil\ARM\Inc\Philips --predefine="__EVAL SETA 1" --predefine="__MICR +OLIB SETA 1" --list=LPC2300.lst LPC2300.s + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +STACK 00000000 + +Symbol: STACK + Definitions + At line 92 in file LPC2300.s + Uses + None +Comment: STACK unused +Stack_Mem 00000000 + +Symbol: Stack_Mem + Definitions + At line 94 in file LPC2300.s + Uses + None +Comment: Stack_Mem unused +Stack_Top 00000508 + +Symbol: Stack_Top + Definitions + At line 97 in file LPC2300.s + Uses + At line 816 in file LPC2300.s +Comment: Stack_Top used once +__initial_sp 00000400 + +Symbol: __initial_sp + Definitions + At line 95 in file LPC2300.s + Uses + At line 847 in file LPC2300.s +Comment: __initial_sp used once +4 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +HEAP 00000000 + +Symbol: HEAP + Definitions + At line 106 in file LPC2300.s + Uses + None +Comment: HEAP unused +Heap_Mem 00000000 + +Symbol: Heap_Mem + Definitions + At line 108 in file LPC2300.s + Uses + None +Comment: Heap_Mem unused +__heap_base 00000000 + +Symbol: __heap_base + Definitions + At line 107 in file LPC2300.s + Uses + At line 866 in file LPC2300.s +Comment: __heap_base used once +__heap_limit 00000000 + +Symbol: __heap_limit + Definitions + At line 109 in file LPC2300.s + Uses + At line 867 in file LPC2300.s +Comment: __heap_limit used once +4 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Relocatable symbols + +DAbt_Addr 00000030 + +Symbol: DAbt_Addr + Definitions + At line 616 in file LPC2300.s + Uses + At line 606 in file LPC2300.s +Comment: DAbt_Addr used once +DAbt_Handler 0000004C + +Symbol: DAbt_Handler + Definitions + At line 624 in file LPC2300.s + Uses + At line 616 in file LPC2300.s + At line 624 in file LPC2300.s + +FIQ_Addr 0000003C + +Symbol: FIQ_Addr + Definitions + At line 619 in file LPC2300.s + Uses + At line 610 in file LPC2300.s +Comment: FIQ_Addr used once +FIQ_Handler 00000054 + +Symbol: FIQ_Handler + Definitions + At line 626 in file LPC2300.s + Uses + At line 619 in file LPC2300.s + At line 626 in file LPC2300.s + +IRQ_Addr 00000038 + +Symbol: IRQ_Addr + Definitions + At line 618 in file LPC2300.s + Uses + None +Comment: IRQ_Addr unused +IRQ_Handler 00000050 + +Symbol: IRQ_Handler + Definitions + At line 625 in file LPC2300.s + Uses + At line 618 in file LPC2300.s + At line 625 in file LPC2300.s + +M_N_Lock 000000AC + +Symbol: M_N_Lock + Definitions + At line 669 in file LPC2300.s + Uses + At line 674 in file LPC2300.s +Comment: M_N_Lock used once + + + +ARM Macro Assembler Page 2 Alphabetic symbol ordering +Relocatable symbols + +OSC_Loop 0000006C + +Symbol: OSC_Loop + Definitions + At line 648 in file LPC2300.s + Uses + At line 650 in file LPC2300.s +Comment: OSC_Loop used once +PAbt_Addr 0000002C + +Symbol: PAbt_Addr + Definitions + At line 615 in file LPC2300.s + Uses + At line 605 in file LPC2300.s +Comment: PAbt_Addr used once +PAbt_Handler 00000048 + +Symbol: PAbt_Handler + Definitions + At line 623 in file LPC2300.s + Uses + At line 615 in file LPC2300.s + At line 623 in file LPC2300.s + +PLL_Loop 000000A0 + +Symbol: PLL_Loop + Definitions + At line 665 in file LPC2300.s + Uses + At line 667 in file LPC2300.s +Comment: PLL_Loop used once +RESET 00000000 + +Symbol: RESET + Definitions + At line 593 in file LPC2300.s + Uses + None +Comment: RESET unused +Reset_Addr 00000020 + +Symbol: Reset_Addr + Definitions + At line 612 in file LPC2300.s + Uses + At line 602 in file LPC2300.s +Comment: Reset_Addr used once +Reset_Handler 00000058 + +Symbol: Reset_Handler + Definitions + At line 632 in file LPC2300.s + Uses + At line 612 in file LPC2300.s + At line 631 in file LPC2300.s + +SWI_Addr 00000028 + + + +ARM Macro Assembler Page 3 Alphabetic symbol ordering +Relocatable symbols + + +Symbol: SWI_Addr + Definitions + At line 614 in file LPC2300.s + Uses + At line 604 in file LPC2300.s +Comment: SWI_Addr used once +SWI_Handler 00000044 + +Symbol: SWI_Handler + Definitions + At line 622 in file LPC2300.s + Uses + At line 614 in file LPC2300.s + At line 622 in file LPC2300.s + +Undef_Addr 00000024 + +Symbol: Undef_Addr + Definitions + At line 613 in file LPC2300.s + Uses + At line 603 in file LPC2300.s +Comment: Undef_Addr used once +Undef_Handler 00000040 + +Symbol: Undef_Handler + Definitions + At line 621 in file LPC2300.s + Uses + At line 613 in file LPC2300.s + At line 621 in file LPC2300.s + +Vectors 00000000 + +Symbol: Vectors + Definitions + At line 602 in file LPC2300.s + Uses + None +Comment: Vectors unused +Wait_0 00000154 + +Symbol: Wait_0 + Definitions + At line 737 in file LPC2300.s + Uses + At line 738 in file LPC2300.s +Comment: Wait_0 used once +Wait_1 00000198 + +Symbol: Wait_1 + Definitions + At line 775 in file LPC2300.s + Uses + At line 776 in file LPC2300.s +Comment: Wait_1 used once +21 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +Absolute symbols + +ABT_Stack_Size 00000000 + +Symbol: ABT_Stack_Size + Definitions + At line 84 in file LPC2300.s + Uses + At line 90 in file LPC2300.s + At line 826 in file LPC2300.s + +BUFEN_Const 00080000 + +Symbol: BUFEN_Const + Definitions + At line 424 in file LPC2300.s + Uses + None +Comment: BUFEN_Const unused +CCLKCFG_OFS 00000104 + +Symbol: CCLKCFG_OFS + Definitions + At line 119 in file LPC2300.s + Uses + At line 678 in file LPC2300.s +Comment: CCLKCFG_OFS used once +CCLKCFG_Val 00000005 + +Symbol: CCLKCFG_Val + Definitions + At line 357 in file LPC2300.s + Uses + At line 677 in file LPC2300.s +Comment: CCLKCFG_Val used once +CLKSRCSEL_OFS 0000010C + +Symbol: CLKSRCSEL_OFS + Definitions + At line 121 in file LPC2300.s + Uses + At line 654 in file LPC2300.s +Comment: CLKSRCSEL_OFS used once +CLKSRCSEL_Val 00000001 + +Symbol: CLKSRCSEL_Val + Definitions + At line 355 in file LPC2300.s + Uses + At line 653 in file LPC2300.s +Comment: CLKSRCSEL_Val used once +CLOCK_SETUP 00000001 + +Symbol: CLOCK_SETUP + Definitions + At line 353 in file LPC2300.s + Uses + At line 638 in file LPC2300.s +Comment: CLOCK_SETUP used once +EMC_BASE FFE08000 + + + + +ARM Macro Assembler Page 2 Alphabetic symbol ordering +Absolute symbols + +Symbol: EMC_BASE + Definitions + At line 403 in file LPC2300.s + Uses + At line 715 in file LPC2300.s +Comment: EMC_BASE used once +EMC_CONFIG_OFS 00000008 + +Symbol: EMC_CONFIG_OFS + Definitions + At line 407 in file LPC2300.s + Uses + At line 726 in file LPC2300.s +Comment: EMC_CONFIG_OFS used once +EMC_CONFIG_Val 00000000 + +Symbol: EMC_CONFIG_Val + Definitions + At line 450 in file LPC2300.s + Uses + At line 725 in file LPC2300.s +Comment: EMC_CONFIG_Val used once +EMC_CTRL_OFS 00000000 + +Symbol: EMC_CTRL_OFS + Definitions + At line 405 in file LPC2300.s + Uses + At line 724 in file LPC2300.s +Comment: EMC_CTRL_OFS used once +EMC_CTRL_Val 00000001 + +Symbol: EMC_CTRL_Val + Definitions + At line 443 in file LPC2300.s + Uses + At line 723 in file LPC2300.s +Comment: EMC_CTRL_Val used once +EMC_PCONP_Const 00000800 + +Symbol: EMC_PCONP_Const + Definitions + At line 425 in file LPC2300.s + Uses + At line 720 in file LPC2300.s +Comment: EMC_PCONP_Const used once +EMC_PINSEL6_Val 00005555 + +Symbol: EMC_PINSEL6_Val + Definitions + At line 429 in file LPC2300.s + Uses + At line 729 in file LPC2300.s +Comment: EMC_PINSEL6_Val used once +EMC_PINSEL8_Val 55555555 + +Symbol: EMC_PINSEL8_Val + Definitions + At line 430 in file LPC2300.s + + + +ARM Macro Assembler Page 3 Alphabetic symbol ordering +Absolute symbols + + Uses + At line 731 in file LPC2300.s +Comment: EMC_PINSEL8_Val used once +EMC_PINSEL9_Val 50090000 + +Symbol: EMC_PINSEL9_Val + Definitions + At line 431 in file LPC2300.s + Uses + At line 733 in file LPC2300.s +Comment: EMC_PINSEL9_Val used once +EMC_SETUP 00000001 + +Symbol: EMC_SETUP + Definitions + At line 435 in file LPC2300.s + Uses + At line 714 in file LPC2300.s +Comment: EMC_SETUP used once +EMC_STACS0_SETUP 00000001 + +Symbol: EMC_STACS0_SETUP + Definitions + At line 454 in file LPC2300.s + Uses + At line 740 in file LPC2300.s +Comment: EMC_STACS0_SETUP used once +EMC_STACS1_SETUP 00000000 + +Symbol: EMC_STACS1_SETUP + Definitions + At line 518 in file LPC2300.s + Uses + At line 757 in file LPC2300.s +Comment: EMC_STACS1_SETUP used once +EMC_STAT_OFS 00000004 + +Symbol: EMC_STAT_OFS + Definitions + At line 406 in file LPC2300.s + Uses + None +Comment: EMC_STAT_OFS unused +EMC_STA_CFG0_OFS 00000200 + +Symbol: EMC_STA_CFG0_OFS + Definitions + At line 408 in file LPC2300.s + Uses + At line 742 in file LPC2300.s +Comment: EMC_STA_CFG0_OFS used once +EMC_STA_CFG0_Val 00000000 + +Symbol: EMC_STA_CFG0_Val + Definitions + At line 470 in file LPC2300.s + Uses + At line 741 in file LPC2300.s +Comment: EMC_STA_CFG0_Val used once + + + +ARM Macro Assembler Page 4 Alphabetic symbol ordering +Absolute symbols + +EMC_STA_CFG1_OFS 00000220 + +Symbol: EMC_STA_CFG1_OFS + Definitions + At line 415 in file LPC2300.s + Uses + None +Comment: EMC_STA_CFG1_OFS unused +EMC_STA_CFG1_Val 00000000 + +Symbol: EMC_STA_CFG1_Val + Definitions + At line 534 in file LPC2300.s + Uses + None +Comment: EMC_STA_CFG1_Val unused +EMC_STA_EXT_W_OFS 00000880 + +Symbol: EMC_STA_EXT_W_OFS + Definitions + At line 422 in file LPC2300.s + Uses + At line 779 in file LPC2300.s +Comment: EMC_STA_EXT_W_OFS used once +EMC_STA_EXT_W_Val 00000000 + +Symbol: EMC_STA_EXT_W_Val + Definitions + At line 585 in file LPC2300.s + Uses + At line 778 in file LPC2300.s +Comment: EMC_STA_EXT_W_Val used once +EMC_STA_WOEN0_OFS 00000208 + +Symbol: EMC_STA_WOEN0_OFS + Definitions + At line 410 in file LPC2300.s + Uses + At line 746 in file LPC2300.s +Comment: EMC_STA_WOEN0_OFS used once +EMC_STA_WOEN0_Val 00000002 + +Symbol: EMC_STA_WOEN0_Val + Definitions + At line 484 in file LPC2300.s + Uses + At line 745 in file LPC2300.s +Comment: EMC_STA_WOEN0_Val used once +EMC_STA_WOEN1_OFS 00000228 + +Symbol: EMC_STA_WOEN1_OFS + Definitions + At line 417 in file LPC2300.s + Uses + None +Comment: EMC_STA_WOEN1_OFS unused +EMC_STA_WOEN1_Val 00000000 + +Symbol: EMC_STA_WOEN1_Val + + + +ARM Macro Assembler Page 5 Alphabetic symbol ordering +Absolute symbols + + Definitions + At line 548 in file LPC2300.s + Uses + None +Comment: EMC_STA_WOEN1_Val unused +EMC_STA_WPAGE0_OFS 00000210 + +Symbol: EMC_STA_WPAGE0_OFS + Definitions + At line 412 in file LPC2300.s + Uses + At line 750 in file LPC2300.s +Comment: EMC_STA_WPAGE0_OFS used once +EMC_STA_WPAGE0_Val 0000001F + +Symbol: EMC_STA_WPAGE0_Val + Definitions + At line 498 in file LPC2300.s + Uses + At line 749 in file LPC2300.s +Comment: EMC_STA_WPAGE0_Val used once +EMC_STA_WPAGE1_OFS 00000230 + +Symbol: EMC_STA_WPAGE1_OFS + Definitions + At line 419 in file LPC2300.s + Uses + None +Comment: EMC_STA_WPAGE1_OFS unused +EMC_STA_WPAGE1_Val 0000001F + +Symbol: EMC_STA_WPAGE1_Val + Definitions + At line 562 in file LPC2300.s + Uses + None +Comment: EMC_STA_WPAGE1_Val unused +EMC_STA_WRD0_OFS 0000020C + +Symbol: EMC_STA_WRD0_OFS + Definitions + At line 411 in file LPC2300.s + Uses + At line 748 in file LPC2300.s +Comment: EMC_STA_WRD0_OFS used once +EMC_STA_WRD0_Val 0000001F + +Symbol: EMC_STA_WRD0_Val + Definitions + At line 491 in file LPC2300.s + Uses + At line 747 in file LPC2300.s +Comment: EMC_STA_WRD0_Val used once +EMC_STA_WRD1_OFS 0000022C + +Symbol: EMC_STA_WRD1_OFS + Definitions + At line 418 in file LPC2300.s + Uses + + + +ARM Macro Assembler Page 6 Alphabetic symbol ordering +Absolute symbols + + None +Comment: EMC_STA_WRD1_OFS unused +EMC_STA_WRD1_Val 0000001F + +Symbol: EMC_STA_WRD1_Val + Definitions + At line 555 in file LPC2300.s + Uses + None +Comment: EMC_STA_WRD1_Val unused +EMC_STA_WTURN0_OFS 00000218 + +Symbol: EMC_STA_WTURN0_OFS + Definitions + At line 414 in file LPC2300.s + Uses + At line 754 in file LPC2300.s +Comment: EMC_STA_WTURN0_OFS used once +EMC_STA_WTURN0_Val 0000000F + +Symbol: EMC_STA_WTURN0_Val + Definitions + At line 512 in file LPC2300.s + Uses + At line 753 in file LPC2300.s +Comment: EMC_STA_WTURN0_Val used once +EMC_STA_WTURN1_OFS 00000238 + +Symbol: EMC_STA_WTURN1_OFS + Definitions + At line 421 in file LPC2300.s + Uses + None +Comment: EMC_STA_WTURN1_OFS unused +EMC_STA_WTURN1_Val 0000000F + +Symbol: EMC_STA_WTURN1_Val + Definitions + At line 576 in file LPC2300.s + Uses + None +Comment: EMC_STA_WTURN1_Val unused +EMC_STA_WWEN0_OFS 00000204 + +Symbol: EMC_STA_WWEN0_OFS + Definitions + At line 409 in file LPC2300.s + Uses + At line 744 in file LPC2300.s +Comment: EMC_STA_WWEN0_OFS used once +EMC_STA_WWEN0_Val 00000002 + +Symbol: EMC_STA_WWEN0_Val + Definitions + At line 477 in file LPC2300.s + Uses + At line 743 in file LPC2300.s +Comment: EMC_STA_WWEN0_Val used once +EMC_STA_WWEN1_OFS 00000224 + + + +ARM Macro Assembler Page 7 Alphabetic symbol ordering +Absolute symbols + + +Symbol: EMC_STA_WWEN1_OFS + Definitions + At line 416 in file LPC2300.s + Uses + None +Comment: EMC_STA_WWEN1_OFS unused +EMC_STA_WWEN1_Val 00000000 + +Symbol: EMC_STA_WWEN1_Val + Definitions + At line 541 in file LPC2300.s + Uses + None +Comment: EMC_STA_WWEN1_Val unused +EMC_STA_WWR0_OFS 00000214 + +Symbol: EMC_STA_WWR0_OFS + Definitions + At line 413 in file LPC2300.s + Uses + At line 752 in file LPC2300.s +Comment: EMC_STA_WWR0_OFS used once +EMC_STA_WWR0_Val 0000001F + +Symbol: EMC_STA_WWR0_Val + Definitions + At line 505 in file LPC2300.s + Uses + At line 751 in file LPC2300.s +Comment: EMC_STA_WWR0_Val used once +EMC_STA_WWR1_OFS 00000234 + +Symbol: EMC_STA_WWR1_OFS + Definitions + At line 420 in file LPC2300.s + Uses + None +Comment: EMC_STA_WWR1_OFS unused +EMC_STA_WWR1_Val 0000001F + +Symbol: EMC_STA_WWR1_Val + Definitions + At line 569 in file LPC2300.s + Uses + None +Comment: EMC_STA_WWR1_Val unused +EXTMEM_BASE 80000000 + +Symbol: EXTMEM_BASE + Definitions + At line 64 in file LPC2300.s + Uses + None +Comment: EXTMEM_BASE unused +FIQ_Stack_Size 00000000 + +Symbol: FIQ_Stack_Size + Definitions + + + +ARM Macro Assembler Page 8 Alphabetic symbol ordering +Absolute symbols + + At line 85 in file LPC2300.s + Uses + At line 90 in file LPC2300.s + At line 831 in file LPC2300.s + +FLASH_BASE 00000000 + +Symbol: FLASH_BASE + Definitions + At line 62 in file LPC2300.s + Uses + None +Comment: FLASH_BASE unused +F_Bit 00000040 + +Symbol: F_Bit + Definitions + At line 56 in file LPC2300.s + Uses + At line 819 in file LPC2300.s + At line 824 in file LPC2300.s + At line 829 in file LPC2300.s + At line 834 in file LPC2300.s + At line 839 in file LPC2300.s + +Heap_Size 00000000 + +Symbol: Heap_Size + Definitions + At line 104 in file LPC2300.s + Uses + At line 108 in file LPC2300.s +Comment: Heap_Size used once +IRQ_Stack_Size 00000100 + +Symbol: IRQ_Stack_Size + Definitions + At line 86 in file LPC2300.s + Uses + At line 90 in file LPC2300.s + At line 836 in file LPC2300.s + +ISR_Stack_Size 00000108 + +Symbol: ISR_Stack_Size + Definitions + At line 90 in file LPC2300.s + Uses + At line 95 in file LPC2300.s +Comment: ISR_Stack_Size used once +I_Bit 00000080 + +Symbol: I_Bit + Definitions + At line 55 in file LPC2300.s + Uses + At line 819 in file LPC2300.s + At line 824 in file LPC2300.s + At line 829 in file LPC2300.s + + + +ARM Macro Assembler Page 9 Alphabetic symbol ordering +Absolute symbols + + At line 834 in file LPC2300.s + At line 839 in file LPC2300.s + +MAMCR_OFS 00000000 + +Symbol: MAMCR_OFS + Definitions + At line 366 in file LPC2300.s + Uses + At line 708 in file LPC2300.s +Comment: MAMCR_OFS used once +MAMCR_Val 00000002 + +Symbol: MAMCR_Val + Definitions + At line 381 in file LPC2300.s + Uses + At line 707 in file LPC2300.s +Comment: MAMCR_Val used once +MAMTIM_OFS 00000004 + +Symbol: MAMTIM_OFS + Definitions + At line 367 in file LPC2300.s + Uses + At line 706 in file LPC2300.s +Comment: MAMTIM_OFS used once +MAMTIM_Val 00000004 + +Symbol: MAMTIM_Val + Definitions + At line 382 in file LPC2300.s + Uses + At line 705 in file LPC2300.s +Comment: MAMTIM_Val used once +MAM_BASE E01FC000 + +Symbol: MAM_BASE + Definitions + At line 365 in file LPC2300.s + Uses + At line 704 in file LPC2300.s +Comment: MAM_BASE used once +MAM_SETUP 00000001 + +Symbol: MAM_SETUP + Definitions + At line 380 in file LPC2300.s + Uses + At line 703 in file LPC2300.s +Comment: MAM_SETUP used once +MEMMAP E01FC040 + +Symbol: MEMMAP + Definitions + At line 800 in file LPC2300.s + Uses + None +Comment: MEMMAP unused + + + +ARM Macro Assembler Page 10 Alphabetic symbol ordering +Absolute symbols + +Mode_ABT 00000017 + +Symbol: Mode_ABT + Definitions + At line 51 in file LPC2300.s + Uses + At line 824 in file LPC2300.s +Comment: Mode_ABT used once +Mode_FIQ 00000011 + +Symbol: Mode_FIQ + Definitions + At line 48 in file LPC2300.s + Uses + At line 829 in file LPC2300.s +Comment: Mode_FIQ used once +Mode_IRQ 00000012 + +Symbol: Mode_IRQ + Definitions + At line 49 in file LPC2300.s + Uses + At line 834 in file LPC2300.s +Comment: Mode_IRQ used once +Mode_SVC 00000013 + +Symbol: Mode_SVC + Definitions + At line 50 in file LPC2300.s + Uses + At line 839 in file LPC2300.s +Comment: Mode_SVC used once +Mode_SYS 0000001F + +Symbol: Mode_SYS + Definitions + At line 53 in file LPC2300.s + Uses + None +Comment: Mode_SYS unused +Mode_UND 0000001B + +Symbol: Mode_UND + Definitions + At line 52 in file LPC2300.s + Uses + At line 819 in file LPC2300.s +Comment: Mode_UND used once +Mode_USR 00000010 + +Symbol: Mode_USR + Definitions + At line 47 in file LPC2300.s + Uses + At line 844 in file LPC2300.s +Comment: Mode_USR used once +OSCEN 00000020 + +Symbol: OSCEN + + + +ARM Macro Assembler Page 11 Alphabetic symbol ordering +Absolute symbols + + Definitions + At line 131 in file LPC2300.s + Uses + At line 647 in file LPC2300.s +Comment: OSCEN used once +OSCRANGE 00000010 + +Symbol: OSCRANGE + Definitions + At line 130 in file LPC2300.s + Uses + None +Comment: OSCRANGE unused +OSCSTAT 00000040 + +Symbol: OSCSTAT + Definitions + At line 132 in file LPC2300.s + Uses + At line 649 in file LPC2300.s +Comment: OSCSTAT used once +PCB_BASE E002C000 + +Symbol: PCB_BASE + Definitions + At line 387 in file LPC2300.s + Uses + At line 717 in file LPC2300.s +Comment: PCB_BASE used once +PCLKSEL0_OFS 000001A8 + +Symbol: PCLKSEL0_OFS + Definitions + At line 123 in file LPC2300.s + Uses + At line 686 in file LPC2300.s +Comment: PCLKSEL0_OFS used once +PCLKSEL0_Val 00000000 + +Symbol: PCLKSEL0_Val + Definitions + At line 359 in file LPC2300.s + Uses + At line 685 in file LPC2300.s +Comment: PCLKSEL0_Val used once +PCLKSEL1_OFS 000001AC + +Symbol: PCLKSEL1_OFS + Definitions + At line 124 in file LPC2300.s + Uses + At line 688 in file LPC2300.s +Comment: PCLKSEL1_OFS used once +PCLKSEL1_Val 00000000 + +Symbol: PCLKSEL1_Val + Definitions + At line 360 in file LPC2300.s + Uses + + + +ARM Macro Assembler Page 12 Alphabetic symbol ordering +Absolute symbols + + At line 687 in file LPC2300.s +Comment: PCLKSEL1_Val used once +PCONP_OFS 000000C4 + +Symbol: PCONP_OFS + Definitions + At line 127 in file LPC2300.s + Uses + At line 697 in file LPC2300.s + At line 719 in file LPC2300.s + At line 721 in file LPC2300.s + +PCONP_Val 04280FDE + +Symbol: PCONP_Val + Definitions + At line 361 in file LPC2300.s + Uses + At line 696 in file LPC2300.s +Comment: PCONP_Val used once +PCON_OFS 000000C0 + +Symbol: PCON_OFS + Definitions + At line 126 in file LPC2300.s + Uses + None +Comment: PCON_OFS unused +PINSEL0_OFS 00000000 + +Symbol: PINSEL0_OFS + Definitions + At line 388 in file LPC2300.s + Uses + None +Comment: PINSEL0_OFS unused +PINSEL10_OFS 00000028 + +Symbol: PINSEL10_OFS + Definitions + At line 398 in file LPC2300.s + Uses + None +Comment: PINSEL10_OFS unused +PINSEL1_OFS 00000004 + +Symbol: PINSEL1_OFS + Definitions + At line 389 in file LPC2300.s + Uses + None +Comment: PINSEL1_OFS unused +PINSEL2_OFS 00000008 + +Symbol: PINSEL2_OFS + Definitions + At line 390 in file LPC2300.s + Uses + None + + + +ARM Macro Assembler Page 13 Alphabetic symbol ordering +Absolute symbols + +Comment: PINSEL2_OFS unused +PINSEL3_OFS 0000000C + +Symbol: PINSEL3_OFS + Definitions + At line 391 in file LPC2300.s + Uses + None +Comment: PINSEL3_OFS unused +PINSEL4_OFS 00000010 + +Symbol: PINSEL4_OFS + Definitions + At line 392 in file LPC2300.s + Uses + None +Comment: PINSEL4_OFS unused +PINSEL5_OFS 00000014 + +Symbol: PINSEL5_OFS + Definitions + At line 393 in file LPC2300.s + Uses + None +Comment: PINSEL5_OFS unused +PINSEL6_OFS 00000018 + +Symbol: PINSEL6_OFS + Definitions + At line 394 in file LPC2300.s + Uses + At line 730 in file LPC2300.s +Comment: PINSEL6_OFS used once +PINSEL7_OFS 0000001C + +Symbol: PINSEL7_OFS + Definitions + At line 395 in file LPC2300.s + Uses + None +Comment: PINSEL7_OFS unused +PINSEL8_OFS 00000020 + +Symbol: PINSEL8_OFS + Definitions + At line 396 in file LPC2300.s + Uses + At line 732 in file LPC2300.s +Comment: PINSEL8_OFS used once +PINSEL9_OFS 00000024 + +Symbol: PINSEL9_OFS + Definitions + At line 397 in file LPC2300.s + Uses + At line 734 in file LPC2300.s +Comment: PINSEL9_OFS used once +PLLCFG_OFS 00000084 + + + + +ARM Macro Assembler Page 14 Alphabetic symbol ordering +Absolute symbols + +Symbol: PLLCFG_OFS + Definitions + At line 116 in file LPC2300.s + Uses + At line 656 in file LPC2300.s +Comment: PLLCFG_OFS used once +PLLCFG_Val 0000000B + +Symbol: PLLCFG_Val + Definitions + At line 356 in file LPC2300.s + Uses + At line 655 in file LPC2300.s + At line 672 in file LPC2300.s + +PLLCON_OFS 00000080 + +Symbol: PLLCON_OFS + Definitions + At line 115 in file LPC2300.s + Uses + At line 660 in file LPC2300.s + At line 692 in file LPC2300.s + +PLLCON_PLLC 00000002 + +Symbol: PLLCON_PLLC + Definitions + At line 134 in file LPC2300.s + Uses + At line 691 in file LPC2300.s +Comment: PLLCON_PLLC used once +PLLCON_PLLE 00000001 + +Symbol: PLLCON_PLLE + Definitions + At line 133 in file LPC2300.s + Uses + At line 659 in file LPC2300.s + At line 691 in file LPC2300.s + +PLLFEED_OFS 0000008C + +Symbol: PLLFEED_OFS + Definitions + At line 118 in file LPC2300.s + Uses + At line 657 in file LPC2300.s + At line 658 in file LPC2300.s + At line 661 in file LPC2300.s + At line 662 in file LPC2300.s + At line 693 in file LPC2300.s + At line 694 in file LPC2300.s + +PLLSTAT_M 00007FFF + +Symbol: PLLSTAT_M + Definitions + At line 135 in file LPC2300.s + + + +ARM Macro Assembler Page 15 Alphabetic symbol ordering +Absolute symbols + + Uses + At line 670 in file LPC2300.s +Comment: PLLSTAT_M used once +PLLSTAT_N 00FF0000 + +Symbol: PLLSTAT_N + Definitions + At line 136 in file LPC2300.s + Uses + At line 670 in file LPC2300.s +Comment: PLLSTAT_N used once +PLLSTAT_OFS 00000088 + +Symbol: PLLSTAT_OFS + Definitions + At line 117 in file LPC2300.s + Uses + At line 665 in file LPC2300.s + At line 669 in file LPC2300.s + +PLLSTAT_PLOCK 04000000 + +Symbol: PLLSTAT_PLOCK + Definitions + At line 137 in file LPC2300.s + Uses + At line 666 in file LPC2300.s +Comment: PLLSTAT_PLOCK used once +RAM_BASE 40000000 + +Symbol: RAM_BASE + Definitions + At line 63 in file LPC2300.s + Uses + None +Comment: RAM_BASE unused +SCB_BASE E01FC000 + +Symbol: SCB_BASE + Definitions + At line 114 in file LPC2300.s + Uses + At line 639 in file LPC2300.s + At line 716 in file LPC2300.s + +SCS_OFS 000001A0 + +Symbol: SCS_OFS + Definitions + At line 122 in file LPC2300.s + Uses + At line 645 in file LPC2300.s + At line 648 in file LPC2300.s + +SCS_Val 00000020 + +Symbol: SCS_Val + Definitions + At line 354 in file LPC2300.s + + + +ARM Macro Assembler Page 16 Alphabetic symbol ordering +Absolute symbols + + Uses + At line 644 in file LPC2300.s + At line 647 in file LPC2300.s + +STA_MEM0_BASE 80000000 + +Symbol: STA_MEM0_BASE + Definitions + At line 67 in file LPC2300.s + Uses + None +Comment: STA_MEM0_BASE unused +STA_MEM1_BASE 81000000 + +Symbol: STA_MEM1_BASE + Definitions + At line 68 in file LPC2300.s + Uses + None +Comment: STA_MEM1_BASE unused +SVC_Stack_Size 00000008 + +Symbol: SVC_Stack_Size + Definitions + At line 83 in file LPC2300.s + Uses + At line 90 in file LPC2300.s + At line 841 in file LPC2300.s + +UND_Stack_Size 00000000 + +Symbol: UND_Stack_Size + Definitions + At line 82 in file LPC2300.s + Uses + At line 90 in file LPC2300.s + At line 821 in file LPC2300.s + +USBCLKCFG_OFS 00000108 + +Symbol: USBCLKCFG_OFS + Definitions + At line 120 in file LPC2300.s + Uses + At line 682 in file LPC2300.s +Comment: USBCLKCFG_OFS used once +USBCLKCFG_Val 00000005 + +Symbol: USBCLKCFG_Val + Definitions + At line 358 in file LPC2300.s + Uses + At line 681 in file LPC2300.s +Comment: USBCLKCFG_Val used once +USR_Stack_Size 00000400 + +Symbol: USR_Stack_Size + Definitions + At line 87 in file LPC2300.s + + + +ARM Macro Assembler Page 17 Alphabetic symbol ordering +Absolute symbols + + Uses + At line 94 in file LPC2300.s +Comment: USR_Stack_Size used once +115 symbols + + + +ARM Macro Assembler Page 1 Alphabetic symbol ordering +External symbols + +__main 00000000 + +Symbol: __main + Definitions + At line 859 in file LPC2300.s + Uses + At line 860 in file LPC2300.s +Comment: __main used once +1 symbol +489 symbols in table diff --git a/LPC2300.o b/LPC2300.o new file mode 100644 index 0000000000000000000000000000000000000000..83ffaeccd81ad777c05931d1d03edaf335033f3c GIT binary patch literal 2960 zcmb7G&2Jk;6o2b=61PbkCk<+$QnR$1G)RfDlhBrmO5QkzSaFDnleAJ@xpus1R`r*> zPFjT229!z&acJ+L_=tc5e?kvE^w2~3kPt#bZlb-Q9@-Ni70mC=uI(i%MLc`v_r7N4 z&Fs9l``i3NM3N+Gl0-ggOGN&C!qPD*V1)eCOCIn(v?EWpt-Xz?_DFd;DD+~;3%b7= zjbESFK9jbsFa5RMC8f5j1Z%ss(56)j-L}HPLp#qJjr|gIJLw`3UhO;4*GzDkb4~TJ2(LBh5iU|YtJ0VFJYdYWazx0lHX|vv-yPo>e z644TfXkTJ;zMt;?(7s6u?t$kpk;-_0XoT?~(I{gtQIOG3bcV5y=q<*6_~Wv94#A)C zWuhwdG8&OriYFrD6Tx7>ByC|%(M(e>Wb=AuRCyy1oKP-KtsD8Aa_Y@X6git(GWCj? zitEMFMkzI2T3IjX#j2T_)s4KezHFFAsW_QR=+(D%J*QX10?*pf6Lmu686djCxS!~% zgC#~J!+oGk3VI|{=K=K1q>`u|C(J}0oIfQ0tblmro4A@{hmlA3`XIWDH^O9-|KO zIY1<-Pm+B@zN5ZAsbBKrL_7hKg#hDo=rz{?dg*Cn*d_C6oq(*g#>vF?uuEop`ytp* zoy`iGEFxlw=sKEA9fIfXfsniC7{)hAM%6mv$fI}wGJgGz?88tQRqv~&v%sf~&w*hy zFPaA)cYxC_c?gRDA-KGk<#fx#wY@eqER(6`LtQ41>MxE>6uJ1htz>- zP0y6md81%dn?g2Y>fn)M>5N$j_zp5GAXbm88H;g&DjFLoQARG46ICgNrBe&b6QNY>-N*}EB6G=DG8HSX)hO!cj;GVnWi77Y2s9;he6MXT7Fn2&$EIBNykS;bJIR|>1@}uE zLYL7qS%ajbU^@`~>BZ@}71n#;Wj?Er1`#$=> z(Gh(kI4+P)5;adE55KrqWaF*~ad+i|sC|or)LjloLp6ib)~`K3LmXoj)Bwc4?y?;mGCJCR+`q zSPs6mfo9Yy(FB~DVn>q^1I0ETx2=L3vFGfvfqTB>gJNKr#napg>gIWQvkuAh4s)$F P_ycN literal 0 HcmV?d00001 diff --git a/LPC2300.s b/LPC2300.s new file mode 100644 index 0000000..37a4b79 --- /dev/null +++ b/LPC2300.s @@ -0,0 +1,885 @@ +;/*****************************************************************************/ +;/* LPC2300.S: Startup file for Philips LPC2300 device series */ +;/*****************************************************************************/ +;/* <<< Use Configuration Wizard in Context Menu >>> */ +;/*****************************************************************************/ +;/* This file is part of the uVision/ARM development tools. */ +;/* Copyright (c) 2007 Keil - An ARM Company. All rights reserved. */ +;/* This software may only be used under the terms of a valid, current, */ +;/* end user licence from KEIL for a compatible version of KEIL software */ +;/* development tools. Nothing else gives you the right to use this software. */ +;/*****************************************************************************/ + + +;/* +; * The LPC2300.S code is executed after CPU Reset. This file may be +; * translated with the following SET symbols. In uVision these SET +; * symbols are entered under Options - ASM - Define. +; * +; * NO_CLOCK_SETUP: when set the startup code will not initialize Clock +; * (used mostly when clock is already initialized from script .ini +; * file). +; * +; * NO_EMC_SETUP: when set the startup code will not initializes External +; * Memory Controller (used mostly when external memory is already initialized +; * and loaded from script .ini file). +; * +; * RAM_INTVEC: when set the startup code copies exception vectors +; * from on-chip Flash to on-chip RAM. +; * +; * REMAP: when set the startup code initializes the register MEMMAP +; * which overwrites the settings of the CPU configuration pins. The +; * startup and interrupt vectors are remapped from: +; * 0x00000000 default setting (not remapped) +; * 0x40000000 when RAM_MODE is used +; * 0x80000000 when EXTMEM_MODE is used +; * +; * EXTMEM_MODE: when set the device is configured for code execution +; * from external memory starting at address 0x80000000. +; * +; * RAM_MODE: when set the device is configured for code execution +; * from on-chip RAM starting at address 0x40000000. +; */ + + +; Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs + +Mode_USR EQU 0x10 +Mode_FIQ EQU 0x11 +Mode_IRQ EQU 0x12 +Mode_SVC EQU 0x13 +Mode_ABT EQU 0x17 +Mode_UND EQU 0x1B +Mode_SYS EQU 0x1F + +I_Bit EQU 0x80 ; when I bit is set, IRQ is disabled +F_Bit EQU 0x40 ; when F bit is set, FIQ is disabled + + +;----------------------- Memory Definitions ------------------------------------ + +; Internal Memory Base Addresses +FLASH_BASE EQU 0x00000000 +RAM_BASE EQU 0x40000000 +EXTMEM_BASE EQU 0x80000000 + +; External Memory Base Addresses +STA_MEM0_BASE EQU 0x80000000 +STA_MEM1_BASE EQU 0x81000000 + + +;----------------------- Stack and Heap Definitions ---------------------------- + +;// Stack Configuration (Stack Sizes in Bytes) +;// Undefined Mode <0x0-0xFFFFFFFF:8> +;// Supervisor Mode <0x0-0xFFFFFFFF:8> +;// Abort Mode <0x0-0xFFFFFFFF:8> +;// Fast Interrupt Mode <0x0-0xFFFFFFFF:8> +;// Interrupt Mode <0x0-0xFFFFFFFF:8> +;// User/System Mode <0x0-0xFFFFFFFF:8> +;// + +UND_Stack_Size EQU 0x00000000 +SVC_Stack_Size EQU 0x00000008 +ABT_Stack_Size EQU 0x00000000 +FIQ_Stack_Size EQU 0x00000000 +IRQ_Stack_Size EQU 0x00000100 +USR_Stack_Size EQU 0x00000400 + +ISR_Stack_Size EQU (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \ + FIQ_Stack_Size + IRQ_Stack_Size) + + AREA STACK, NOINIT, READWRITE, ALIGN=3 + +Stack_Mem SPACE USR_Stack_Size +__initial_sp SPACE ISR_Stack_Size + +Stack_Top + + +;// Heap Configuration +;// Heap Size (in Bytes) <0x0-0xFFFFFFFF> +;// + +Heap_Size EQU 0x00000000 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + +;----------------------- System Control Block (SCB) Module Definitions --------- + +SCB_BASE EQU 0xE01FC000 ; SCB Base Address +PLLCON_OFS EQU 0x80 ; PLL Control Offset +PLLCFG_OFS EQU 0x84 ; PLL Configuration Offset +PLLSTAT_OFS EQU 0x88 ; PLL Status Offset +PLLFEED_OFS EQU 0x8C ; PLL Feed Offset +CCLKCFG_OFS EQU 0x104 ; CPU Clock Divider Reg Offset +USBCLKCFG_OFS EQU 0x108 ; USB Clock Divider Reg Offset +CLKSRCSEL_OFS EQU 0x10C ; Clock Source Select Reg Offset +SCS_OFS EQU 0x1A0 ; System Control and Status Reg Offset +PCLKSEL0_OFS EQU 0x1A8 ; Peripheral Clock Select Reg 0 Offset +PCLKSEL1_OFS EQU 0x1AC ; Peripheral Clock Select Reg 1 Offset + +PCON_OFS EQU 0x0C0 ; Power Mode Control Reg Offset +PCONP_OFS EQU 0x0C4 ; Power Control for Periphs Reg Offset + +; Constants +OSCRANGE EQU (1<<4) ; Oscillator Range Select +OSCEN EQU (1<<5) ; Main oscillator Enable +OSCSTAT EQU (1<<6) ; Main Oscillator Status +PLLCON_PLLE EQU (1<<0) ; PLL Enable +PLLCON_PLLC EQU (1<<1) ; PLL Connect +PLLSTAT_M EQU (0x7FFF<<0) ; PLL M Value +PLLSTAT_N EQU (0xFF<<16) ; PLL N Value +PLLSTAT_PLOCK EQU (1<<26) ; PLL Lock Status + +;// Clock Setup +;// System Controls and Status Register (SCS) +;// OSCRANGE: Main Oscillator Range Select +;// <0=> 1 MHz to 20 MHz +;// <1=> 15 MHz to 24 MHz +;// OSCEN: Main Oscillator Enable +;// +;// +;// +;// Clock Source Select Register (CLKSRCSEL) +;// CLKSRC: PLL Clock Source Selection +;// <0=> Internal RC oscillator +;// <1=> Main oscillator +;// <1=> RTC oscillator +;// +;// +;// PLL Configuration Register (PLLCFG) +;// PLL_clk = (2* M * PLL_clk_src) / N +;// MSEL: PLL Multiplier Selection +;// <1-32768><#-1> +;// M Value +;// NSEL: PLL Divider Selection +;// <1-256><#-1> +;// N Value +;// +;// +;// CPU Clock Configuration Register (CCLKCFG) +;// CCLKSEL: Divide Value for CPU Clock from PLL +;// <1-256><#-1> +;// +;// +;// USB Clock Configuration Register (USBCLKCFG) +;// USBSEL: Divide Value for USB Clock from PLL +;// <1-16><#-1> +;// +;// +;// Peripheral Clock Selection Register 0 (PCLKSEL0) +;// PCLK_WDT: Peripheral Clock Selection for WDT +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_TIMER0: Peripheral Clock Selection for TIMER0 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_TIMER1: Peripheral Clock Selection for TIMER1 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_UART0: Peripheral Clock Selection for UART0 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_UART1: Peripheral Clock Selection for UART1 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_PWM0: Peripheral Clock Selection for PWM0 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_PWM1: Peripheral Clock Selection for PWM1 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_I2C0: Peripheral Clock Selection for I2C0 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_SPI: Peripheral Clock Selection for SPI +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_RTC: Peripheral Clock Selection for RTC +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_SSP1: Peripheral Clock Selection for SSP1 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_DAC: Peripheral Clock Selection for DAC +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_ADC: Peripheral Clock Selection for ADC +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_CAN1: Peripheral Clock Selection for CAN1 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 6 +;// PCLK_CAN2: Peripheral Clock Selection for CAN2 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 6 +;// PCLK_ACF: Peripheral Clock Selection for ACF +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 6 +;// +;// +;// Peripheral Clock Selection Register 1 (PCLKSEL1) +;// PCLK_BAT_RAM: Peripheral Clock Selection for the Battery Supported RAM +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_GPIO: Peripheral Clock Selection for GPIOs +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_PCB: Peripheral Clock Selection for Pin Connect Block +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_I2C1: Peripheral Clock Selection for I2C1 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_SSP0: Peripheral Clock Selection for SSP0 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_TIMER2: Peripheral Clock Selection for TIMER2 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_TIMER3: Peripheral Clock Selection for TIMER3 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_UART2: Peripheral Clock Selection for UART2 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_UART3: Peripheral Clock Selection for UART3 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_I2C2: Peripheral Clock Selection for I2C2 +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_I2S: Peripheral Clock Selection for I2S +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_MCI: Peripheral Clock Selection for MCI +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// PCLK_SYSCON: Peripheral Clock Selection for System Control Block +;// <0=> Pclk = Cclk / 4 +;// <1=> Pclk = Cclk +;// <2=> Pclk = Cclk / 2 +;// <3=> Pclk = Hclk / 8 +;// +;// Power Control for Peripherals Register (PCONP) +;// PCUSB: USB interface power/clock enable +;// PCENET: Ethernet block power/clock enable +;// PCGPDMA: GP DMA function power/clock enable +;// PCSDC: SD card interface power/clock enable +;// PCI2S: I2S interface power/clock enable +;// PCI2C2: I2C interface 2 power/clock enable +;// PCUART3: UART 3 power/clock enable +;// PCUART2: UART 2 power/clock enable +;// PCTIM3: Timer 3 power/clock enable +;// PCTIM2: Timer 2 power/clock enable +;// PCSSP0: SSP interface 0 power/clock enable +;// PCI2C1: I2C interface 1 power/clock enable +;// PCAN2: CAN controller 2 power/clock enable +;// PCAN1: CAN controller 1 power/clock enable +;// PCAD: A/D converter power/clock enable +;// PCEMC: External memory controller power/clock enable +;// PCSSP1: SSP interface 1 power/clock enable +;// PCRTC: RTC power/clock enable +;// PCSPI: SPI interface power/clock enable +;// PCI2C0: I2C interface 0 power/clock enable +;// PCPWM1: PWM 1 power/clock enable +;// PCUART1: UART 1 power/clock enable +;// PCUART0: UART 0 power/clock enable +;// PCTIM1: Timer/Counter 1 power/clock enable +;// PCTIM0: Timer/Counter 0 power/clock enable +;// +;// +CLOCK_SETUP EQU 1 +SCS_Val EQU 0x00000020 +CLKSRCSEL_Val EQU 0x00000001 +PLLCFG_Val EQU 0x0000000B +CCLKCFG_Val EQU 0x00000005 +USBCLKCFG_Val EQU 0x00000005 +PCLKSEL0_Val EQU 0x00000000 +PCLKSEL1_Val EQU 0x00000000 +PCONP_Val EQU 0x04280FDE + +;----------------------- Memory Accelerator Module (MAM) Definitions ----------- + +MAM_BASE EQU 0xE01FC000 ; MAM Base Address +MAMCR_OFS EQU 0x00 ; MAM Control Offset +MAMTIM_OFS EQU 0x04 ; MAM Timing Offset + +;// MAM Setup +;// MAM Control +;// <0=> Disabled +;// <1=> Partially Enabled +;// <2=> Fully Enabled +;// Mode +;// MAM Timing +;// <0=> Reserved <1=> 1 <2=> 2 <3=> 3 +;// <4=> 4 <5=> 5 <6=> 6 <7=> 7 +;// Fetch Cycles +;// +MAM_SETUP EQU 1 +MAMCR_Val EQU 0x00000002 +MAMTIM_Val EQU 0x00000004 + + +;----------------------- Pin Connect Block Definitions ------------------------- + +PCB_BASE EQU 0xE002C000 ; PCB Base Address +PINSEL0_OFS EQU 0x00 ; PINSEL0 Address Offset +PINSEL1_OFS EQU 0x04 ; PINSEL1 Address Offset +PINSEL2_OFS EQU 0x08 ; PINSEL2 Address Offset +PINSEL3_OFS EQU 0x0C ; PINSEL3 Address Offset +PINSEL4_OFS EQU 0x10 ; PINSEL4 Address Offset +PINSEL5_OFS EQU 0x14 ; PINSEL5 Address Offset +PINSEL6_OFS EQU 0x18 ; PINSEL6 Address Offset +PINSEL7_OFS EQU 0x1C ; PINSEL7 Address Offset +PINSEL8_OFS EQU 0x20 ; PINSEL8 Address Offset +PINSEL9_OFS EQU 0x24 ; PINSEL9 Address Offset +PINSEL10_OFS EQU 0x28 ; PINSEL10 Address Offset + + +;----------------------- External Memory Controller (EMC) Definitons ----------- + +EMC_BASE EQU 0xFFE08000 ; EMC Base Address + +EMC_CTRL_OFS EQU 0x000 ; EMCControl +EMC_STAT_OFS EQU 0x004 ; EMCStatus +EMC_CONFIG_OFS EQU 0x008 ; EMCConfig +EMC_STA_CFG0_OFS EQU 0x200 ; EMCStaticConfig0 +EMC_STA_WWEN0_OFS EQU 0x204 ; EMCStaticWaitWen0 +EMC_STA_WOEN0_OFS EQU 0x208 ; EMCStaticWaitOen0 +EMC_STA_WRD0_OFS EQU 0x20C ; EMCStaticWaitRd0 +EMC_STA_WPAGE0_OFS EQU 0x210 ; EMCStaticWaitPage0 +EMC_STA_WWR0_OFS EQU 0x214 ; EMCStaticWaitWr0 +EMC_STA_WTURN0_OFS EQU 0x218 ; EMCStaticWaitTurn0 +EMC_STA_CFG1_OFS EQU 0x220 ; EMCStaticConfig1 +EMC_STA_WWEN1_OFS EQU 0x224 ; EMCStaticWaitWen1 +EMC_STA_WOEN1_OFS EQU 0x228 ; EMCStaticWaitOen1 +EMC_STA_WRD1_OFS EQU 0x22C ; EMCStaticWaitRd1 +EMC_STA_WPAGE1_OFS EQU 0x230 ; EMCStaticWaitPage1 +EMC_STA_WWR1_OFS EQU 0x234 ; EMCStaticWaitWr1 +EMC_STA_WTURN1_OFS EQU 0x238 ; EMCStaticWaitTurn1 +EMC_STA_EXT_W_OFS EQU 0x880 ; EMCStaticExtendedWait + +BUFEN_Const EQU (1 << 19) ; Buffer enable bit +EMC_PCONP_Const EQU (1 << 11) ; PCONP val to enable power for EMC + +; External Memory Pins definitions +; pin functions for external memory interfacing +EMC_PINSEL6_Val EQU 0x00005555 ; D0 .. D7 +EMC_PINSEL8_Val EQU 0x55555555 ; A0 .. A15 +EMC_PINSEL9_Val EQU 0x50090000; ; !OE, !WE (BLS0 because of errata), !CS0, !CS1 + +;// External Memory Controller Setup (EMC) --------------------------------- +;// External Memory Controller Setup (EMC) +EMC_SETUP EQU 1 + +;// EMC Control Register (EMCControl) +;// Controls operation of the memory controller +;// L: Low-power mode enable +;// M: Address mirror enable +;// E: EMC enable +;// +EMC_CTRL_Val EQU 0x00000001 + +;// EMC Configuration Register (EMCConfig) +;// Endian mode +;// <0=> Little-endian +;// <1=> Big-endian +;// +EMC_CONFIG_Val EQU 0x00000000 + +;// Configure External Bus Behaviour for Static CS0 Area ----------------- +;// Configure External Bus Behaviour for Static CS0 Area +EMC_STACS0_SETUP EQU 1 + +;// Static Memory Configuration Register (EMCStaticConfig0) +;// Defines the configuration information for the static memory CS0 +;// WP: Write protect +;// B: Write buffer enable +;// EW: Extended wait enable +;// PC: Chip select polarity +;// <0=> Active LOW chip select +;// <1=> Active HIGH chip select +;// PM: Async page mode enable +;// MW: Memory width +;// <0=> 8 bit +;// <1=> 16 bit +;// <2=> 32 bit +;// +EMC_STA_CFG0_Val EQU 0x00000000 + +;// Static Memory Write Enable Delay Register (EMCStaticWaitWen0) +;// Selects the delay from CS0 to write enable +;// WAITWEN: Wait write enable <1-16> <#-1> +;// The delay is in CCLK cycles +;// +EMC_STA_WWEN0_Val EQU 0x00000002 + +;// Static Memory Output Enable Delay register (EMCStaticWaitOen0) +;// Selects the delay from CS0 or address change, whichever is later, to output enable +;// WAITOEN: Wait output enable <0-15> +;// The delay is in CCLK cycles +;// +EMC_STA_WOEN0_Val EQU 0x00000002 + +;// Static Memory Read Delay Register (EMCStaticWaitRd0) +;// Selects the delay from CS0 to a read access +;// WAITRD: Non-page mode read wait states or asynchronous page mode read first access wait states <1-32> <#-1> +;// The delay is in CCLK cycles +;// +EMC_STA_WRD0_Val EQU 0x0000001F + +;// Static Memory Page Mode Read Delay Register (EMCStaticWaitPage0) +;// Selects the delay for asynchronous page mode sequential accesses for CS0 +;// WAITPAGE: Asynchronous page mode read after the first read wait states <1-32> <#-1> +;// The delay is in CCLK cycles +;// +EMC_STA_WPAGE0_Val EQU 0x0000001F + +;// Static Memory Write Delay Register (EMCStaticWaitWr0) +;// Selects the delay from CS0 to a write access +;// WAITWR: Write wait states <2-33> <#-2> +;// The delay is in CCLK cycles +;// +EMC_STA_WWR0_Val EQU 0x0000001F + +;// Static Memory Turn Round Delay Register (EMCStaticWaitTurn0) +;// Selects the number of bus turnaround cycles for CS0 +;// WAITTURN: Bus turnaround cycles <1-16> <#-1> +;// The delay is in CCLK cycles +;// +EMC_STA_WTURN0_Val EQU 0x0000000F + +;// End of Static Setup for Static CS0 Area + +;// Configure External Bus Behaviour for Static CS1 Area ----------------- +;// Configure External Bus Behaviour for Static CS1 Area +EMC_STACS1_SETUP EQU 0 + +;// Static Memory Configuration Register (EMCStaticConfig1) +;// Defines the configuration information for the static memory CS1 +;// WP: Write protect +;// B: Write buffer enable +;// EW: Extended wait enable +;// PC: Chip select polarity +;// <0=> Active LOW chip select +;// <1=> Active HIGH chip select +;// PM: Async page mode enable +;// MW: Memory width +;// <0=> 8 bit +;// <1=> 16 bit +;// <2=> 32 bit +;// +EMC_STA_CFG1_Val EQU 0x00000000 + +;// Static Memory Write Enable Delay Register (EMCStaticWaitWen1) +;// Selects the delay from CS1 to write enable +;// WAITWEN: Wait write enable <1-16> <#-1> +;// The delay is in CCLK cycles +;// +EMC_STA_WWEN1_Val EQU 0x00000000 + +;// Static Memory Output Enable Delay register (EMCStaticWaitOen1) +;// Selects the delay from CS1 or address change, whichever is later, to output enable +;// WAITOEN: Wait output enable <0-15> +;// The delay is in CCLK cycles +;// +EMC_STA_WOEN1_Val EQU 0x00000000 + +;// Static Memory Read Delay Register (EMCStaticWaitRd1) +;// Selects the delay from CS1 to a read access +;// WAITRD: Non-page mode read wait states or asynchronous page mode read first access wait states <1-32> <#-1> +;// The delay is in CCLK cycles +;// +EMC_STA_WRD1_Val EQU 0x0000001F + +;// Static Memory Page Mode Read Delay Register (EMCStaticWaitPage0) +;// Selects the delay for asynchronous page mode sequential accesses for CS1 +;// WAITPAGE: Asynchronous page mode read after the first read wait states <1-32> <#-1> +;// The delay is in CCLK cycles +;// +EMC_STA_WPAGE1_Val EQU 0x0000001F + +;// Static Memory Write Delay Register (EMCStaticWaitWr1) +;// Selects the delay from CS1 to a write access +;// WAITWR: Write wait states <2-33> <#-2> +;// The delay is in CCLK cycles +;// +EMC_STA_WWR1_Val EQU 0x0000001F + +;// Static Memory Turn Round Delay Register (EMCStaticWaitTurn1) +;// Selects the number of bus turnaround cycles for CS1 +;// WAITTURN: Bus turnaround cycles <1-16> <#-1> +;// The delay is in CCLK cycles +;// +EMC_STA_WTURN1_Val EQU 0x0000000F + +;// End of Static Setup for Static CS1 Area + +;// Static Memory Extended Wait Register (EMCStaticExtendedWait) +;// Time long static memory read and write transfers +;// EXTENDEDWAIT: Extended wait time out <1-64><#-1> +;// The delay is in (16 * CCLK) cycles +;// +EMC_STA_EXT_W_Val EQU 0x00000000 + +;// End of EMC Setup + + +; Area Definition and Entry Point +; Startup Code must be linked first at Address at which it expects to run. + + AREA RESET, CODE, READONLY + ARM + + +; Exception Vectors +; Mapped to Address 0. +; Absolute addressing mode must be used. +; Dummy Handlers are implemented as infinite loops which can be modified. + +Vectors LDR PC, Reset_Addr + LDR PC, Undef_Addr + LDR PC, SWI_Addr + LDR PC, PAbt_Addr + LDR PC, DAbt_Addr + NOP ; Reserved Vector +; LDR PC, IRQ_Addr + LDR PC, [PC, #-0x0120] ; Vector from VicVectAddr + LDR PC, FIQ_Addr + +Reset_Addr DCD Reset_Handler +Undef_Addr DCD Undef_Handler +SWI_Addr DCD SWI_Handler +PAbt_Addr DCD PAbt_Handler +DAbt_Addr DCD DAbt_Handler + DCD 0 ; Reserved Address +IRQ_Addr DCD IRQ_Handler +FIQ_Addr DCD FIQ_Handler + +Undef_Handler B Undef_Handler +SWI_Handler B SWI_Handler +PAbt_Handler B PAbt_Handler +DAbt_Handler B DAbt_Handler +IRQ_Handler B IRQ_Handler +FIQ_Handler B FIQ_Handler + + +; Reset Handler + + EXPORT Reset_Handler +Reset_Handler + + + +; Clock Setup ------------------------------------------------------------------ + + IF (:LNOT:(:DEF:NO_CLOCK_SETUP)):LAND:(CLOCK_SETUP != 0) + LDR R0, =SCB_BASE + MOV R1, #0xAA + MOV R2, #0x55 + +; Configure and Enable PLL + LDR R3, =SCS_Val ; Enable main oscillator + STR R3, [R0, #SCS_OFS] + + IF (SCS_Val:AND:OSCEN) != 0 +OSC_Loop LDR R3, [R0, #SCS_OFS] ; Wait for main osc stabilize + ANDS R3, R3, #OSCSTAT + BEQ OSC_Loop + ENDIF + + LDR R3, =CLKSRCSEL_Val ; Select PLL source clock + STR R3, [R0, #CLKSRCSEL_OFS] + LDR R3, =PLLCFG_Val + STR R3, [R0, #PLLCFG_OFS] + STR R1, [R0, #PLLFEED_OFS] + STR R2, [R0, #PLLFEED_OFS] + MOV R3, #PLLCON_PLLE + STR R3, [R0, #PLLCON_OFS] + STR R1, [R0, #PLLFEED_OFS] + STR R2, [R0, #PLLFEED_OFS] + +; Wait until PLL Locked +PLL_Loop LDR R3, [R0, #PLLSTAT_OFS] + ANDS R3, R3, #PLLSTAT_PLOCK + BEQ PLL_Loop + +M_N_Lock LDR R3, [R0, #PLLSTAT_OFS] + LDR R4, =(PLLSTAT_M:OR:PLLSTAT_N) + AND R3, R3, R4 + LDR R4, =PLLCFG_Val + EORS R3, R3, R4 + BNE M_N_Lock + +; Setup CPU clock divider + MOV R3, #CCLKCFG_Val + STR R3, [R0, #CCLKCFG_OFS] + +; Setup USB clock divider + LDR R3, =USBCLKCFG_Val + STR R3, [R0, #USBCLKCFG_OFS] + +; Setup Peripheral Clock + LDR R3, =PCLKSEL0_Val + STR R3, [R0, #PCLKSEL0_OFS] + LDR R3, =PCLKSEL1_Val + STR R3, [R0, #PCLKSEL1_OFS] + +; Switch to PLL Clock + MOV R3, #(PLLCON_PLLE:OR:PLLCON_PLLC) + STR R3, [R0, #PLLCON_OFS] + STR R1, [R0, #PLLFEED_OFS] + STR R2, [R0, #PLLFEED_OFS] + + LDR R4, =PCONP_Val ; Enable Peripheral Clocks + STR R4, [R0, #PCONP_OFS] + ENDIF ; CLOCK_SETUP + + +; Setup Memory Accelerator Module ---------------------------------------------- + + IF MAM_SETUP != 0 + LDR R0, =MAM_BASE + MOV R1, #MAMTIM_Val + STR R1, [R0, #MAMTIM_OFS] + MOV R1, #MAMCR_Val + STR R1, [R0, #MAMCR_OFS] + ENDIF ; MAM_SETUP + + +; Setup External Memory Controller --------------------------------------------- + + IF (:DEF:NO_EMC_SETUP):LOR:(EMC_SETUP != 0) + LDR R0, =EMC_BASE + LDR R1, =SCB_BASE + LDR R2, =PCB_BASE + + LDR R4, [R1, #PCONP_OFS] + ORR R4, R4, #EMC_PCONP_Const ; Enable EMC clock + STR R4, [R1, #PCONP_OFS] + + LDR R4, =EMC_CTRL_Val + STR R4, [R0, #EMC_CTRL_OFS] + LDR R4, =EMC_CONFIG_Val + STR R4, [R0, #EMC_CONFIG_OFS] + +; Setup pin functions for External Bus functionality + LDR R4, =EMC_PINSEL6_Val + STR R4, [R2, #PINSEL6_OFS] + LDR R4, =EMC_PINSEL8_Val + STR R4, [R2, #PINSEL8_OFS] + LDR R4, =EMC_PINSEL9_Val + STR R4, [R2, #PINSEL9_OFS] + + LDR R6, =1200000 ; Number of cycles to delay +Wait_0 SUBS R6, R6, #1 ; Delay ~100 ms @ proc clk 48 MHz + BNE Wait_0 + + IF (EMC_STACS0_SETUP != 0) + LDR R4, =EMC_STA_CFG0_Val + STR R4, [R0, #EMC_STA_CFG0_OFS] + LDR R4, =EMC_STA_WWEN0_Val + STR R4, [R0, #EMC_STA_WWEN0_OFS] + LDR R4, =EMC_STA_WOEN0_Val + STR R4, [R0, #EMC_STA_WOEN0_OFS] + LDR R4, =EMC_STA_WRD0_Val + STR R4, [R0, #EMC_STA_WRD0_OFS] + LDR R4, =EMC_STA_WPAGE0_Val + STR R4, [R0, #EMC_STA_WPAGE0_OFS] + LDR R4, =EMC_STA_WWR0_Val + STR R4, [R0, #EMC_STA_WWR0_OFS] + LDR R4, =EMC_STA_WTURN0_Val + STR R4, [R0, #EMC_STA_WTURN0_OFS] + ENDIF + + IF (EMC_STACS1_SETUP != 0) + LDR R4, =EMC_STA_CFG1_Val + STR R4, [R0, #EMC_STA_CFG1_OFS] + LDR R4, =EMC_STA_WWEN1_Val + STR R4, [R0, #EMC_STA_WWEN1_OFS] + LDR R4, =EMC_STA_WOEN1_Val + STR R4, [R0, #EMC_STA_WOEN1_OFS] + LDR R4, =EMC_STA_WRD1_Val + STR R4, [R0, #EMC_STA_WRD1_OFS] + LDR R4, =EMC_STA_WPAGE1_Val + STR R4, [R0, #EMC_STA_WPAGE1_OFS] + LDR R4, =EMC_STA_WWR1_Val + STR R4, [R0, #EMC_STA_WWR1_OFS] + LDR R4, =EMC_STA_WTURN1_Val + STR R4, [R0, #EMC_STA_WTURN1_OFS] + ENDIF + + LDR R6, =120000 ; Number of cycles to delay +Wait_1 SUBS R6, R6, #1 ; Delay ~10 ms @ proc clk 48 MHz + BNE Wait_1 + + LDR R4, =EMC_STA_EXT_W_Val + LDR R5, =EMC_STA_EXT_W_OFS + ADD R5, R5, R0 + STR R4, [R5, #0] + + ENDIF ; EMC_SETUP + + +; Copy Exception Vectors to Internal RAM --------------------------------------- + + IF :DEF:RAM_INTVEC + ADR R8, Vectors ; Source + LDR R9, =RAM_BASE ; Destination + LDMIA R8!, {R0-R7} ; Load Vectors + STMIA R9!, {R0-R7} ; Store Vectors + LDMIA R8!, {R0-R7} ; Load Handler Addresses + STMIA R9!, {R0-R7} ; Store Handler Addresses + ENDIF + + +; Memory Mapping (when Interrupt Vectors are in RAM) --------------------------- + +MEMMAP EQU 0xE01FC040 ; Memory Mapping Control + IF :DEF:REMAP + LDR R0, =MEMMAP + IF :DEF:EXTMEM_MODE + MOV R1, #3 + ELIF :DEF:RAM_MODE + MOV R1, #2 + ELSE + MOV R1, #1 + ENDIF + STR R1, [R0] + ENDIF + + +; Setup Stack for each mode ---------------------------------------------------- + + LDR R0, =Stack_Top + +; Enter Undefined Instruction Mode and set its Stack Pointer + MSR CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit + MOV SP, R0 + SUB R0, R0, #UND_Stack_Size + +; Enter Abort Mode and set its Stack Pointer + MSR CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit + MOV SP, R0 + SUB R0, R0, #ABT_Stack_Size + +; Enter FIQ Mode and set its Stack Pointer + MSR CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit + MOV SP, R0 + SUB R0, R0, #FIQ_Stack_Size + +; Enter IRQ Mode and set its Stack Pointer + MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit + MOV SP, R0 + SUB R0, R0, #IRQ_Stack_Size + +; Enter Supervisor Mode and set its Stack Pointer + MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit + MOV SP, R0 + SUB R0, R0, #SVC_Stack_Size + +; Enter User Mode and set its Stack Pointer + MSR CPSR_c, #Mode_USR + IF :DEF:__MICROLIB + + EXPORT __initial_sp + + ELSE + + MOV SP, R0 + SUB SL, SP, #USR_Stack_Size + + ENDIF + + +; Enter the C code ------------------------------------------------------------- + + IMPORT __main + LDR R0, =__main + BX R0 + + + IF :DEF:__MICROLIB + + EXPORT __heap_base + EXPORT __heap_limit + + ELSE +; User Initial Stack & Heap + AREA |.text|, CODE, READONLY + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + USR_Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDIF + + + END diff --git a/PN532_SPI.cpp b/PN532_SPI.cpp new file mode 100644 index 0000000..1b3468c --- /dev/null +++ b/PN532_SPI.cpp @@ -0,0 +1,210 @@ + +#include "PN532_SPI.h" +#include "PN532_debug.h" +#include "Arduino.h" + +#define STATUS_READ 2 +#define DATA_WRITE 1 +#define DATA_READ 3 + +PN532_SPI::PN532_SPI(SPIClass &spi, uint8_t ss) +{ + command = 0; + _spi = &spi; + _ss = ss; +} + +void PN532_SPI::begin() +{ + pinMode(_ss, OUTPUT); + + _spi->begin(); + _spi->setDataMode(SPI_MODE0); // PN532 only supports mode0 + _spi->setBitOrder(LSBFIRST); +#ifndef __SAM3X8E__ + _spi->setClockDivider(SPI_CLOCK_DIV8); // set clock 2MHz(max: 5MHz) +#else + /** DUE spi library does not support SPI_CLOCK_DIV8 macro */ + _spi->setClockDivider(42); // set clock 2MHz(max: 5MHz) +#endif + +} + +void PN532_SPI::wakeup() +{ + digitalWrite(_ss, LOW); + delay(2); + digitalWrite(_ss, HIGH); +} + + + +int8_t PN532_SPI::writeCommand(const uint8_t *header, uint8_t hlen, const uint8_t *body, uint8_t blen) +{ + command = header[0]; + writeFrame(header, hlen, body, blen); + + uint8_t timeout = PN532_ACK_WAIT_TIME; + while (!isReady()) { + delay(1); + timeout--; + if (0 == timeout) { + DMSG("Time out when waiting for ACK\n"); + return -2; + } + } + if (readAckFrame()) { + DMSG("Invalid ACK\n"); + return PN532_INVALID_ACK; + } + return 0; +} + +int16_t PN532_SPI::readResponse(uint8_t buf[], uint8_t len, uint16_t timeout) +{ + uint16_t time = 0; + while (!isReady()) { + delay(1); + time++; + if (timeout > 0 && time > timeout) { + return PN532_TIMEOUT; + } + } + + digitalWrite(_ss, LOW); + delay(1); + + int16_t result; + do { + write(DATA_READ); + + if (0x00 != read() || // PREAMBLE + 0x00 != read() || // STARTCODE1 + 0xFF != read() // STARTCODE2 + ) { + + result = PN532_INVALID_FRAME; + break; + } + + uint8_t length = read(); + if (0 != (uint8_t)(length + read())) { // checksum of length + result = PN532_INVALID_FRAME; + break; + } + + uint8_t cmd = command + 1; // response command + if (PN532_PN532TOHOST != read() || (cmd) != read()) { + result = PN532_INVALID_FRAME; + break; + } + + DMSG("read: "); + DMSG_HEX(cmd); + + length -= 2; + if (length > len) { + for (uint8_t i = 0; i < length; i++) { + DMSG_HEX(read()); // dump message + } + DMSG("\nNot enough space\n"); + read(); + read(); + result = PN532_NO_SPACE; // not enough space + break; + } + + uint8_t sum = PN532_PN532TOHOST + cmd; + for (uint8_t i = 0; i < length; i++) { + buf[i] = read(); + sum += buf[i]; + + DMSG_HEX(buf[i]); + } + DMSG('\n'); + + uint8_t checksum = read(); + if (0 != (uint8_t)(sum + checksum)) { + DMSG("checksum is not ok\n"); + result = PN532_INVALID_FRAME; + break; + } + read(); // POSTAMBLE + + result = length; + } while (0); + + digitalWrite(_ss, HIGH); + + return result; +} + +boolean PN532_SPI::isReady() +{ + digitalWrite(_ss, LOW); + + write(STATUS_READ); + uint8_t status = read() & 1; + digitalWrite(_ss, HIGH); + return status; +} + +void PN532_SPI::writeFrame(const uint8_t *header, uint8_t hlen, const uint8_t *body, uint8_t blen) +{ + digitalWrite(_ss, LOW); + delay(2); // wake up PN532 + + write(DATA_WRITE); + write(PN532_PREAMBLE); + write(PN532_STARTCODE1); + write(PN532_STARTCODE2); + + uint8_t length = hlen + blen + 1; // length of data field: TFI + DATA + write(length); + write(~length + 1); // checksum of length + + write(PN532_HOSTTOPN532); + uint8_t sum = PN532_HOSTTOPN532; // sum of TFI + DATA + + DMSG("write: "); + + for (uint8_t i = 0; i < hlen; i++) { + write(header[i]); + sum += header[i]; + + DMSG_HEX(header[i]); + } + for (uint8_t i = 0; i < blen; i++) { + write(body[i]); + sum += body[i]; + + DMSG_HEX(body[i]); + } + + uint8_t checksum = ~sum + 1; // checksum of TFI + DATA + write(checksum); + write(PN532_POSTAMBLE); + + digitalWrite(_ss, HIGH); + + DMSG('\n'); +} + +int8_t PN532_SPI::readAckFrame() +{ + const uint8_t PN532_ACK[] = {0, 0, 0xFF, 0, 0xFF, 0}; + + uint8_t ackBuf[sizeof(PN532_ACK)]; + + digitalWrite(_ss, LOW); + delay(1); + write(DATA_READ); + + for (uint8_t i = 0; i < sizeof(PN532_ACK); i++) { + ackBuf[i] = read(); + } + + digitalWrite(_ss, HIGH); + + return memcmp(ackBuf, PN532_ACK, sizeof(PN532_ACK)); +} diff --git a/RFID_PN532.c b/RFID_PN532.c new file mode 100644 index 0000000..9a4e01c --- /dev/null +++ b/RFID_PN532.c @@ -0,0 +1,251 @@ +// #include // LPC2378 microcontroller register definitions + + +// FIODIR2 = 0xFF; +// FIOPIN2 = 0x9; +// FIODIR1 = 0x1; +// //FIO0SET = 0XFFFEFFFF; +// FIOMASK1 = 0XFFFFFFFE; +// FIOPIN1 = 0x1; +// +// +// // Function to transfer one byte of data over SPI and receive a byte back +// int SPI0_Transfer(int data) { +// S0SPDR = data; // Write data to SPI Data Register +// while (!(S0SPSR & (1 << 7))); // Wait for transfer to complete (SPIF flag) +// return S0SPDR; // Return received data +// } + +// // Function to select the PN532 by pulling SS (chip select) low +// void PN532_Select(void) { +// FIOCLR0 = (1 << PN532_SSEL_PIN); // Pull SSEL low to select PN532 +// } + +// // Function to deselect the PN532 by pulling SS (chip select) high +// void PN532_Deselect(void) { +// FIOSET0 = (1 << PN532_SSEL_PIN); // Pull SSEL high to deselect PN532 +// } + +// // Function to write a command to the PN532 +// void PN532_WriteCommand(int *cmd, int cmd_len) { +// PN532_Select(); + +// SPI0_Transfer(0x01); // Preamble +// SPI0_Transfer(0x00); // Start Code +// SPI0_Transfer(0xFF); // Start Code +// SPI0_Transfer(cmd_len + 1); // Length byte +// SPI0_Transfer(~(cmd_len + 1) + 1); // Checksum for length + +// int checksum = 0; +// SPI0_Transfer(0xD4); // Host to PN532 Command Code +// checksum += 0xD4; + +// for (int i = 0; i < cmd_len; i++) { +// SPI0_Transfer(cmd[i]); // Send each byte of the command +// checksum += cmd[i]; +// } + +// SPI0_Transfer(~checksum + 1); // Checksum byte +// SPI0_Transfer(0x00); // Postamble + +// PN532_Deselect(); +// } + +// // Function to read a response from the PN532 +// int PN532_ReadResponse(int *response, int response_len) { +// PN532_Select(); + +// // Wait for Preamble byte (0x01), retry until found or timeout +// if (SPI0_Transfer(0x00) != 0x01) { +// PN532_Deselect(); +// return 0; // Error or no response +// } +// SPI0_Transfer(0x00); // Start Code +// SPI0_Transfer(0xFF); // Start Code + +// int len = SPI0_Transfer(0x00); // Length byte +// SPI0_Transfer(0xFF - len + 1); // Checksum for length + +// int checksum = 0; +// for (int i = 0; i < len - 1; i++) { +// response[i] = SPI0_Transfer(0x00); // Read each byte of the response +// checksum += response[i]; +// } + +// int response_checksum = SPI0_Transfer(0x00); +// PN532_Deselect(); + +// if (((checksum + response_checksum) & 0xFF) != 0) { +// return 0; // Checksum error +// } +// return len - 1; // Return length of valid data +// } + +// // Function to send the "Get Firmware Version" command to the PN532 +// void PN532_GetFirmwareVersion(void) { +// int cmd[] = {0x02}; // Command code for Get Firmware Version +// PN532_WriteCommand(cmd, sizeof(cmd)); + +// int response[12]; // Buffer to hold the response +// if (PN532_ReadResponse(response, sizeof(response))) { +// // Process firmware version from response +// // Example: response[0] = IC Version, response[1] = Version, etc. +// } else { +// // Handle error: no response or incorrect response +// } +// } + +// // function to initialize SPI and test PN532 communication +// int main(void) { +// //FIO0DIR |= (1 << PN532_SSEL_PIN); // Set PN532 SSEL pin as output +// //SPI0_Init(); // Initialize SPI0 + +// while (1) { +// PN532_GetFirmwareVersion(); // Send Get Firmware Version command +// // Add delay if needed, process response +// } +// } + +#include +#include /* LPC23xx definitions */ +#include "LCD.h" /* Graphic LCD function prototypes */ +#include + +#define PN532_CS_PIN (1 << 10) // Example: P0.10 used for CS +#define PN532_MOSI_PIN (1 << 18) // Example: P0.18 for MOSI +#define PN532_MISO_PIN (1 << 17) // Example: P0.17 for MISO +#define PN532_SCK_PIN (1 << 15) // Example: P0.15 for SCK + +// SPI command definitions +#define PN532_SPI_STAT_READ 0x02 // SPI status read command +#define PN532_SPI_DATA_WRITE 0x01 // SPI data write command +#define PN532_SPI_DATA_READ 0x03 // SPI data read command +char val[10]; +// Function prototypes +void SPI_Init(void); +void PN532_WriteCommand(int *cmd, int len); +void PN532_ReadData(int *buffer, int len); +int SPI_Transfer(int data); +extern int i; +void delay_ms(int ms); +void detect_rfid_card(void); +int checksum ; +int mainrww(void) { + lcd_print("HHHE"); + delay_ms(100000); + SPI_Init(); // Initialize SPI + + while (1) { + lcd_print("HHHE"); + delay_ms(100000); + detect_rfid_card(); // Continuously check for RFID cards + delay_ms(500); // Delay between detections + } +} + +// Function to detect RFID card +void detect_rfid_card(void) { + // InListPassiveTarget command: Poll for one ISO14443A card + int command[] = {0x4A, 0x01, 0x00}; // InListPassiveTarget, MaxTargets = 1, Baudrate = 106 kbps + int response[64]; // Buffer for response data + + // Send command to PN532 + PN532_WriteCommand(command, sizeof(command)); + + // Wait for response + delay_ms(50); // Allow PN532 to process + + // Read response from PN532 + PN532_ReadData(response, sizeof(response)); + + // Parse and print results + if (response[6] == 0x00 && response[7] == 0x01) { // Success, 1 card detected + int uid_length = response[12]; // Length of UID + int *uid = &response[13]; // Pointer to UID bytes + // Print UID (for debugging, replace with actual handling logic) + for ( i = 0; i < uid_length; i++) { + // Replace with actual code to display UID, e.g., UART print + lcd_clear(); + sprintf(val, "%d",*uid); + lcd_print ( val); + } + } +} + +void SPI_Init(void) { + // Configure SPI pins + PINSEL0 &= ~(0x3 << 30); // Clear bits for P0.15 (SCK) + PINSEL0 |= (0x3 << 30); // Set SCK0 + PINSEL1 &= ~((0x3 << 2) | (0x3 << 4)); // Clear bits for P0.17 (MISO) and P0.18 (MOSI) + PINSEL1 |= ((0x3 << 2) | (0x3 << 4)); // Set MISO0 and MOSI0 + + // Configure CS pin as GPIO + FIO0DIR |= PN532_CS_PIN; + FIO0SET = PN532_CS_PIN; // Set CS high initially + + // Configure SPI + S0SPCCR = 8; // SPI clock = PCLK / 8 + S0SPCR = (1 << 5) | // Enable SPI + (1 << 3) | // Master mode + (1 << 2); // CPOL = 0, CPHA = 0 +} + +void PN532_WriteCommand(int *cmd, int len) { + FIO0CLR = PN532_CS_PIN; // Pull CS low + + // Send preamble and start code + SPI_Transfer(0x00); + SPI_Transfer(0x00); + SPI_Transfer(0xFF); + + // Send length and length checksum + SPI_Transfer(len + 1); // Length (Data + TFI) + SPI_Transfer(~(len + 1) + 1); // Length checksum + + // Send TFI and data + SPI_Transfer(0xD4); // TFI (Host to PN532) + checksum = 0xD4; + for ( i = 0; i < len; i++) { + SPI_Transfer(cmd[i]); + checksum += cmd[i]; + } + + // Send checksum and postamble + SPI_Transfer(~checksum + 1); + SPI_Transfer(0x00); + + FIO0SET = PN532_CS_PIN; // Pull CS high + delay_ms(2); // Delay to let PN532 process the command +} + +void PN532_ReadData(int *buffer, int len) { + FIO0CLR = PN532_CS_PIN; // Pull CS low + + // Send SPI read status command + SPI_Transfer(PN532_SPI_STAT_READ); + + // Wait for ready status + while (SPI_Transfer(0x00) != 0x01); + + // Send data read command + SPI_Transfer(PN532_SPI_DATA_READ); + + // Read data + for ( i = 0; i < len; i++) { + buffer[i] = SPI_Transfer(0x00); + } + + FIO0SET = PN532_CS_PIN; // Pull CS high +} + +int SPI_Transfer(int data) { + S0SPDR = data; // Load data into SPI data register + while (!(S0SPSR & (1 << 7))); // Wait for transfer to complete + return S0SPDR; // Return received data +} + +void delay_ms(int ms) { + for ( i = 0; i < ms * 1000; i++) { + __asm("NOP"); + } +} \ No newline at end of file diff --git a/RTC.c b/RTC.c new file mode 100644 index 0000000..e9f681b --- /dev/null +++ b/RTC.c @@ -0,0 +1,79 @@ +#include +#include /* LPC23xx definitions */ +#include "LCD.h" /* Graphic LCD function prototypes */ + +int j,hr,min,sec; +char hrVal[2]; +char minVal[2]; +char secV[2]; + +/* Import external IRQ handlers from IRQ.c file */ +extern __irq void T0_IRQHandler (void); +extern void PWM_SetDutyCycle(); +extern void PWM_Init(); + +/* Import external variables from IRQ.c file */ +unsigned char clock_1s; + +void RTCTimerEnable(){ + /* Enable and setup timer interrupt, start timer */ + T0MR0 = 11999; /* 1msec = 12000-1 at 12.0 MHz */ + T0MCR = 3; /* Interrupt and Reset on MR0 */ + T0TCR = 1; /* Timer0 Enable */ + VICVectAddr4 = (unsigned long)T0_IRQHandler;/* Set Interrupt Vector */ + VICVectCntl4 = 15; /* use it for Timer0 Interrupt */ + VICIntEnable = (1 << 4); /* Enable Timer0 Interrupt */ +} + +void updateRTCTimer(){ + if (clock_1s) { + clock_1s = 0; + sec++ ; + if (sec==60){ + sec = 0; + min++; + if(min==60){ + min = 0; + hr++ ; + if (hr==24){ + hr = 0; + } + } + } + sprintf(hrVal, "%02i",hr); + sprintf(minVal, "%02i", min); + sprintf(secV, "%02i", sec); + set_cursor(0,1); + + for (j = 0; j < 2; j++) { + lcd_putchar(hrVal[j]); + } + set_cursor(2,1); + lcd_print ( ":"); + set_cursor(3,1); + + for (j = 0; j < 2; j++){ + lcd_putchar(minVal[j]); + } + set_cursor(5,1); + lcd_print ( ":"); + set_cursor(6,1); + for (j = 0; j < 2; j++) { + lcd_putchar(secV[j]); + } + } +} +int trial_run_rtc(void) { + + RTCTimerEnable(); + lcd_init(); + lcd_clear(); + //lcd_print ("Local Time"); + set_cursor (0, 1); + lcd_print ("00:00:00"); + + while (1) { /* Loop forever */ + updateRTCTimer(); + } + +} diff --git a/Retarget.c b/Retarget.c new file mode 100644 index 0000000..e1f0ffc --- /dev/null +++ b/Retarget.c @@ -0,0 +1,42 @@ +/******************************************************************************/ +/* RETARGET.C: 'Retarget' layer for target-dependent low level functions */ +/******************************************************************************/ +/* This file is part of the uVision/ARM development tools. */ +/* Copyright (c) 2005-2006 Keil Software. All rights reserved. */ +/* This software may only be used under the terms of a valid, current, */ +/* end user licence from KEIL for a compatible version of KEIL software */ +/* development tools. Nothing else gives you the right to use this software. */ +/******************************************************************************/ + +#include +#include + +#pragma import(__use_no_semihosting_swi) + + +extern int sendchar(int ch); /* in serial.c */ + + +struct __FILE { int handle; /* Add whatever you need here */ }; +FILE __stdout; + + +int fputc(int ch, FILE *f) { + return (sendchar(ch)); +} + + +int ferror(FILE *f) { + /* Your implementation of ferror */ + return EOF; +} + + +void _ttywrch(int ch) { + sendchar(ch); +} + + +void _sys_exit(int return_code) { +label: goto label; /* endless loop */ +} diff --git a/Serial.c b/Serial.c new file mode 100644 index 0000000..e303e7c --- /dev/null +++ b/Serial.c @@ -0,0 +1,65 @@ +/******************************************************************************/ +/* SERIAL.C: Low Level Serial Routines */ +/******************************************************************************/ +/* This file is part of the uVision/ARM development tools. */ +/* Copyright (c) 2005-2006 Keil Software. All rights reserved. */ +/* This software may only be used under the terms of a valid, current, */ +/* end user licence from KEIL for a compatible version of KEIL software */ +/* development tools. Nothing else gives you the right to use this software. */ +/******************************************************************************/ + +#include /* LPC23xx definitions */ + +#define UART1 /* Use UART 0 for printf */ + +/* If UART 0 is used for printf */ +#ifdef UART0 + #define UxFDR U0FDR + #define UxLCR U0LCR + #define UxDLL U0DLL + #define UxDLM U0DLM + #define UxLSR U0LSR + #define UxTHR U0THR + #define UxRBR U0RBR +/* If UART 1 is used for printf */ +#elif defined(UART1) + #define UxFDR U1FDR + #define UxLCR U1LCR + #define UxDLL U1DLL + #define UxDLM U1DLM + #define UxLSR U1LSR + #define UxTHR U1THR + #define UxRBR U1RBR +#endif + + +void init_serial (void) { /* Initialize Serial Interface */ + #ifdef UART0 + PINSEL0 |= 0x00000050; /* Enable TxD0 and RxD0 */ + #elif defined (UART1) + PINSEL0 |= 0x40000000; /* Enable TxD1 */ + PINSEL1 |= 0x00000001; /* Enable RxD1 */ + #endif + UxFDR = 0; /* Fractional divider not used */ + UxLCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */ + UxDLL = 78; /* 9600 Baud Rate @ 12.0 MHZ PCLK */ + UxDLM = 0; /* High divisor latch = 0 */ + UxLCR = 0x03; /* DLAB = 0 */ +} + + +/* Implementation of putchar (also used by printf function to output data) */ +int sendchar (int ch) { /* Write character to Serial Port */ + + while (!(UxLSR & 0x20)); + + return (UxTHR = ch); +} + + +int getkey (void) { /* Read character from Serial Port */ + + while (!(UxLSR & 0x01)); + + return (UxRBR); +} diff --git a/Servo_MG995.c b/Servo_MG995.c new file mode 100644 index 0000000..d405855 --- /dev/null +++ b/Servo_MG995.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include "LCD.h" + +int i, dutyCycle; + +void PWM_Init() // Set pin function for P1.18 as PWM1 +{ + + PINSEL3 |= (2 << 4); // Set bits 4-5 to 10 (AF2) for PWM1.1 + + // Set PWM mode for PWM1 + PWM1PCR = (1 << 9); // Enable PWM1 output (PWM1.1). Set bit 9 = 1 + PWM1MCR = (1 << 1); // Reset counter on matching value in PWM1MR0 + + // Set PWM frequency + PWM1MR0 = 240000; // Set period to 20 ms (assuming 1 MHz clock) + PWM1TCR = (1 << 0) | (1 << 3); // Enable PWM and counter. 0th bit to enable counter and 3rd bit to enable PWM + +} + +void WaitTime(int wait_time) +{ + for (i = 0; i < wait_time; i++); // Approx 4-5s +} +void PWM_SetDutyCycle(int dutyCycle) // MG995 duty cycle mapping: 1ms = 0° (5%), 1.5ms = 90° (7.5%), 2ms = 180° (10%) +{ + PWM1MR1 = (dutyCycle * PWM1MR0) / 100; // Set duty cycle to value set as 1 time period + PWM1LER = (1 << 1); // Enable PWM1.1 latch, ensures new value for PWM1MR1 is applied at next update of PWM signal +} + + int trial_run_servo() + { + lcd_init(); + lcd_clear(); + PWM_Init(); + while (1) + { + PWM_SetDutyCycle(7.5); + } + } diff --git a/Sim.ini b/Sim.ini new file mode 100644 index 0000000..9261a63 --- /dev/null +++ b/Sim.ini @@ -0,0 +1,135 @@ +/******************************************************************************/ +/* SIM.INI: Simulator Initialization File */ +/******************************************************************************/ +/* This file is part of the uVision/ARM development tools. */ +/* Copyright (c) 2005-2007 Keil Software. All rights reserved. */ +/* This software may only be used under the terms of a valid, current, */ +/* end user licence from KEIL for a compatible version of KEIL software */ +/* development tools. Nothing else gives you the right to use this software. */ +/******************************************************************************/ + + +/*-------------------------------------------------------------------*/ +/* Analog0() simulates analog input values given to channel-0 (AD00) */ +/*-------------------------------------------------------------------*/ +Signal void analog0 (float limit) { + float volts; + + printf ("Analog0 (%f) entered.\n", limit); + while (1) { /* forever */ + volts = 0; + while (volts <= limit) { + ad00 = volts; /* analog input-0 */ + twatch (500000); /* 500000 Cycles Time-Break */ + volts += 0.1; /* increase voltage */ + } + volts = limit; + while (volts >= 0.0) { + ad00 = volts; + twatch (500000); /* 500000 Cycles Time-Break */ + volts -= 0.1; /* decrease voltage */ + } + } +} + + +/* + * Simulate LCD Display (2 line 40 character Text LCD with 4-bit Interface) + * Pins: + * - DB4..DB7 = P1.24..P1.27 + * - RS = P1.28 + * - RW = P1.29 + * - E = P1.31 + */ + +define unsigned long oldPORT1; +define unsigned char Cursor; +define unsigned char bitpos; +define unsigned char Cmd; + +define unsigned long _E; +define unsigned long _RW; +define unsigned long _RS; +define unsigned long _CTRL; +define unsigned long _DATA; + +MAP 0x10000000, 0x1000004F READ WRITE // LCD Memory + +oldPORT1 = PORT1; +Cursor = 0; +bitpos = 0; + +_E = 0x80000000; +_RW = 0x20000000; +_RS = 0x10000000; +_CTRL = 0xB0000000; +_DATA = 0x0F000000; + +// Clear Display Function +Func void LCD_Clear (void) { + unsigned char i; + + for (i = 0; i < 80; i++) { + _WBYTE(0x10000000 + i, 0x20); + } + Cursor = 0; +} + +// LCD Display Signal Function +Signal void LCD_Display (void) { + unsigned char val; + + while (1) { + wwatch(PORT1); // Wait for write to PORT1 + if ((PORT1 & _RW) == 0) { + // Write to Display + if (((oldPORT1 & _E) != 0) && ((PORT1 & _E) == 0)) { + // E: 1->0 + if ((PORT1 & _RS) == 0) { + // Write Command + val = ((PORT1 & _DATA) >> 24); + if (val == 3) { + bitpos = 4; + } + Cmd &= 0xF0 >> bitpos; + Cmd |= val << bitpos; + if (bitpos == 0) { + if (Cmd == 0x01) { + // Clear Display + LCD_Clear(); + } else if (Cmd & 0x80) { + // Set Cursor Position + Cursor = Cmd & 0x7F; + } + } + } else { + // Write Data + val = _RBYTE(0x10000000 + Cursor); + val &= 0xF0 >> bitpos; + val |= ((PORT1 & _DATA) >> 24) << bitpos; + _WBYTE(0x10000000 + Cursor, val); + if (bitpos == 0) Cursor++; + } + bitpos ^= 4; + } + } else { + // Read from Display + if (((oldPORT1 & _E) == 0) && ((PORT1 & _E) != 0)) { + // E: 0->1 + if ((PORT1 & _RS) == 0) { + // Read Status + val = (0x7F >> bitpos) & 0x0F; + } else { + // Read Pointer + val = ((Cursor & 0x7F) >> bitpos) & 0x0F; + } + PORT1 &= ~_DATA; + PORT1 |= val << 24; + bitpos ^= 4; + } + } + oldPORT1 = PORT1; + } +} + +LCD_Display() diff --git a/Ultrasonic_HC_SR04.c b/Ultrasonic_HC_SR04.c new file mode 100644 index 0000000..4886dd6 --- /dev/null +++ b/Ultrasonic_HC_SR04.c @@ -0,0 +1,110 @@ +#include +#include +#include "LCD.h" + + int echoTime=0; + float distance=0; + char cVal[10]; + int k; + int pulsecnt; + +void delayUS(unsigned long microseconds) //Using Timer0 +{ + T1TCR = 0x02; //Reset Timer + T1TCR = 0x01; //Enable timer + while(T1TC < microseconds); //wait until timer counter reaches the desired delay + T1TCR = 0x00; //Disable timer +} +void initTimer0(void) +{ + PCONP |= (1<< 2); + //Assuming PCLK = 60Mhz + T1CTCR = 0x0; + T1PR = 11; //60 clock cycles @60Mhz = 1 us + T1TCR = 0x02; //Reset Timer +} + +void startTimer0(void) +{ + T1TCR = 0x02; //Reset Timer + T1TCR = 0x01; //Enable timer +} + +unsigned int stopTimer0(void) +{ + T1TCR = 0x00; //Disable timer + return T1TC; +} + +void delayMS(unsigned int milliseconds) +{ + delayUS(milliseconds * 1000); +} +void setPins(int n, int m) { + #define ECHO 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

    bTS1V4 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 NYnylF+u8@O{67W8>B;~A literal 0 HcmV?d00001 diff --git a/lcd_4bit.crf b/lcd_4bit.crf new file mode 100644 index 0000000000000000000000000000000000000000..6bfb4dca704e0e79f8b8595d4d949492b4738eb6 GIT binary patch literal 35755 zcmbt+d7Mi7#Li#vV+Jf zs|YGPDsG4D_Yih`m7gQ9|nqN0Kdi10n<+@8L5@ASO?eDnLwt<$Hf&Z#Zwz8 zt9$DSN*Scg^`7dq?P6tIkiPh;`o6ud@6~@m@1EUyUUgZo-VIlkW~;8M?Azn2nrnME z^uBJuRhgP}GIisP7j#lnkIoooEBx)+)GW0Id-uKSf(x$d-M2@>z@ELX z8qnCYp?CKSu2thUthhylY}s~>qHkoEC~w5%+vnzo;n&o~(wmD$T{8@n|Q9H6>I_!X7S{65>y z%$NTL%4fUXP}#S!zd9vS8m!u04ZV6as){(jyl=Pe4ZTz@Y$a>$+gRQ=-Oyici3qRl zcXcDOAY5;Ip3BAGi)7UF@7D;Oz5Df5iy|4dU26LG?pM`qz~9vINPDh8@zS0>`0t80RyvrxsI?BZS6zzsJXO+42U7`j zP{#mvhIHS?h7$FkqWpyVcTs*){i`THrT$rz-$wnTD8H?`sVKjly0Iw#LUlt?{zdBg zqWt!1U<(Uze=#dAE1r>1zb~GVRF%auQmRw&j5exc@r<^>%J>A6R<%>*#WOBcWyLct zQt9Fu?Nx`O8JHEtJBV3Pyn~n(#XE>uQM`kg6~#MLabNjdRb~z(v7tEmkt!F0G-&@a2s_RzNm+zqX#)UiEG@6Em%KBVe|*ZUoG@){TH!*SZlf z^IA6oW?$<@zzl5N2$+Sf8v!%%|1d&(b#1E_!i;R)2$+@qB9UWr;G))q4qH>%xwbr` zg}5JXKP~UDUXWL!o{6&(>ghNusaC~VDfLvG)kZxTXSG#N#98gs$~fyn^?00hky;UF zwO7lxpPq012|?>I%f?4|Rn=wXCF;K|cnK`vdR;D;#Nr+2rLb_vd2O(0$9ZkBV8?mw zuvo`=7h<7~^De?79p|;j0)0-tZ>M&wsjSw>R3^J z1!NX_)?B`}uCxv{E^j5L0^wv~>(*Qcx>XNdMKV-)U2OEuL& z9ah~Y^iuq-l4V0*PGbQ5M(mDXOS z21kow7}dHc3*)F(M_Jtd7bC0$%YP{%KOyo5MT@cgwNVz!*DwPuOR)Tnky1&P|6)Xb zQsndN~Ku-#)$ls$p25Y7|VYy%3}E%nn8Yw8X><8%ijoYoO>3beqlQFytRsU7r`wNpWYnMtk9B19HHU{> zc-oo+9^0y3UnBBkUazka;IWQ+eT@K*b<|^x(A&Z~>al@4BfmPF$U4|bOH_4)DKoo7 zb&fD)I+m!a2vg=ziONKn;`qEFY@sL-lPQW4F`1$$5tAv35;2*gh&Pxm6eVLaMNu*) zQxqj*GDT4`CQ}sghP8#FR7|EQO2uS~qEt+#C`!d-iXz?sw@{Q(sR&aPWmGc46h#@8 zh%iM_MwLXEq9~(&9bt+y)T>`an4+j&{XD`HMfK`u5vC}rS3iv~MNz%_NyHON0D~oJ zYJ`^%-joP0DZI%MUP^eABD^-jyEVdN9SIec$2t-?u+(P->)^vmoyR&7IH=TltRsO# zN}b0#k}-L#BN>y&I{4sIugf};F?p;bi33l)9P3EMqy1qv5u4; z1v3hOm(e3s@K{GChCZw#6GI=?k%^%X>&V2=hjr9r2dB4>b<|_eqVrfsJ+>-3k9E{z zo2K(vM?H3DIG9 zZy)PO;2>J(v5o`|p>-bXNXF!`j$}+8>qy4rv5sU+9_vWrKs&A@6_dw0QZad~BNda! zI#MxttRtmHx6qNnilggg9U0Xa;jxa48W7>JjttI3^t!Ag6Z0XqRXsN1dO6lnkNvmK zV;%L_cI!OWQIFlW&SM?**ktRx5(H%NsEUKwcvQuKXFRInV6h|?WpIF35{oieM?9)x z9r37&b;P48){%(GV;zZj)B;{Ss$w1SsET#Oqbk;sjLBmi$rz4vKjKjp>xf5HtRo&( zv5r(s9_vWOaGZ6-qbk-BkE&QlM&HTvJQtp}lLwD=Wb~apc&sBHRk4nERK+?ts?z<1 zb=1dvoORU0#|sD5wdoGp*6-czr{u#jr>e9n&3oO#E*^}!$|`k4FUnv%P6O!qjJOD2Fl1D^tK4AqP)Be8>o}>>g^hqGbwBif3Cq9aN!^*oz7f_eJi$` zg(#)IwnLuzJpEk1TBy{uf_ z6S7c<4`$TDP(D~S)tS;P;<7@IvbETp4Gll1YiqJVuR@1PJ9R*R66(`9E2%!&ep22p zR&Bag?Ff&`*phe~Tvc9GBEzV@DwdZB@{SbCO9pv|i{+()yhGt>LD`j^ORFLZR~F68 zYka(DW?torqM3P}%R?6}uhL(4@71h~jC395Og73B_qr^66U_qPJ{6T6vH32%C}S?V z6G%`k`PquvPVnu*DNu9yY*~)|t|2O)C1q=XOod~ZLiy5KOrsWRYqRBD)q$49OW_rD zE!kzI8Fh6_m0hw30t)Z*3o6rihtaYj6=}TJY{BkYn^hOLWM{Kw*pRg-T?KYs%ih2u zC93WAbMtO`TA?MSwdvB@61>%EVE}RVHmy}jV6GRdlEe`z*$l2ZR0 ztpeBK(JjFVS>fFg_l5agN-OKSlw-^AcJaJw&U-(qs<~datVCTH`nxW&rnDmte-{_8 z*99x|{}iuRSD%HxK}Fl2fU?%wpHOcV&qMnYYH#s&WXlq&UGa8s`xENk;`O><^*^t8 zJ#K#j2N01_&f7l;Wv#V8sdg66L;I7sQ4$&I(EdrdXW_M1-2O@6dC_`Z5Lx`Fcs*`^ zQh&qVEEN8eg0j}ypHgoY&qMoDYESWYWXn>jP4RZH{Zs1h;`O>9YWZRDdffgL7Qhzm z#Ns8sjxjBOUtLu;SYU!XN7KV)tgZyh+PrX~t}CfS+)$?%s7vEMPhlObD*?jIihNGP z{R@FdT?q#se~d6N3;ISG32eIbDj27RC?kc?TPu-<&|VP+gx(lsB(Q_jt3c@WQAP?e zmR6#?DvSFag>a#+B+Z>aHDb45DGcm3P3v|7cAKjSOK{a%y#VaCQ2z|O&5V3bV~E1m zB-n0$h%nGa-AsupOh?^JU?d}E0waa(i6)fo)-%F@P~A+4G=%DA0wWnQ6BsGPp_)*( zTUX6)39;KL5xWIZLSVP4TDOz1+Z;_;lI@n&3&3s*^v|%{?UB!EO!u%gNw(XS5eB-b zn<>e5)4d6dWW-Ehq_Bn4gtFawL>LgNn<>e5)4d6dWW-Ehq!6oXLfLLzG`l6mZYM|V z76ed%-KJ>WPQh-oHDM{X+vR!z*loW48Frfy`J4vKgsn-j-MU5?=%Q|>6x&VrCNPo_ zGl7x9HdhnMcIzHtK&Wn}6x&VrCNPo_Gl7x9o?R2lcDq8eTT1M9QfRlDF8Khud7c*L zH0Qu_DvZjR!?t@c6d16S73IKwhhv;HUhWkley+tfd^E;Fhd0Do3AH}XO6u>>L>9WO zz4l@jTT^>2B`k>F5|zakeI?FHs+Z%el-e9+Rb|`gFT#RGwAJ5T1*~@Z>n3K^pj}I& zvNGjayk{(IV5O;S=D$ToNk`ME5#utR9*>9=M13Gy2tIB`IT)owF-|(NU+q#Q$hs^l z8w+A=NCaKA*P7^o;A?b91Yxz8hg^zBNqe~`EQpT|iQsH>NCau4Ln2taDc;mJu^~Yt z+QxhR}PJ zsDvT9=t9{LdJ_|D2rWja7uVJnzxo7Q=J&dcDljT_2Air@XRxWX*s4CkmWec-EmIS< zjK03>Bavjw=p&J2%jmXCvSsv<0HX?*FT$ZovSsvcCfPE&-zC{HdJ~gu8Ql;`HiX{q zB=k#fH$Em|{cdvnj=f=%n>K#fG?CXRsl(V5dIChR{7T#fFHqlnv22g!am0 zTE~oy;Q?M{vIK`WI1k4mLSg9y6I;7F^;(GBV3mP$NrY1hwZDy4OJ_P^mm86kh8cIq zHR7Zc^Rci4LId@={DNLQk#C@OJXx7cNCRKho0H%MUL4_Y1An8pCQ-``d@s(*;1IHK z&4l#U`bJTlD56xqy%X2S4ZJLD zU~NsMKE!v1YHCYrd8yIDC+5KG4o1tMDQ2iwYN48TZG~BUV7pk;T3e%Qoubu8P8!Rs zwx-q!D}gYl5dSet^hP++wnD5T)wsQX3RgzvRaVue5$+azjd|J1T13$iRux#M$g#)UGOg=ii-yn;=I z1vT0wB4IJ~WunDOu`!qu9-s!oDywiHx3LH}fy-5e!`4FCq<#yFxwYkKY@8y^sltsb z?X5VM>Qr5y#W7K&SXp%yniFGn(ccnq&9dq%)y<&^nN?NYxvrDi7Y-6LuPnzKhz?O+ zy0W$wN2>)W;c}%JZt)3mCbwBd`&*ikR?mwU<#t;wnO*Rrpad+0u-( z{-G$hCR@(adscWZ&Fu%bB3qiqPP6b@tF%m?^j^4DAp@RqLpTe-=!jYHtI$l~KuLLL zH7Zi73=^s>#!29N3I)fk33|T} zcDbxnpERF`8+T-60XYTRbScwsdp3o(=~9OGSoo4h;i#@l879`mupM2>v9(6aF5nD6I1 zb~dxq<(=!YrTS&{0ikzufx50az~|N|Gb_yP(e`khJtNY19o`>{6i)C+Me8ThFyYo{ zsg4k-U7f>!LD^0biTh<|^pRc38dhn*52yqS% z_O^%#lRVh3M_D}B+I?oO$b%iVz3hx)vUsqyQv|NagRKQY%!2f@qY8Pjqu!O|!H&98 zGK;}}Csq-I{dUA~Ng3?u;3VsKu%m;MtmDCs4lH;W?C9XIyku-}SY9$VI4mzduq-c$ z!O;hn<)v_Z8s+g|$J@+<9k0uSeNPC$Rq09%3AK#}XVg@8!E`(r;srC)ndRY>9WUV)#%(t2Lh8d6?f*&64ZR%LVS%{LPX*g;tyhIFh>e3RStO-|G zJ&*T>=WYK^eknaO%;M!&DxMy`wv6U-)xKeP5oBgdyGVQTS_f|bL0u_`hVrx&Y& zSKByaZy_ro>i4vimB@+unZ>HG`j3iL5%trGRblnVLbt$uFB$Xjw=f2WwKy}(cqO!O zb1iYQ-66lM{EE<{_lK5m<^#26hO@Pq8yvzE=5{likE^r`EY0kiY-KercomA5*MurB z3FmyC4UK!lcI26?aC!?a>l@obuBiKMSU6i=nyLIld9J($@07d6W{o)HfVq$%)9_Gj)w+dcw#~496WyqKzwHA8-C=2LM?z=VqqQT?=dPq%vbihT zWu?w#WzzA2UhQItp2yOh5Xtl`mZ)DNys}pILl_Y;H4`-L+jy zHaoa>a>k``AsV*Z9|j}&#^7avw)i|5Q;f`PS6uBW7(^6FP5grz?3dHRZUTu9%4PZ3FtK$&qvM8^LV~xIX9(GUKcQ=AIq zXG@ry?aFgCTUk?A&F4IY`5ol(%*5vE^X=cw$I#!5*8yk%>kH9)kX@6lE~`)DfRlWlx0=h7`hTKU$abx$%mBe9#(6DT zvpKIzHNHGitG?4}E`yYIshXSFskF9JAUT86%fh}Un$-ytATo0Sn|Z@)`wgzctBh=w zfO`?gK}N6vPefgiB>_<%jLMgDj z*Bx_+Rx3MT^VvaWHp{{<0QR`9Vc-D%mtVO!S5&wIdjF$Wt`WFXII8blk9XLk(EXr< zcSDbByY)wrZ{T?UqVKXSr)Tf$!I+ODT;KZV3M9LBr$u~D&X#koRi18Zoto1DCCy?Vko0oGk z%gJ*@4!_sTcdEITEyKW_IyILo?^;=xt0=9^@ThhUeJR2}BgU_-#|sI(38U?Pe%Q_p zhOM-7Z6!pOR$&8@%knXr_OmDa87o&;>>a+NPW!%%2ArA8b?eowd+%HoHYbP-Iak}? zXk5NZ8Pu`6HTJt25r+P`H@?@Pe{O*LpOP={pnO9Ej*w2xGu#1<{TuuB#KnOq=W1Lo zI4xhslQIoGaY7p{)Bt>l78=+fzjqTfE?=(!_xeuHi#kC>4MY>F!#4Ks*0(1v1{B&j zKp1P_y1@{ilw$_wZMVi=*j8bfe}iG(O*>pGm%9;PuPd}6DA*tIWILZjvLPr^~j zm2-i2!z$PGYV6hbdR!|i2pMqGfJRLE3&VbOAJD5?{~p)kW|llO0>fw+l*O9 z@+ff_RRa_|;tERe_h15)h*o`37dbE#Ie|r<$j);tFY*A3%yUE}|F~g6q*nC>T_m@% zU7PMVrTClD&21Xui2(i@WYEYVUI4Y%=_0kN&tq8*40~EG*S}HkJ728Sv$Td>8_UuJ zUZXqH)z`^1#1e9ezNB7#-GKhN%C6NNH!1#j(xU#RViZ-y3p zyifPWemC^M4a5THh8~Um`g8}UfH{4-58y%rFyjh5eB@%x`)+;|zM0Dn9MCJrbHA~7 zpI$P7ajDzSXJZ+OWWzmr58z+4Z67bvctbx(xdwTR7ybI*gs3jWDUs5*Um$)oHf@0q zoE3=AXXNYSd)?>d^S^^2B8Q(E?%%EdO*#2xV~7WQ_wIWQ4D^4N>N~Jc_g?+g8R&iR z^TQ{Um1jz?%q2VHsIL(BW_tJSm4R{34vTdj*oV0T^lu_or8^{3B_%lo%@<=_0)YViJ%aP7TDGGb@=77Le$Ls(o6;?M%f%^ogB>)Nt_31zX~JFg0$vp z{JTo0{RR=tr6<%6=+(cXAATjdBYI*(p4WPEzNK@W(u(2Y|ldr(wY!eR|@JV{^F`Ty7Qw2F*P+EZ4JJV>f)I zuDRe!E_i#0R$TD9fsGu!;__{CsVBJ<|AtdA3r^rtz58NiyA?$|G0`f|=#9+*KAy{{ zj*r)&#+msV-x$!VG1p^Ye=KA2&MfH7YR~P_uVG-HzBnZ~HQ&S4p4|X%mY>8447%F$ zy5Tpbdkq*MzdsW+;Y4mij|ME1u+ABIEyBDGldTc&Q%_gtOH04*Lnq~D+)`7a|qiO%ykAw8LX>~BPR3jM@?9_gv{Q-3|u)97dZTBN7b&;93+oe(67r^qX|P{}j@*=vV#|NYADV{Kt`=L%;TyBR!W&{6~>~ixU1LNWV=<|6!!x zp_Km+((h6m{{f`mqqhEiNWV|*{Cko9fG+g!M(Wc={z9Zbr1t)Nq(7pI{kcfbqf7kR zNdJd^TIbMB1L}{QgKUrh5N6q?gbYeqW@&p)P&{(%({7|F1}Y zM_2mSBK=?bgMT&BOX-h(Po$-EmERp{2l|u$7o=(Wv;SwLWt8);LRwCL@&ACdg1Y%# zk#?l+{uM|&Q4hZkX(jdavq*nWz5E)am(kUJXQUar#?K(FqQCl`kaniO`4vd3slhKp zT0?#O4oEMjzW$|1v((T39nxC5&i@V4I{LeRG17YK?_Y%U3L429tj-h+Z^={Ifw^O+(55CWvcj82M*_xR!>Ke;SD1 zG=lt7K>U?Pl7AA2ztJf2PXy6GHU+tk^e4;f6*P}?*j2}x|963LHvjAB7Y}{|I%#o-)M3bP+<=F+dvH_ znoIucpoS35BmY%ULy6{-|4P$kY8cTX^38t?BJ-d5|9>In|NrFw2f?1^;KE}lQ}P(j z)QINC@0)5N%^b;}7Ze@~nUcpMrsQ!CQ}S5OlswimC6D)*`k?u76Iwf*=xzc8xoQN_ zJp>SP)kvay2{7cUQACRgKyK390@^%`@ZR1w{7V^gsJ^24Ce>r+Fmgr#uJi2Ne(NY3Hx@tVpBLs+a z)dZqt1dw#qM50FtFzKpWiI$W9AgD=1E6Bee)MTQ^$zKd=3eigP?*TQH=n3){ftp72 z6agw-HJ#{b^5=lMjp!Nj?*cW0=sEIdg1Vh(4f!)b%_Le&{&Y~Yh}Mxm71SL>>&c%C z>Q15!tK;3u+G0i{#$|YA(@BT9M}nG9^fCcHUA2Jd z6#{^|Y9Y}U0))D15z(sz5OvkvM6VHG)K&KoZ6%-m;a;L`Z&C~ZxaC3RSy%rLx5CQEhT!F0H&^b zglG=|PF=N(=sg0Uy6RD)y#z>g)ni2O6F}8f%Zc`p-v!hPq7TWh2lY77N95OnT1oUV z`Im!wf@nYa)u5gv`jh~yu6l~-GxC2AY8BA|0?4}RX`+J!n03`NM4uCY)>W&Cz9hdC z)U!l~$p2qZ&k-Fa|F@vl5FH`^5>RW2z9PRpsC7hN6TsG0>xqsL;MP?eh>jBg*HzCG z4KlE_y6Od@!3GvrS8XI3YKXtQNHok4e|d>$xZy8A?k1uUhCdI~W}=aXc+Sg2Hyc=B zUG)mlXah^EtF{o`VqlSV)vH8f3@o#*dW~qTfrZvpuM>?o#B;V1O)$iBwh>J<{0Ye2 zPIRl`j|0_2G|BMCfZ9Pc#SqVVgJ`NDp7SQrG{YZ`+?_65q8zPM0XlkhF!IXXtp7q^ByqM5YO2Q%ryLd$bBD} zY509WeE`ff{J(+PN3_ro&-oDOX^7{11dKAU9J}gcV3Z*~v>zB{h!1@NWHS6eA@@_@ zk>URl)Mr2x!@m;L0bqzBK6H@iAwzuVbKrr2W!Y6<01pf-%&z(pcwk^@cGV%^fgwJ0 z77=B0Oeg!-*{Blr7fd_`42K6=Yzz`og20SpthmHde3@p`HEeu*^2<8kn z=xIYRXNW=17=k%N4O(po<_t6FIYTgKxIt?S!JH8Wtu+L5MjEs(@S#x#tq*+YW`mwL z1an3k^n!r^%~iJ;w9!C_=BhCUy%_k=Sc6^)d}y3On+-vq@dmwY2>MJg=oLfIXQDw{ z0w227pjQJQnq<)HhM>=6gSHxiK2r?ZW(fLBHE4U_L(>du3Vdj~L2np>KDQb4rXlDv z!=RmppwI0Fy%qS-OoQGId}x+Iy9_~}I}F-w2>RS<(7T49&s_%X34Ca_LGJ}VG{>O# z4MCr|27O=%`ph$EpCRZo-=GfzA6j70M}ZG5G-$u!_kdj%8T5(acLQ~|L7y6a4%9sc zeHQr8y#^f!d}y&jpBo73fPV&kVIZsn{u%V8fxr&)6 zpreL=8K{R1`r7a-K`k}tSl~mC7<4@Fp=AaQHWAPR{|p*pBBTfY88p;HP!IewXqYMM z)(V4$o8m){8#L1NmmznhL8DB6DX1q5y4m!XfO^uP(Wdy&QwH5)iVv+aXsn6g9{6X_ zI1}ML@Xw&}CIWompFtB$@u6o8nrMm-J!jA)Q`W6D22D2oJ5X+|K~qdw!PXfx)f69E zZ_qSTd}xC~vrGi`z(0fTGQ~??Fle?ZUb4}kIi?`Ziw4a%1z%n=Xn`sCvdN%@rr^tF zgBF?oe<9^%gYGr`e}a0&pv9*6#ukGfG!fJT{|tJ_L|6~}GiZs4z#jN#(8H#9#8!ir zn&J`L40_ZQEZJ_*W2Rt9lR?W(!IB*YtuO^k-Z1D1Q&yojF;`7ldv;=8nlk2Z8T70v zWBxW~qbX?djzJqt!H8X$gQj4_Zp=Yb)|q!P2TfUL_F(3jf)Vc-w8<2V*o!%63P!w- zIcUl{^8x0YDXYsqgI+WJ3(=zwG4o8nEvSz$^GrVl>SN3@)BiQ7{RZtY{a=Cl1oO@G ze+lYS%s12jIjGMt-%S6fpblWZnf{MK9mISy{qsP5ZqPfX|3gq;VCI?r4?um1nP>Xn z19b>9&-A|o>M&-W>3<8<5zIW(KL^xT2JJQdvp^li%rg<^1OG7dOa%I_I)<5NBGPx& zam+jup+4}>q>qEqA8gWoQ`VUwCVdk4!BCSv4g6r3Ne6?`A8yj;rvGo$9bwWJfgg-C z>C3I(qId*KjJ@=hFA#x5&xMq%)$mA@t;YA>LdO$X|#pSKH@)<##sJlP%}&#YxysMy4|F4mc-jLO&V`WygkdL36{j$ zcbGKMLcERm&!k%|Z2b}cnKaq*p8+-7r0JF*!yJ=tvjiFDnl!@_WSD2t?Ut-A^G%v* z$?CGeq*<1%E(=Y%!@|}d_-E3cmP9Cbn{<~Y5z0L#&9($1?lozSB^a^Tq`8)0#C;~s zvjijVH)*~l81aBf3oKb@9yDp8C9%pwCM~igR#{@w-Il~E51X{uk_cs~N%vVe3_$#6 z()|{W0}%h2^nfL}@u*1;TC&bOX3|5JAjoo)mRN!yD@=OW5(IhNq@|Yl&`OgYu>?z= zFlm`3Sn{Mvk6MByPnq%6gNYwfx@b#|D$0v;1p7J#W$)%kKs11(ViV zvf^wsX`Ll2&Wk3kw`9e6$)pXIL@k?4dft+#WwS{ySQ53oY|=(cqLx=odeM@oWs6BK zSrYlaYSJc4BH!0c+H6VW`?^V6ELm~3n)IqAE6z5PUb7@>*>2M7mP9R0CT+C@k#?B0 z%@Radj@rX|?)j!8Q$!KPg%y=4hD?KbIc z%TJ)^@0#?EB`CGWq+OPv)O#lFwgjd2n)I$EDD}Qc?^`%-K>TOY2Nn(-5dWF9&%%)d z@Xw?VEgU)k|4jPG^1ln}V_=De^9SG`u*AXv1n>`7V&Mb=_y;Vpa0CJTGwCx+u<3wF z2Q0y+gTNO{u<3K)izV3f1@OhfIRx+z_+sH80{91fv3v*AVc?79TcC~rUo77M^_59q zSvZ~m{sCz$oKFD%fHW2kD1d)J8Ve^Bz(3%NEiv#Qiw4{N0q_P}G{p8l1vSK?p|-yt z)KH6t+5ShMhFLV+_ValQX?%IWeZA;vgl@8Q0iujM%y@}aMfsw zZn1Glf%wm&F}9pijIn5}?Kgop)}nE?oL7vqXuK`w72_?MV9R;M1dArxIIjTyS#+x{ zcy+5qlWf7ONfu4E1+OMsG{qLYnqtvyw!a27rdl+^_MZhc&7#|FL8<8$&9wbh;N51? zEZct))C`O6u>F;wZnx-8+g|}{rbTzz{$rqKSv1?0nC1?P=GYR`+-cEVTVk5KEShIa zOf%b}`L@I~b1Yh5OI$qHqJ_5Xt>#&Dk1ac@`4-)4%Z_S+MT>3OQ7yFSK3ig%MHby} zOH6aOMGx2#)7)dxgSNyp_geIjEiuhvim!?x_L?zd>EEqkj6EPBM2z14#j zEwg2B^^ir6+OoG=V$owZ4mJ`0S+v~7(I(KDT~(H z5)ZAiXq_$b(9;&Jw`KKv#-a_jL`JJE+GtBW^sGfM+7b^vXVFWx?5);Vw8@spXstz? zZP}l%v*=}8Vx;vJy<$s*yuqR^wnR(MTlA_e(b5YRy=KcUYokT4+Y&duXwg<%c3Cf3 zw9S?XYLi9VZHb^ZThwGr1og5-Z`!gyf5oDmHjYBE|F!5X8;7BY|15gj#&Ia(Ka1Y6 zWta83MZ0VqiMnd5MZ0Yrin?l>Meo|OQ{QgUUR(C(O%}ax<46?yUyDAlaVYAlH!Rv` z<5<*HZ(8)Bje}9_e=YjR#?dJDzZQLL<8T!FUyJtJf>-ZY^qDOvwacOdwxHB*iw@d? zQtw*yxh*KQ$D%K6L8oXVKTTVAF>d9kT_S zKCb#O5D4PPO7}Ss z#F3Tm3m}LianqMT5J%R$LqHHm*1W?&5J%R$BR~*G*1WHP7LKfRM}ZcOtaM)kEgV_t zjsYzkS?P`gEgV_t2H7;#k+^BFP178Sn}*ml-I2Iys7<#y5;qOAX@(SLYtsTp z_EzI;TIfgwHQuI0jzmxsY`WW#2x_8D_c#(k-D=aljzmzCY+CF{1U1>F`y7d&rr319 zBN5b8n;vi^f|_R2gN{T{(`|alkqGKGo0d2dLCvt~VMijU+ihCvNCY+0rbir!pk~>$ z%#jG{4x1izB!arrrpFwKpzgA1xg)1Nvu#@8NGvtSrY9Z2p}96a

    VVvuTwhI5gj; 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 CJq!N; literal 0 HcmV?d00001 diff --git a/lcd_4bit.d b/lcd_4bit.d new file mode 100644 index 0000000..6e4a8ec --- /dev/null +++ b/lcd_4bit.d @@ -0,0 +1,3 @@ +lcd_4bit.o: LCD_4bit.c +lcd_4bit.o: C:\Universidad\Keil\ARM\Inc\Philips\LPC23xx.H +lcd_4bit.o: C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdlib.h diff --git a/lcd_4bit.o b/lcd_4bit.o new file mode 100644 index 0000000000000000000000000000000000000000..a16d9defd407137b47c77437d6ca4f3a3a5be755 GIT binary patch literal 74024 zcmcg#33waTwZ3E7jvxUNC(u9xRjDZnOORwcj#(p1a;!$Sg(SzJO`mXVk@(@*t}Q2_ zkJknomQwbemX-iv-wU*?g|ZY{C{Xqm3WPw*TA-zcmL=~jcchVK>^pb(zNatB%w7I} z?)~pM=iXT~{-`S*H4HDJ4YvE|jWiqzZGzK4PAzf_*=wH*OXJzSD2qY=}j# ze!6w*F1u~rZ}ap;`@Z==)kUw*7N@_yL-oB|ZmYxnV_r9^Hg1^%+bY=3g6+0qo5AhCHetJWsOG*^Z@+PKplai0 zYhSR=EwaAZ?n+KP9_n+ltQP|g%)_?fcB1;rp*|iW3z*Hu;Tt#C8ppq~-q`TU)|7bl`=aL6^<=tx`L>9Ru8u|n`|jJHUopNiuy0>r-{HZ& z{#@gVfx`S@${)!O^&eEs>xaDFk-o8m28Igx(Y3>)M+Wxo3I_H~ME76bJv6W;KRPzh z-`l@@Nq%5(IW%B-dTB#wd7=}JF=3TxM<$V3o*3#I9PiIhQV(h@Ppujl92gl3>>JDF z;!7h*+UZC{(_P6#E3|ER^%1!hqr+>*@})NSjUEw5Mq}KmzM?+U>%u#aE-;Px)~MrM9*L)EFq>Y3t!$IP;)A%9M(EN(4(AM&%MvW&GX2DXB2l$_tN zmK7!`+XQ8JY>A5@E&yr#+y!Mf!ZtGV=nd7!`HqLS{x_6A_?yRs2w(;H3_{Gs5NxTl z#H?fXX(QALP#x-To3(BCLfPC>Sv!`kgEY7xe5$v#451s#HUygF7#QU8WPWIP&G7Qr zaNqdq{7_+xtTQmabYN^?c&KrCDqm>J=lk=cbfDsY8(>c!+yDP?>=A5h+wf39OurP4 zTtkNj*~Rmqi)=^D|3f>l|8Kw{@l#!01AZ>54gdJi*ucu6e1D*CRqrTf&~`@Mv10eS zpTPGlamb^Fv1+^i{9x}<48}3P4LUH;2NW~@=TPK4_^c{p%}y9iM)SS>xv@fTVSG#o zpuyT`@h1b~zj9DKHa=Lu0wZ;sVJwq1F`Zo|4*pY>ai+1;+TMXeZY@NFd~U_~7#tRg zkpsQsa68ZJGMdyhama~2W0O&f%~?A-P{>n+5C+20i5jW#NO~}~{g7LI#;w-ceXIM0 zffdoK{Kd+9Q{^o_<3VG)5_NxXp_gl-pS=it1AWwQs(os;@eEUsj2B2+XjsYZu!G;_}mh^V_r7~Sg)amYzE#)(z6WBEd^Z+vuY zcvKiz9X)XwwPJX1eDx4E zz(5xC+kJpZ9P(U^v5AXEM$v8zEHZ6rV5|U{D@EO<;!)t{58`~{tMET$)ov$XnJ3E( zVX<|rTw4pJ7eXo5uU6G(xxkNnZ;D!D$C_D&X4dS$ZH5ZehH2ckIg%H+DSI0@ zrsRS&^j&s=$+kr@syU~s3daWr`~mn@iT|bTYrOBrEgAymo1cx4-X!yIdl&Efaf>|G zx@fT@G7q;G^8R$(B9FB$I>f#3#XQ`ul67&5Jl4ACWLL_%xW#w{<$l~EkF_p(`8t`0 z+l{>M$1U<$>&776F7t3Z!ux*QB9FB$hMN!Ji+Q+RB;`#yeaQg)B`*Djr*1C|S2yD%J7_`DMGiarOHN-kdZltWGlrGE4npxLEqftBy z@MuV)MwYB3BvA@W*2lnrJ+@>aCw9aTDcr@6A#%A`Bpc7=0=viZeSuIzARG)g?oI{S zLvxtVM%3e`hYg%V5S=}e-l6Ej;{8iOrKDvHMz7pviZsa9iVN_kyak0e-Sn!tiibBc5MbgpsTw}KUP?U)T++l0gYA6@2AFbNWQ5bCz?k<;heu+^}xl{C0sOtUA-gqm@4B%{~!_{~^D8;&*dsAxZ~F zVp<%4?8Z*HoGi(;2ZXWn(nK`Z8iDbP#A4|{a9taIf@C1rvgFg`n0w8eTTZe!&;Y}{dBXTIl(Z#0b2K8y9N& zb5J|>v~Yy=IcR9mkIcR_=yTA>%(HMbYICri?q%U<(&r#O_O@^=(B~jM_OWm@>vNDE z`&u{_YICrm&bM&1=yQ-B`&l?b`i2@NL4sBieM=3KA|We@zNt2l?}n`;`nK9YnlxBR z^o_NFG-EQHNSd@*NW%IS z+eDh|Zza*U*e25C04s^U#Ws;92UEQHOq#S>N%SqYnKX%7NE-AlwwW}ESxNLQwwW|(mn6}l!k~6T z!n`U;SU9xX5e||f->`6KJ5D%Af-JFcX!}h#NO~kK9NKOZ=2c0Dg+tqG!n}O$v~XxU zO*lk)bXhpGeI^_tJyI49ZI=o2s^m}$hqlLr!(<<63y1!yB+RRljFm*+Qh8O9wUX$Y zDz8eqtt9%k%Bzy4RuX+<yI}xu?R#))o`w_2FhAMdUU5QsJ!xcRG-o&ew zkqRDthvF5>cPe=FeTr8tqZK^*ZpAB?u?il2&*Iffp@PTr3TC{LNZ+D)6|<(2NZ+J+ zC9}4YNZ+P;HM6dgNZ+V=MRQaok-k;)s^+_uMEYjUE1UnRB+|EQUfmpBNu+Psyu$h4 zN+NyB=2g!3Du_IPC7HtN&lIW zLE*s840H+PEXkm7TxSNl0CKiuP&lk3123}9kqin)b!H$P&Xo)b2X$s39nO;s3deM2 zARW$^3<`&IWZ=cr1(HGGh|Ub8!;d9{YWd_$K|)-J6dhf$xEH(T+5D#_g%`u-dHiQ4 zg%``_8T=xX!i#D1+`ZAH@M7D1ed1!1!i#b9e0_;Y;l;XnqQ2Cm@M7LPLvJ!Eyx2ES z&6k-JUJRV)uP01tIKBPG3$?qJD_r9g)luT|9@a zhY1fcUmH%g@LPgI%-4pK4g8Ma%JH{%p0B|@itvyJ?Rd5LdxCq>j;~8SMtBd}@ztou z3GP8Vz6SLK!98flSDv0kc-Vt>yh447;9j)jRo&Bs_n;lG=$;|C2km$@_bkCZXvZtL z=MmoEK|5Z>{gL2awBrj8eDP*=W`cXru7%>=s|5F;T? zFyY@tJnE;7ZzTNR5Rdw4;};PAJ;bAa+W3Wp{{Zo*-vrkbCebg9`u!d8sGl}IO!$8w z9`)14Hxm9s#G`)N_yvUjC*n~*ZTv#Qe}s6{Z-NUdljzrg`hARe)K429Cj7qNPrsZ6L1jx0TQ5y-TESu6>mTS6j7gm-S{{pKoRu`*pH7#0u)i7 zfF1b+BtQ}M3D}c=hy+1ghGI!>NBucUxf^$ zq&@??_0`BgO6oJPUtfa^q@+FrJN9+R5QNix{b`!c_pe8M$P1pY@!f#-4hH+sSI^^ThnkNRoPPN60|W4Q(KsGl~zf$+B?9`)14Hxd39h)4aj@y&$) zCE`&(ZF~#iZ$~`pr#&%+7NCB2ARhJ8#y1fDPQ;^r+W02I--US8PaEG%_`4C0`f1}^ z2!9XaQ9tcDDb$Sm-HUkCPaEGr_+KL)_0z^T5&k~Jqkh`>X2Rc(c+^iD-$M8Y5s&)m zPeuIL^>2^>1=J_t2>1{Zpo01Y90DIk0+djnfMeiqkpMN+C*UCX2oj)(`m+#w@uNt9 zBI*;c8~+{&P(*zK_T$Hp07cX%U`Ku&2~b3R0`}xTAVCnWoa@iTbm{y_#D~1#`F7b; zh!1Cc^&(@u;6RzM1fUMLg=K zjc+0Rn}|pK^k*Ud;nG`3fCB0ha0GlC2~a_O0uF)iAOT9KPrxzoT_iva^$9o#zJ~-T zqW&zzUi>~1posbe?8YA;0g9+kz<&I9BtQ}M3D}YUfdnX`J^_33Kan5^H=*@sV!8|c zFT{tu;Q7guj}RaBg6F3%K1O_l7d$_K@NdL7dcpHu_)idz`f1NZp%_NOPZ5v$Y2zCR z{~6*@KW%&y;Xg+_>ZgrwCj3^!qkh`>7Q!Fn13c=dJrjlEsNb=ONBy+%4TS#z;!!_s zd=ud}ARhJ8#y1oGIK-oV+V~d2pMZGOPkSZ`wV{3|A|CbA#y1fDhlof0wDC=ZKMC=u zpEkak@IOL4>ZgrwA^a(bNB#6?A%5)eR3tzF^$9ovo`wXdpgsYIz|)ZcCDbS270G>%l;a8vfZ6Nt> z1_gj3o}6HLIpURw6RfNz8F~J#&O;E8GupC8$a8<^!2aj+u9Q+AudGYA2#qvK`%ZrD{ zAE@9*7*ATui^q>~F_b^!i+5DMIy)ZZ-_JZtWzpgmo4(Lt<(>QU^(7aOQ$fV=Tv?bvSTbqj{5mn@IY6!*rSBo4m_&Z^fzS7)* zg9HDTB1exR06I~S9|wTNz#!_G?MYaL*x5Skw-ntIW&gj$h$=nZj55K zbmF1L{H@3XjZsXQ4kT>!?-fb7F&=oRG4B_7pfMAi*-t!Gg!tj;4~it*7!N$um=B2u zrW}m0+G8!>S^Li-Nlzq^?TJtH4AR8Ck}t0PR~b>4Cn9o%kIIPBF%LbX@bGaNPb#ul z^{NZI^~m?w{=1B+XQE5elSssmDg3952mUUM2eJ7!%cn&qFCHpiNBdckL=L^Si^_M> zeqKfdL+^ozhJI@qQ99;$2TYDFh%`F6$mC`A3G?i8N|8hkz4r7I=6AH5T1Esz?}3QA zby^uwI_80ghW_+29vpgoCVn{jj54O4iLT*KGW7gV*O_HJIP@M`L>ir4WP-~k6xFmB zt9<3-{OW8+n$P^rKOhC~Itw<^8T19!*`Vs0N(H?1yWJlHIIFrA?1ZMp%ufhCd8eGf zq|Su^R-IHifyr!sieSY#hy$2^4Dd4mD=&aMp{dgsAzHPZa6(hBHxgPgk2s;J+ZPjB z5sDnpyt==H&Xpqmh^jvJL=jvGG*u$#DHLsO@3MzjkLu%W5fw-8$G0X8&s z`&L4$J)jcJapM<+R(pUAP5u5Qpxwj`8=Crk8=^g^#&P3zLhGx>apMj`>#N3b<4!{B ztHyETEapN&U>#N3b z<8eaktHyET2|&Av8g4J=O63lVqPXKlkH*9F?^b3e~;Q=-@_4-9Z zt3AMmrf&b4&}t8;M04DDiO^~fu%W5nF9X_5+_0gk->)FrgK8W%HWON3HI5sv5?Wt1 zjvHGDt*;u#jn@F}CT>)!#&P3yJhm7Ab*e``*#|jg;zM?ssA4mUKvfC@YMf*GTwuJ98dlw@%s94MEOYK z_4VVJ^0CD0>&H>$--Pc-tKQLG?)~Vze9PlM65pileSD|m6Ny*7o!#O1G=85FKBcQ?dRJWpA%jkSsfa{k#&6y6j{#^@j>7qJWz*ca>r1ii^ysvC`Hy| z3GODc+VJFDKahB(Ha0ko%?5(Ih^#g^g_h$Ou8ypgaE`3U6WmQ?wc)ArCotYcWU%3> z_a{ocIx^Vs)cqeyygD*e;yJROB=PFVV8c`Ye?)jUk=2H${-4Zv5BhOrJw@X6_2bBT zs>JK-$C33kiPzVUBkSpecN1AF_2bBThQzBQs|`=%cc#RvBdZNh<98O}-9%O!p6vH* z!n=vAm3WS<=MdgiWUVCN$a+CdH@w{4ep8O$z5e5x?qIrA5%wzyN}=^90ME92hF=Kq zSW@w@;lxM(DZv%L@Nk5aY5WY}3DuN0G5jKgt0pB!I2qPPfVZh8?1|wQ13c*oPG)%t z!c`A8Ivt%KHo6qx881iYpO0+KRUy&C%6lLw83dyZUDF|e{_c5 zh;TRlXoHhK-UM)0{^$(uP z{Q}^wqJiz`)c0Qk+*LHFgmW~w4dAZa*#@V^-wtqB?pz6HcfO0<*?N_l+_{<0T<)&v z4!d$^D?!Pfe+6(??(7V|2jH&U*%^K>!Ckns4NgY&Yk<3QXJ`0*2zTSoHaHFI{Q!66 z&d%@$0Pf12ZE!N_2NCYZp(^3>m16*RQDXMg-X`J?sfFZ&}ecOR?iZgAy~R)Ug0J`QkK{^$&U0^qLv(HZ^+ zg1hiX8=S`FNr1cZM`!p`2zTR;HaHFI(*SqnkIwLC0Pe~kZE*64XA$nkA1mSPkIwQDXMcRDCINrzmVU2k zy=B7g_%aj*;g{m@Dxb+Ou2pc9Jn|J}Q2#K}2~Xl|Mtn^5m(!f!B+jb{kEqTioZw^_ zTd4KXq~e#54tQSny(aOBGiWC~_5O9lgZ}UW2W|cNw<2! zm7_GgZy|%L;kDtZgKs0=&G6dbG`#O1+|BUX;55ANQtRCeZzZ0G_iqxf9$p)sdjB5c zT@J5}fdu$FFhs2rEe$WOZQ-)~KcFz|a(JyArQ!V$8C(so4No2XC*s`+VIr-efBa>t0JotoO-stmKv|RNaTd4u|0NjAN%ZI(^D_k3DGntf4 z*#&%7cpMcfpWdioC`o&~#4GLzIN?d#69})=w!8y$c+&Pnf-6VX0Z!8XkXxVfK)`-; z5)mXiGKza*4*lol+>eMLoybf+={ey^fRhQ|;RR0$oWdPY8mC=BUJ#y2_*jQ>P3h1B zeucsr$Y2fm6xZox8p1e}3f-8em7!#wXGy%;JZ*R~&$9{d!aQwo8l7_p?!vlka2lL* zx%F<$vyy<#^E@JOWu7(y>i_vf;Kn>{coN_O!n-j~8=e&SF?Ya)c~;`tJbyxXcjjqh zAO$X}g+E7JdCma8F2z;HMk-6FR;=X&CF8u9;BY@}a^H7=Q_C)4xJnxbI1SCE3|F2< zJK$+(HW5Ce`kjs)&Zc>p?0lj_^>cLx2I~LiB?g6iJ1~$0SCkmSx?{j|>y^ZiiE9rb zo99&o?@;}{XM6iObY4yH_O5QlDU$=9`hN}KV_k~tI1X^KfNLeZM^`&O9luV(57UOz z@Lx~xj;_wE;*{0ie106@1|m2tu6i?<1D?8nBjKZojAHJ#zeoEv zN#Mnj`2C-^6GJK;S1$7Hw#2`7zQbf_OGmV05x?#2SGAFt?JS{zC%SvEOf}Jz!%NfL zy$D{cT0=RY$<2R_XwW6D7##;Z8Q6V@kExz{vZHyHx}VXC`NaWEZGV8#in+xBO}_OY zqZLm(IiRWEzhSiEDN;L{C#HuOt$5PO0ZsjWn9+*ooE*^9@82@Id2(-bKvTbehiLV6 z96OvRrN?Sx5!-Ta0bfIW9Lp3_Z8^H+1W(oW#1>aBBViGV%gCpp4Bjv~d4J2{CE{lQ ztXe@jU}>D51+4njst#xxr|0mZ?noL_;E)$u&trHWG*e?}{7N=8RfQ+<%naJW_s8uu&uM~;CP^)-U zHZxh5;ttA$Lh&V$SBWLroz2D5X}D3N@VJTDNU1GWHje|yYyH=WDH`w0rX$Hpqr-U; zT=_3lC%Y`CI_Jk$+o?)s_g5lHe<30=yElkP`9#em?I9W8LK^ECGF_!<eVty#6D zSGJ!$<^#gVdlXmiosLia|2yG5$j6TH4}!y6RF&>k*?eAXe8~8OVg__*KA#5vlkqWi ze6}5*y8kbUZ`E%<4gbf4&$cBL%S49`@S@}2Ops8$2hNFr9N<4p5Q}(d0ZH(QBxvXX@bNssH=B;9LO1h-m7z3GoIrRt^Mnmg z@|;L`H}ixIPwM=T@NVV_8=k~DiSaJxiAp@r6F(xnn|Z>9r~aQzcsKKe4Nv_)h43!s z2^*Zce=5P<%oCM(o+nOYyo-6lhNteI&UhE|gbh#KKSScx^Mnmg{XdKFuI7nK0-h(% zW&$_!gpGg{IEM+`%o8>OlHgoP;9{Pz5s(JwnHs2rY$XBD6X%;6cpxARE-*FlKtLM& z*wnxS0cr3PQv-F7t<-?$i3?2)JP?ouKQ%S*KtLM&%+$aG0cmi_l#Xbk@+4{@pSfR3 zWvQ+nRiG@VD9sa_h#;EmiY}RaN#{U7`dmf?k@Vv34mjP@<{*hK=SFnFU+(EttZW^c zK_Xp26zO;-m5X+0bMTyTWsyVierbCn_~hcMB7tIU=s-Y1TwNqkIE(`U$#6}PKw)im z0-iXoB?5RjE0Tkk?dT3CpJZHD;z+8lMLV>El(@dcq5i`a4kV<;4Hgo8+vJJlM&iJ$ zq}>@^Irz7@HxWZLsl0n;?*`v}`#BMGL^4aX?ULW0a&wVD+b($~xrGSY5^Y_%sJ@Vm zG@`c_Ido;@`!=^vNrW@DFvzRrJE$xc>6)CnoS+m0@09R_Hk?A>T?B_KStyV;1&MPv zQNT4UPZVVAzak1WRK?$4va7)1?;cj6Lv?2CfF~L5HSvnr<$xy*eogp9`cPd7`O?aL z1kWx@dk}zQ-~Ggp_QpUGJTwKKpDDA^wzjx@k@CY+7N@WjZqVUt=oM3CIS-pE{k5jw zT4=ISZ$#AA-<1(5pCxx{5DnWS79P9`?X5{6I?_XedsK?2^~Wm6 zJol0xzJFZO#XBRd$vFHir1nn5%;KOu+x!!fD$~^l_jb~8h3h!*u;u^3$^(DU$O8}A z)RR`8q_+la72sb>m zS>#{y`J;s;7SCwM5c$^<|74*_CKa=uy-T4WjnNAh7WEp%oHLgPhWeq+I_78XzX@~ddJSZO@y%P#QODewn2DU`NGGV#)H z!r;gEp(xzVdxOfYWjOOi;YSI=c&mt2&kgpYl$L4lPKm{rx|~0er_`Df$KQ$^sxuP@ z2J+$$^4A=lvpu@+Wi-6y!A@6e&{agksTY=U~hDa7sMoSxz>Kf0`8fYVyg^ zzf1xTV)EJ1M<#;@E&255W0S#)lzf8p$&_?Fl1zLvo{Og@U%uK0gWo0hDK{df`eT9) zc(SR_rgTJ>r6SQKaadkLL$q5#X0_fAS5IyqxGqZgsqOXaPy^BR|fOu!M85 z5Vv#iMbndu93H%q|H9EJMG6mY*+e}#)!!Y9Msn@(h~j#ly&HVR;50wPH&nyjv{OD^ z@ROdWn-u!-jsLLk874tY^}8d7UXW3qNlLmqYqWE;&`IN2MGpObw2)bz?T>e5Jx><= zhlbB7a(FPS2sPu}B83OD;=i(ep1(5|BM0%SX@th*{4yR7J!++)xuA^3L$6v%m>>Hy zhh^v~Ft5F8C8zsI8IPAB8bBrg2iM!{3~ zWhRB2h-K#>K`uv*_GnbS3a}H97*`-cDh^9qSdDb2b8+<)U}qvlu0$rBPH7_XM8s43 zRYfAN4U)e^LY~&{C9&W*C9(=2U>7Ey;Sw5 zsGWR?PYAA;Jn48xB+;4ZRQ%y{MQG3#ZHS<}*&ygkFo`Z`MUYv{X#N2ElQ9PjG*dG$+7D?hQ_g- zO7k^w#qBAl*6?!k7nMwkdk~IHWHz_sl+%?h{{aHcIdBb57%vQx`?ylfQdS>EZ1qmWwyR zbtFIh%pLwZ6gL*i)60}+nAp~Gs?q@5S0u`QF{1m6M47DOGQRA(Lz8GYA1E?Kv+AYD z1f8QHeXzuoT+*(%zB_TNXkdS1W-wmJ!B;`B#%gn$aDhngh`+Xc}@h>$v+T5BDGjCw>c3|_ntHf6t3??KsNRi5kUCSZvhYZ(^7+F zZIh3aLkl?cJVOMT?v&!{of83R@GKEzmG@+v2uOqHxC`)CoVB~a>(l2Yf%566GE*c& z;)UrSnLzm~B8M*U4U0c9K~Gk(ym2BR4PIb^bWERs7ojgQK|=WynOy^3eZE8lnTYB^ z8#|s?c`r-6zBBXs?iGpG_hnw%y-N6~t0(DfeULX9w{RQWJn`f}K_TTeqDU{pWokN+ z%64f-26>P1bxDM)Oy%=e4y_@x`ireKa897>Wg(65WX$h)g!Ncsh{h!yBEJ! z;=@WR*gMGygsa{QM*Q6~@j&&?i&=d8st{%mkG#psks5d_#7WnyA zcQUT}5sniHHltA*!cG_g~&UG_WQ=IyTVX+rNBCeqeBU zB;A4EXmt6CfuZH|=Pw@^>Kh#I&o3V<^bZcKn7>LuX&|~^bnm?b(c#r21B3a|eF9DM zgAIXiwT=%A_6HWUe4CC+2NBiPQ^tqJ238K``vU_*1yNm9N{_9AvoxqtLj~0}gTq5B zMYW%{0ZNRo86M~t)rP-sRqv=sjSYM^pDTzNBSvU;YAxnLs&2h77R{OWAESR@4J7@$ zeP?_aa?cc1UlY5H=2!D>wMcP!-Sfgo&YO32)nIx33rh8I7wXFjbyEzZbH8~nRt?IG z>GB8{mk_w?2ZRY(Xc&j?H}4EzZnSr(KQ~tBE#$>(hVM8ZG|N~hcFX0~iMpc=XrY*Q zr!N=j%p|N;t9>_6O(APuPBl9p!OT7C9x?W)d&*cUcCWi$%&5BswvQXT*WGEPa=BIc z-jNZ|wC*{>c%^EGdFNK=a%0fXhVY7`LJKC*rmR}syN2;*b#UI3fF8G@XN;J_;vVQ! zR;h09D&wu{mU*YwFy(^A6-PCM;mF025S9TVG&WFHt6N!Ryi*+n(^&>zpXh-9!GdeI z69#LUwa! zcQOgKhnoOgCHZ!ISt6TjizJfR>X0yUl#%I%w|u}mwxGs$((qH796S;NSJ#@4;EyoY zb-<$qa61L_=R)gy^Svtua;40<^8(P$Q(^Rv7#SPQC6>kU;v8P60Ls(M?Cv(qmah{= zQ=!UTlq+BEaE6&1gC|jf>*Tv>&opxrT}5JHoL$Ua7Nx@p;~X=qyA87z3gcWer;BnL zg>jyl6ZNKI0>v({-5I{K;d={wWenXm8I9!{R}2*9_qhy=XuV?) za+fFbL&Ix^m&bXYKR*fw;}3+vVko6}Xhu#M z9%sy0>$}vbJ5Lx>gzs9T?#H;ZJEV87JB=95hyQ)z6!_n@PbG%>mZw$?3=WKpEf<=O zXORXDnM_5)4eQp;Z^wfdeG+D)qEGs!R#p3^`KpZ_WAS9)}Boall^h5`p49DsAHz}K;7;O((urLOKQ9>v=J48ae8JlV~;>m)F6 z;DJB`?OTlaNHUp=CDJ*dfV!|33LH(E$dNf3^^s)4_(t)Nh=I0A$kz`Fe9v01qpY3- zH}>rSaC4j-=AdVMRqVHe5LI7=eILv@J0@WDR9!EoPCa<4&o4yH48!N&!#}g;%l;Wg zoiV)@?6*8ih$*EEEQg9FM2Kxli6{V>VOwh^LZ+G-W{qjq3?a5NlUR9sGaTJ#a^euj8f)*!H9y=+@lnR4{KQ92mLCmhw!@+P{>wcqhy_pp?NtAr36h65^mz#$wRw;8L>G z)I}iKA>{?wSj=8j%I4-`W~7v9A=y@l*75=(f$V50TarL#Y*!F11onvb6z7BxZKd30 zI~=w{5A<>|XPL=%Br|b|QUV+H4NDRZv4oQ_+u)ARf8ex67@R|3#5zhDnC#pU%F&d% za7T#LPGq4xq(U6ZNgV3*mxu}NB7?iQljS@iy1zu$v=mnbJ+sNymo*Yo)i(P;#ly^m z5Z{!$(CBaRE>>91yFz^1tcl0`FEg>v4w%fzWGyBR=LDDZasu;LG{WKesC~2x2kOTi zJWL*UggByxHY;(1j=ri!wpEA$xeKWO=3OCegc&`j`=SDW>*YzPU_ABSlNI7ZAK zpxEEx#39oTgv2N(=In&+8Z#3@6q?9`#}6Py*Bm5fLxb1OFfi5%vF<>*147$A5Cw{# zYVpBV2p5)*A-)RfH*lpvA4BXU%NIe~2eE&;r9PY+h@a7_k82Cy+h9o>qDCB9miCKG zS-MsnP?nw|;3TQ|F~l}v+p_ew;_tkeq&kL}DxND#PZM{PrMDA5ElY1N&XZ}h!YXM0 z36RG9yJUJTq@RX;oZql~6{HK`gF%^w4Ho#S7l|1nhlxF~D%3*JX3+oe-wa6n6`4uO z>EdcCt)P`cL%Jr(mL81zi@PQdci0PsV4lTq>R0%FgAluIJC{(f$&c}*} zg~C3pE_O5s0JZmoQfk63f1wiij}L&Em&4pfxhv_YVC48Q;C%A^DlW)k26o-365oKR zWYmc|q7$3MY&^+47#Of2H;N`i-i3um)n1|zc7S3KlBgnn>H+~#wUMu|K+e6Qs%|b- zr&6r9JM6{aI|rJ$Om5f9?b&ksB5r}X9w@NhLb*-i7AC60ar-rJSGhe}=ASOp=gaMl zxCKR@$1U)@BlAC$=}%?48k&gZ({KyCv*dOTZtI~Pa=VY*V#hJR9k+Wxdt~}-xxG?u zZ^7-JLOg+6sP`dkt01^8g#J}cfvF0&;A`zNos{W*nO-H+>t%X_OkXI|8)f=7nZ8S= zpO)$8W%_-Y{!pf8LBH|%vvCW@M}4V1GM$y_WinlhIIx^y+-?t13b(K*G4sER=`RVf z9=FgxGoR`MKh=lrS}ccCunm%F_5S&rSuPXrYQLE_yOxe3)#b|zw zpo>wtm7^o`<)Ju#{>ste@sauATx2z#ZsrD8jI3IcC>)uu59cr=7_=bqyoaw#0N}_j zEX{Sa=W>OdkRS3U*9&i zWXamps=^UwecAriy?v|%cXM#KPt5Nd9)d&m7J6}aHC_P`^Ls~E=hhsN$IF;>;UhV) zqP{+z|IT=RtWaMMrEmpW4EFWsMn>_HG4AyZ=HbflSiX?!8y_7T9;M8Ip#d%(886V4 z60Es)bfA#W^{wuwDx5-vETWY+x89Vb-lZlL@S;SBpI9T?XiK%~OGAhRZpKhH0Ikq# z;|c4vPPFGIEsOFv?N zAb(ujJ5b22g^Paq+=}tBqsU!G!6WHD#`u`%&kyzqE_x6r+#wkPYm zGVuG$czwJzvalY0fVZ$7{!Bq;VSOBKKdcFh`8;QoB4>TSsP7de`xcP~n8oOlyfEg$ zZZteUxIolE%bK&Xj)bVK@*8meT{WxfOU7(tXJZ#*w^}$2!%NqAu^1M#Fx6{)sQ!WC zV+O%QjhD=EiEMswa)#CNdiWno=mQvYmot2#k$2X@s){~v?jb*T0Q@e54IK>gE$~H< z?4kogvAHhCI`sJ#{6AQP!4B_Ni_>I<@=c9c0vU#^#buxH=ICP0A{|tNCEgNoVzG#J zu*WYJv$huZmedjwHInUk0e0|AL>z$s;itq6mkP}^WNvFr6&tZa*~eO&ILccN*AY#| zYeau9EQ%z0dpORORFsCCDuE_o{gm;-dXJT#{!42e-rut#>sfig?*qkj=PK2h538}_ zAnq!@45?-C1rVH;z(25{VjIjxL++{>JUp}7E&_%4oc^Cx4OTXXcEvx6y)o%QKKj(lt$74)?dMDIB-h|!rL1Ci%=(b= z=yI7TD@=21$=KnZ0#;#C<38Bk#bWwcgq=la!E+Z77CTU^u?kK(klLUcumihGn2Qql z--TEqfP3&U%S>~`vTFFxxQj|L2_Lz^^Jo6R0n_Vo7b6Irb2sfDW>+dy~eShLYl;j>sAPTOKv zaC86x1W=C|WG7c)?z(OKfZ-3fQ^2(d`0TnZGB(5a75EYXZGns$BeVQic^fz%gOB9h zRlw;y9uq%r;D6hQ_hkl@z_~1|12h0;GJtLayOIGhZ0r!y7mMoIl&+IF$RUYlLGDc9 zH{}2V`pg!)N*XMILt#EJ_~#-G6=8>G!dHGyr(C?TYJQ*=RrHBPm?i5zK@YER9a$sH aDdCf2L$*|`K|3QNig$5ne;2YO+W$Y^pO3=; literal 0 HcmV?d00001 diff --git a/main.c b/main.c new file mode 100644 index 0000000..7f0ba53 --- /dev/null +++ b/main.c @@ -0,0 +1,96 @@ + #include + #include /* LPC23xx definitions */ + #include "LCD.h" /* Graphic LCD function prototypes */ + + extern int j,hr,min,sec; + extern char hrVal[2]; + extern char minVal[2]; + extern char secV[2]; + + /* Import external IRQ handlers from IRQ.c file */ + extern __irq void T0_IRQHandler (void); + extern void PWM_SetDutyCycle(); + extern void PWM_Init(); + extern void updateRTCTimer(); + extern void RTCTimerEnable(); + extern void setupTimer(); + extern void sendPulse(); + extern void delayMS(); + extern float calDistance(); + + /* Import external variables from IRQ.c file */ + extern unsigned char clock_1s; + + int main(void) + { + char cVal[20]; + int n=2, m=3; + float distance=0.0; + int release_time_min = 0; //mins + int release_time_max = 30 ; //secs + int petPresence = 0, fed = 0, capTime=0; + + int feeding_time_flag = 0, pet_presence_flag = 0, isClosed = 1; + setupTimer(n, m); + + RTCTimerEnable(); + PWM_Init(); + lcd_init(); + lcd_clear(); + //lcd_print ("Local Time"); + set_cursor (0, 1); + lcd_print ("00:00:00"); + PWM_SetDutyCycle(5); + + while (1) { /* Loop forever */ + updateRTCTimer(); + sendPulse(n); + distance = calDistance(m); + + if(distance < 30) { + set_cursor(0,0); + sprintf(cVal, "Dis:%.2f %d", distance, release_time_min); + set_cursor(0,0); + lcd_print(cVal); + petPresence = 1; + } else if (distance < 1 ) { + set_cursor(0,0); + lcd_print("Dis too less"); + }else { + petPresence = 0; + set_cursor(0,0); + sprintf(cVal, "Dis too far"); + lcd_print(cVal); + } + + if(min == release_time_min && sec < release_time_max) + { + set_cursor(0, 10); + lcd_print(""); + if(petPresence && !capTime) { + capTime = sec; + PWM_SetDutyCycle(10); //7 + isClosed = 0; + fed = 1; + + } + set_cursor(12, 0); + sprintf(cVal, "%d", capTime); + lcd_print(cVal); + + } + if(sec ==(capTime + 2) && !isClosed) { + PWM_SetDutyCycle(5); + isClosed = 1; + } + if(sec == release_time_max) { + release_time_min = (release_time_min + 1) % 60 ; + fed = 0; + if(isClosed) capTime = 0; + } + + delayMS(1000); //wait 1 second for next update + + lcd_clear(); + } +} diff --git a/main.crf b/main.crf new file mode 100644 index 0000000000000000000000000000000000000000..65ba35b46d2680fab6cac3b8e06d273b2e71e2c2 GIT binary patch literal 35156 zcma*P37nM0@jm``z5N~@@s7Dnd}Hp*?92d4qDhw7UDzYD!DfX3#b7d4G&89I32-~qjxh7KE0o~_}3>GXhehBgm4 z`Q!mZn+FXWHMnU&%gDh)ho5|&HEHwO366#Ty6*g)MJIPAqq=#}fV%UB4jX!5%YaN> zI+^kvq>iy6wAp<}tY(_cv4BBiFYwTVGw<#~RjlRKC#Xvhp6))*Wrf z=UGSOa`g=r)wQ{b%5VPM^k1#u|sNo_Yc|L{~2wm>V{i^0x8z1*Y$HYu8fl#cHNnqMQkH+1o6Didx-1fV+NkE{ffqCl{)2S}n8Bf_roVxn zw~QP(vMFKBJ(!ua=CmDa1t*9=^x%SXq^|WwG@4Mq^>;MxFm(Ny^|{)*%0AX+R11gX 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°zlv1e^@XrF_l zW6#>^&|419j?+9K!?a=#h%l}PulLo-~7bniJd)0If~zC*KIiF5~mC9Xue4}c}EM7j@wC9Xue zkAN1g_{+yY3s?N*6QG4F{_-i%!WDn{3~1p>#{D_a!WGZ?0%+li=X?pYaK&@J0$RA@ zIbS=p#1+qJb!n+98PsT(ZgwSuy40mxT*;s=b7`3?8Pw%2Eq5h@8spNfu4GVGxOAH< z8Pr&pR=AQujdSUCS2C#aF5Tfu26d%ND_zN;Cb+c9l?>`Cm+o{WgPQ2lYF9F-NiN;x zN(ObcOLx1HL0#k08dpwxCcCuOm0W6yOZT{fLsMP4*A*O^=F&!2aA>+q_ql>YGhDjg z6 (k54MXqHP4xWP1d_O&iO=n5jucIhEk5a~LX9(Dzh=D75TD~L4LrAJ*sr0ZSU z><;wo;5tqJpW&if5ORb*7vdu1y_9T`)=F+8}#Ina-y37+F+Tzj}Pjc_AE?wbC z?)`*IV?D{epLA)QC%N}iE{*pj_kP-?D?P!XXIz@#2@Y*@=_*fh@9i#4^aPQfb!n0( zi1eIGS9^j;J6yWP6GYnS(qvB%sm-OSp5#dFE=}_!M|$3+>7L|BFSsxqZ$ap`(bJnS`>=6ixe zue-Fs6CB#>(n3#g=na<^d4fZ4x^$B#8TUSy7JHI$zva>rPyFg_Ac!Y^^$rlk6TjLI z1o6bL-UWhql6$`g1o0&IejfDF&}fe~dV)ijdUT&BICPmu_j`gvmwU9y6C4`j(Zit+UE$Fqp%0Dq=uuB_Xq-oz zJ;9;z9zEs>4qfTdpgnilL&T$M|(rhxzVFHJ;9-Q9=+`e z`poy}9Z%3_fk*p2iC_yode@T(w#cLRJc(d8dGvuNaci+hA9@nEmU#4$Cvj`3M<06< zw{G_66HnsSEgpUD3Fa*G=nGFUXSqjTdV)E(derJmjJnOE(Z0l}6&_vghv$DDjq$_t zKaZ~P!}C9n#`@v;pGV{T@chrC3BLHjYLBk+#SiZCXreEEaJNU3eDQ-d9$oEAJX-6~ zHNNca*LgJAmph*8J(}Xn-hP8eQ+>ggdpw%v3%=az(R5$%Wur$ke8HFdJeuhXzTEH8 zEMM?tlSkM3f-etvG}{+^dC;Tle8HE8JeuPRzC7&F4ZfhtBOcx83#vTo(L7)BoXsB1 z_a)DH%%cUq%E#^Jtkb8P9f)miv?9^K{(((LePg)d06)1%vcL7Fy? z?(hX^+C5t73(`FA(JEh%<^_-L^aW{N^k}s&Nb{0MYka|%T^_CV1z%qFXq_+k@`^|6 zeZiOA9&PXiUtaa-9$)Zf57xOaKJ*&axi3ESI@Y-_KC~C>+?TlZhDQ(h61U#;=s{oN z);^CO@&#$$!rJ#`NB=g~zAtg>9jtv{;?{nweP80%yIAMGM636(&V7ki?_-_&60Htk zo%<54KEOKn<+SlbtaD#Z8$ZH2_vN(lW2|#O_#v{EPds|o4^9O2sYlQG!S_LZhPChG zNiLlKVeR{Plndv7So^*_%k?GJzKmjm_pX1Y|hsYg?xjtQX2+kc3v#$5;!|?>#Pg_-YJn(pfZ+`>7eujU4ZB@0f z>W#jAM62Rc(0M}b1~uQek8D+ZzOX>3UF|=z77C?*ftD%!>xzHf@$Yo}tH8gSRy7Xw z7y0&4t?GsL6Rn$s(!WF*9`)3}!@ob`UnTz4a$j)&#MgK*YY(U;LcQ94sI^om-9ufA zhv;tZ_@R3$omIN8nvBY~_}Xn%yFe}Twb!a%1hw4Peye&O)UCcgtX1tm>)U+I1OFBN z^}@gURy7LdSmA3nz)xD$Px0$^Ut{q4)~b#~5AO2y@vZ8Cc060->u+NveA`;%>+c4- zi`Lz={)5(k)Vhz>wfd~~!>zTx{$8L@f@HM;Ki75qEK}>+kFnPK`h-B2kxnYzMd?%3 zufg2l>+eIFf|YbX{7>7^@E%|PAYe{kH5~JNudh!G^eLoIBVDC>pu$Gs{F!ur`Wqhh zy-$8tDczHFAF=M4GzfjZ-`79H8pBgNOdJVy4=|ytiD#gJ^qFem4sBUvo%H_zDhgci literal 0 HcmV?d00001 diff --git a/main.d b/main.d new file mode 100644 index 0000000..bb12f26 --- /dev/null +++ b/main.d @@ -0,0 +1,4 @@ +main.o: main.c +main.o: C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdio.h +main.o: C:\Universidad\Keil\ARM\Inc\Philips\LPC23xx.H +main.o: LCD.h diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..f4aa24a9c9613e5eeaa6ca8e9758b1a739e61057 GIT binary patch literal 71568 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 QP4pG)D$oS3tgb~sI@2`5itE2C;Zmcm7` zAXK9|r(wndsIUx(@MNg^a32S-k*ep*K>)54*UI-Xy#ZW3(Es6LA?G1VGG- z+CfNIwiRgOU$!+hg9{DdeRu?@hUQ`nC2l!=DCEI(z@*qc>Y{i7_V|TE3$NRZ64=+L ckHRb}(a7%r27lvlO@#@BFG{8Qzb4%N9|O?Dg8%>k literal 0 HcmV?d00001 diff --git a/servo_mg995.crf b/servo_mg995.crf new file mode 100644 index 0000000000000000000000000000000000000000..1fc977cd29b9f989f1a9626350e53b3619566184 GIT binary patch literal 38322 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 literal 0 HcmV?d00001 diff --git a/servo_mg995.d b/servo_mg995.d new file mode 100644 index 0000000..c43ae21 --- /dev/null +++ b/servo_mg995.d @@ -0,0 +1,5 @@ +servo_mg995.o: Servo_MG995.c +servo_mg995.o: C:\Universidad\Keil\ARM\Inc\Philips\LPC23xx.h +servo_mg995.o: C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdio.h +servo_mg995.o: C:\Universidad\Keil\ARM\ARMCC\bin\..\include\stdlib.h +servo_mg995.o: LCD.h diff --git a/servo_mg995.o b/servo_mg995.o new file mode 100644 index 0000000000000000000000000000000000000000..126546224b31d4a38e3b9f515bf9fc9f53c659ba GIT binary patch literal 72844 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 bTj}AT2Q7=x2E_r4p#PXQf(5Ag5s&!)83%`$ literal 0 HcmV?d00001 diff --git a/ultrasonic_hc_sr04.crf b/ultrasonic_hc_sr04.crf new file mode 100644 index 0000000000000000000000000000000000000000..8e9c1c4ae07d9d911b30ef15456a6230b2adac2f GIT binary patch literal 35184 zcma*P3wV^p^*=u6edoP+x7JH9*1oO1*V^nZp!RCmB#^Qpagzutc8d@yH3Un7m-gE> zpa_Uu6i`GExd^DJsHlKF-7;iQ z-PyyNho9RzC{veCrUni?zOTA+-|UMWg}-CBlq;)ecaL zLz@P*whbLV^7ymWly$2oiHx3G4pWw!Nmqcm=8YM5yDa#oEk9CpL}PQ?sKKoxTZRwG z^-bsMvt>PwAEKr$*tJ^9_*)NGbxM&^2j+6pxC<`G^;Ji2Ju=Te_|)oju6KETWv;xU zBC9&K9+A&D2pQGcQ|j9Ww~cO9gJb-v>Q4TMt>4auj+F+hzNxus zNSmrE=2x~1KC8J&<)T)y)|R%)mUQzdwJ9dNe&nz=WI?#u_B@x1zZJ`<8#S^GI){&J zQA=YP^#kfg4If!Exb+nqHEhR9BSbr_|*o`90LMlKh@( zYDs=CHKio~1U0!N|3r0JN&ZP{Qp^yY{Y{i%cukuYG7{=aV3UdZ;r? zXY^EqN@w&^XOzx3L7iSY<3x2@>5P-qz>*osvTizjSPwcLPC#eA?d!8!mrh};jI%r}5J43pqt+`D7wzNpUP=B*YIGM1aepx@`jyT|sK1oXNUG}6 z87bAbbVd)=r*uY7U}f+F)K=U5VNB1*6-$5x^H2P;#tAV z$f)6M7nZ5(yUk0eMcw8l)xvJ`QffiBc|FwpZu5Go>$=VBrRH^;cY?aM+q@Ii+-~zu zQggO`FK?H_itK_JG^+c|g!*UqnMrkS_n9d*vir;)s-^qPo@zw*nY~nV_n9ZCbGpww zQT?O)%#+mcZZk2{x;Fx5TlYr5jO*SAn04J70W+_ABVhJ*Zv@Q1?u~$1*u4=j6aPPq zaFRN^TMJ=Ec5ejC%8{|iu`_T{Ya@rPtL|T4nK44#_qHCIcUV8nD^m{_vl8l|VpdW; zSjTc0q01Q133wGh{=JR zgxcTaKu$s(WpW@Vp^k_`iR#+2Ty_73TxI`UR()NPUj>i#QogAmET30h+f7at;!;C(Scg>)Hrb+?C8-mm*;`khZAe%3 zF-Gnd!-d04byu|ZR>em7m8dK-%3yo7A#xLD)s)xwQ)A-AFpTQ)I1A&b*2G!d{`E0d zg5^IGlb;az?eStP|FJlW|n|LK_gl*s>Yyco-WG|poA2AV;Bise5UE7gPLKNXYTL*)M_UX0~G5@)e|0~#T} z2g_d<6UO6PhOnc618hd&&5iNcj%5fl%yQiKGIdRi$L%dsvtvBgkwExj)@2=uB6+MM zQ6!IbB#Pv*j)b~8CXaO_i{!D6WRX19kt~wOI+8{5SVvOL>Y^i6B#(8ZisZ45RFOQ^ zkt&kMI#TMYE;=%5Y>dY`GMI3t{a8mvwa0j@BV(>PJmkVN)*SHIR*mKwkstF$bBzFx zbu^l51bD2Y5o?6m7S_>-4cuY*)nR|u!A@GHYGX{9*=4GKj49KxOx47gGKb1kCdL%U z=M7;OMTsJrq9{=$QxqkNWQw9hkxWs<8_X_>l0`B_QL;#;C`uN|6h+A*nWBg{tX&kP zie!qSRFOtmqDJ+L7*iBAs-MT0qNq{*Ear)2fWb0#WsH{)-pm*;DZCjmUP^e= zW4s>1yCTM89SIee$2t-?ury}{>)^vmlgBy|IH)vvtRsO#N|VPrl11`ZN3uvB>)?Y= zvo7mM7Rh5BNgQ~Z9gWzkm^{|eh;5q5V;zmyoteBctfgf| zHb@9BZquajjGX`@rtqf3^N$z#+8B zV;#vNd8{K@B#(6@i{!D6WRX19k;H*^v5r)cJl2salE*qyMeI(g9E&>q9}uP6h~F8qd2N!9mP=<>qr#I zV;za&s0F;@sETzIM^&t&II3bD$s&2IBUyyw+>hd@iggr6Rji{ps$w0fB6+MMRfOZL zqd2N!9mP=<>&Tcpd7kIOGj{Uev5t(nlLwD=6h~F8qd2N!9UN7e{=zyMi+r4QG{VOV z2i5iI-p1DNjjadg!!oy~ye7?i-NG&&jE3qO^@YKytf?ulQ&z;O%Vg5E{ncl2PE{Y} zMY|1@kv-_uF;-P&Wd$}+2j$f}bu4Fk)Exd?hcn>9K~OrK>4$wQwwr}0rLn$up83;= z2~K@Bjq@b+?Z`TH%&p9n#m-VfUIHUf=yT=31{@Tq9g$jm98lh`Qr#G_P>2s^)RIU( zSar3T@+{)ALXWcb*qmJyeNNZcWr1FW4wd)qjs7ImN5!n9`f%%kdAsQPbiLXZ9hI>q z@iw@ovZhRiQGHn|FA?T_Q7SJP=6zl&FBRtPjZOdFR#Zm>Y}zjTRBke?pnMYUeVB%T~VG?w>n)6AkN;SyDACH^-@)m*nxDTC8StW)2NjFte>d)~ia2+1qGMtbV z-W_pYm_MMrx?w;iwhXV8&a36TcjBr#>t!p-)CrNlnddI z{z)k7uKh{%O6febKZzS9v7wIapM-lBUV9bWKM6c9S#JO$iyxP+$L&v=Z`eD9!hcdw z)?NEk>gCdTXn#t*S-KtBij?Y6x*cr)l)9mGy#a_?epI?1w?BmiuuD6!c!{rLObg)G zP?HT8nDEZgtY{f)D8sV0C|al+${G+iG?)b%(zwr4SO*)*fN*nTpVM&vLg3L*#(~Ef zF$QKqOPrCwrpv5?acYh;QV6|`5@`r+iZLMcf;c0A9i&+WLeGmcQi!pP5|uSs-0vua z3k_vy?))J!yM;?(Xt%43ZYN;3g@&*MSFJY-z-~*-&#>E^*yl8cC~8fD?RI*Mfi9Y6 zO4MLFnq~qc88Z_YDQr&+p=`IIF$RR1W=f^9#JmSVe|Vithit~Wo!ZnI;b(}0<%H7T~+z!(EvG|iM^yP4huMlxn5FjCm&8baA_ zXT=y0YMLp>xx+k^+Yi%X}&`fS?IR$+KX9iP2;tc zupoX@Tozk&V=*hKo-1ah)U$C`O}2;mA}nk~PxIYX$m(UjZems)+O;AsD^r=pd&a^B zR+`FYJ|{LxCYoLuGcM!lH!+cdsJF%o!N=`52cxvNh?9=(R|nJxvfdS!jRmo2NCaJt z*P7^o;A?zH1YwPrhg^zB$#}UZEQpT}iQsH}NCau)Ln2tap}46%iiQM@=vg!*VD&QJ zz;YvalIplnb=sC?aec>Ff|*?8v17OKE_~FWHPwo z8DrGo=A*%=MjHmj7#Mm3h#JeP(D1=#i3}JhA?}TsD>d1m_peQ zW)l-^2qQ*l6xTKuzs3Yx<}ap<8ZfF&2AithWU#4>*s3wXmWef;EmIe_jJdv>Bavjw zm?M#7%b2!HvSrMX0HX$%FQTDIvSrL}CfPEk-zC{HW)qWa8PgC+HiX&lB=DZCbo7B>V*io!Kwh~_c2a6)c!GEEuHC$U2aTL8fJXGSR+nKF&_&% zAT-dN%TJlb6Zr-j$CK5`gf#GZvpETF;O}A_Zr~rx)+Fk=fo~PFGB|`R9CSiBG;#wo zu?Ct`>PfSBGT*?HO|eO7;3l&YIBI^ zMQZBH>UpU#!YAgy>-NOUpec5wS8Ab}aczZJd|f!7^?;>;jpz(Hfi3%Vs3q98XKorb82wo%6KczrTW%3 zW^qguD^^ikgXR>m2AFRNxMoG|X=-9*LT1&}_HXE`c1DB5%+o6I2BLSIm#(g_$I)s5 zO1NBkhFiQ}F_YV@;{7epNUIkW7v*;AuFL^=TU4Zp+rGD$iPocJ%(CSfY5i?+Ze6yL zr}y0GT$I%FRjh zNwjfCMi!7$u+4x9^R{P4WSapMc#nlIc@&Q722@~TT^_Y#K!v=fJ2Y0}RP)v5fQs-f z8n*C1$iE9XB3<4;SDsE+)-@QD+PGyY`Bj*RL!-fFUVT+nuD%@G#KIcf$?cP^x~FFz`pSuCltwgCs1g=1f4Wg2lSIGY9TWHBEKFF%Ydd^zTre8-MtcDk~E zL$=(!tlk=VHy3Cah;MkR&2eT{m|NrR;W&GCtnntiuZ$H=@JPk$C(~Uu8Ul;azF;Gf|oK2(vOOZ!b>w;&@BKM7s^&w;5({uRzs!QF9-YN5Z9sMJkOw>NT}dA7xGN>I80_su z6*1Va#SE8}!Hy43vVjLXJ~+t+9_;wQf``G54-U&q77Y%|OBM|d%PSsOmY2lfm;=l5 zQaC=1^LVg}+suPqT$cy?#t49G($xkM8XFJJsH+`->9{At3udM>wdsE5R~VRCp6%0E z1Ngz0CJIO;g==vwqko0@YKqy}%KExox~2l(#xAVMo%}M)<1Wku#=8qMiB@!Brqtol zYdn^TZA5tv?~L#&r0{yLz|UZ5JvMF)DKD?`pDa-!jXwS$S{qmpFMf^n2>N1eNoP3X z`CgnE-Yqt6gm8UkCh%r8*1D?ds@fbYGj57-Vdmqkps;{eC+m&z+ZFjXXH=BenqL(P zS=IRNL1B!Tg;hbMo)%|gT@dyeQ5U#0_qGz>mMM6jNUgz4nAC-r#O=2N*m61iA^@De z5L|`Yvn=rTI5#^`xGSQLA}}{Px-(jv`qXh2q9kb=j@k+@5u==jv_vRtqZQW7enI?$#mX!Dm-o(8 z;&Mmd{`J_j72<-hetm5f!k292DJm$Lh3g!rz}t)LAhj}5?YYuno~RjLYJZR3o+ zi>!pGf3vHsL{8MtDOH8lzhA0~sK2UI6;}UspkXo*H@duE_G8e4y5xXts88!$X+D-0o!aag}j_rITHkt**rduR`(4x=7{kqdA{v zL*v^~JMv6cII9bn^-b;~SJeG6Dx9q>&s3jYnX9bBJEsDeh~Ns`Ml!x#R#QH(t~}kZ z5)&L1%!}1nL2#K0*WE@$5}3yjj%itd9zdC}W=AZ5p0JGOqf{N%gFe{2&WYNIf}LFB z%RxMF;v0W71`RNTnHM6)H<1Ato|wQf7A`Js z(h!x+voSUlH8{_#z;Vaz@x~P}a$i)s6FVW}hNv{QBat(_X|yBH=dPr?vbih9Wu^WV z71Hs7UgKhjna9%H2+7PWmS|ohJgr{#LlQdc`R{T=`5D`Y?Ot8#P8ljld~e~ z75Lf8Q>*K%aUw7%vKZKa#D;8b260|t_AnQoCnIDGGT4Q-Rz?GtXT#_p#{_d(9=L^( zqoQcvbh;dG$O?E4R$V1#FPy(Io5Nkzr=$KLkNr|Sh_iY|sMeX4uat{b>fM;>SE%%d zSS88IR~i=i2*g#?_OA?mH5sc>Rl~im%$|yif-NyM$jMgLlvnq!?%xOZ!U`b|gdwYc zV@+=aoCn9M(k@UD#=S z386V!?>bB4{H1R-uJ{!eX(J<3ix(z^bD4ZwQNd{If~Zx_4fu)O;6*tLR?l`wC5gsdcPdK6rOS?T<)?~-V!q-3~JGJdv% zx!Hj{SF_c14YhpEQ<&dj9?wi{u0Gj%bUubYytocP16W^(-oxy=Y;8qj8V9r-OQef) z`3)4dt6}c%qv^|a8_ecxh&QKUV7@uK3h~%D7a`&FouV-#3(;!RcjTUlY&jiwO{$xq!{Q;f?(U*Wp!0wo1Ug znByQL+<+(IF36IAsLSK><(#9Uc0hmZmSbXY*wvV+#5t1jUC~@leqS$lwla2wIh=sh zq%+mMbEj6~%N2+inxpaIyz<`F=4L5}C8q+vUQkh)&eWTSh&hCb)xELn>n&3XzaYpz zy*K3C=FzSEFF!Bw9sXfK<+Tp~S5vMH6TWap-oFtqk0&6^IPqvMv41Xi-r!vG@YXiG zsys}E)ePpJF#uu7Lvy)d=ZA%#r&oLXv1JCgHSxvmu3WwjeYgsa4rQVhBhHf2@Q_3DP4mJw0M-g8 zDLIbnYU{8zu0ye~v0e@b6PZdJCLWZp=*VY2Njy|K?uTR4g8kvQ@+@iG(2=9tIa2A?%t2Dt^Nc1Pti4ly!V%nwWEu(0E!w;1dxE%@D} z!bvq4T>0o2hb#R$;^eApt9nqy4-B^X~k$Nw(T@~96i`zhD z{I~~O3SXP46u$AIDU)j(aV`cG-wG<=N<&SZ6dNCX<)^Z?%6zj|Us>4?uNWI}C8K~) z!b7--i#u^%C03X-qXwf3z42CWR}?vhlcIkv-<3Z`_#ip8cp;L{+FF#wCn@=?cc9_W zV;r6!qnbvHJg*5iI}8r{E!IAGij?uu>tVz38H zhMYX>tB7@8Ui9v$-g#lYGmJv{dT$!N@2q%5R4kXT`Gr|5Uv*qm?7X}ko;8c*dHjX# zyuHrr94r13Z6~kO=7S;|o>#CTPuZ~G{%A^G;+H0~Q=|`E4ND$?lAQxHDKhV{zc;lF zQP0O2t+;Sm7=U5tjz)=l`c0PV%uL%J~K`q;e*R$=0(AK7=bMWoWs0`*MmwCY`)7I47 zj6k>0woy&z4{sTY$y^xbAWoj++jb4u4Vo~BZdzd1%w|mvSny1_N#?1u(h}qqsp*O6)b{Q zjOt{!Mul73MxL85{8Ev=ntCko&?k}7ZLF^uVOd@uUtbGH$cM@5hPSk0r9V&|=X2xk z@U0g7o`&&p1a9RNBEHIW-&(v;DSU3o;;4SI(Wa)h(P5(y%5(}@$ug&!A4kAyh3*X* z++5LV>GKPv?(wY=kX#tG)~1%Bb!=Z)vQzMVEcnvMAu-g0n{%T^x8z0_er6i?7!Opw z^z8vIzRdhM0r ziqxT_gO`!I^n+j?$+(jSAlNPk9u3a&x= zbNX{|HPTInv{(BAANwH`F({6zTC)9ZW#_Tl!0I z3DPp^7hH@qL78AI(j?Uc?MPG9Klm@w9#k9rAJU#w7yJupFFGZ-0O<*o4bDS)BGm_N zNKc}MU=-5dQDbl}(%;jmK?~A9(14&B=^tre@DHSaqSJ!2k^Y%Z4~8KqDWRTX-KZ3qU`_nl=71CO24l0n=(TJco(o?7Dje@U1oJ*Heun)vP=?V(I05OWDQ?M6AE6t$bQxI)5lY%`U zM$?rPd<^0|x{87iL7Y#sDEI)x1#~q9?}50GW>fGkh=0)>3f=HTe@#1$=r}};Bf0^l@;QI(I6z%ObR#$@^BMBT6WtU^ zIUSq{M9aWod601;bWS9?nE(`?x|HY^0#tZv649*$u<+DnM9T?q;i<_)cMyQWQ&Wgm z5TL?SQ;F^*fQ6@~5#2?A3r}56bT^e_e2ftpS9CJx`k*P1^)zfE78jYQ1R4qqE`s8;;Gw+UL^pFr*0>DjQ}m4x`Svt z0bD$_g6Itbta$29qBjY^;;Flc-XcJYr|u?tn*c7JT1oT{0bV?{ifAVV13;}NdXIue zQ1=kMPeDDXdx<`v;1p2z5$&R&7S#Pj9}ytNQx6b*Ou=73JxH{h05_g`h-eQ1a6I)e z(I*7R@zffk&nPGd^$5{k3jPf0QKHW&_#>#bL|;(wdr*%NeM!MdpdKgsiU2#FdV=U{ z0`Pch9nm)g=<(E(MC}$98BaY$G{(X*6V0*2b9NBTwXhg@>UE-PEi6Z#dV^@5g$2n|ZxYS7#B<&P zdRXE)Zv#E7U?g(i0eV=$2vF|=J*?myP&^B2w&+nyFlU@aYc0W?ODuZK63iKI z(c_^HO|a;R(1#{k^rR)2bE!p7SqN2te-=G$Ay@(aS+qX%p~)6K6Z+5;i=MRveWqIU zoF(Wp&7zH#pwHzNZ3=zp3X7f(eQ3HxFIs{=Gc4L{3Hr>mXp1H2bEQRFLm#@zqK?pq zW?A%-CFpatMK4=|KC>-)#S-+n#-dk4ADUy)YoQO#wP=SW=yR<_uUmpX^DKJ967;#w zqBlbyns3otp${#v=p9SYXQ4&!T7o`{EZS)a`dn|(d!Y|4w&?xPhn85h%L<0TE=w)? z&$gg3xHi$1jw-~j(D`piOz1N^gSZ|FnI zE&4q4q1!C_(n8=2{Ih7E74!pjhecmmK{coq7JVK1(47{26Z+6y7LBoGwYuA)v9_#M zD=oUnMtBSSv*==5)~(eRjkCpv?y+dR9o&W7do7w^2P;6`XVFAExE<8}7F}wK4?SSf zBwKvwL5n8a2y=md7EQ4c=mP&Nnrb7|1^!ty%@!Ye#G=b>@u5d8nr_Rwwbr5;c5p4q zJ!a8NTUM~gExOVcA9})~t8Dnt0cxE^bL~JM-cEZ^_DPGbv&B=MvS_|7p7OLs3v5A~ z^%h-k3&uQS(PCRLW`jjbY{8gkEm~>^|AUn0EV{`K{tf9HEm{^z-v<6Bih%ICP8fK*}sIlFmb+%x|4$MVcu;O*hMO)UJH!v4% zS#RFN473F+-m++eEm-k3=AtcF@ebyqE$hv@n0L0UGCM7L!46J9kKV%!w1b|Y-p35I zgA}L_Fx%|lx1e@ew9O8F1L{M}J3II_sE;u3?BJK6KE}MWgP()ijd^DWKLxc1^Ue;A z1@(zV+wI^-pgzS6w1Xdl`V2GB4t@Y?FJ_<}d>_>3n1OciT~J?O2HL?;Xww*tXc%#zO=C5}VZ?zpU97R?MI30; zIE_s&;y{}&(b)DP4zy{!#>N+MpiL7rw!Vl1ZJMaD`9&OP)1?~QU&MhnU8aL)LCv;l zvJRdBb&X9^G&aGA18thBu?L94)KNVw>h_S!I^kbgjl_7&vItJS~yR4K`h; zB~rQ3ruka1;wGCGXu*nQHZ9bG6*t?oNDEfnV$=0nu;Nym7He5=mfN&MOU!bcO-r@J zEVtWqgGS7fQg_(2Ob7ZPMDGXV{}B8iivJ_=e-!?|ga04k{}}uqi~par6UX5zY`R%v zD}AiG)23UD`dqiDP6~U3yKK4@rC2&7WPlxa+q4`U=-35$D{Z<>3o@;;>2@v1wA!XS zv>?+xHm%U&m-pIqrxuL5&!)SyVATCK-K_YOk&udxHw%GK7 zmZ)f}O)qMRiaKoCtOe<|*|bFq(!FHURxL>PvP~UYknRkNDE2of?~a;HpjUX>9L-t2Vu_gQG!x0F2Vu=>u1RQ5su);3_amW3LZf z1x9IX_JON5eXIrZcH6XD3+C+sZfU{1Pk>umFz-{~md1`BxC-3T*zyBcfm=FoL46L~ zf>(h00=T6E3)Gi3eW`H}09*xvX`BQASAk#}M*+Z9AehEk0B{w!;`X) zrm;@&5vZ}6E^-3)_=_}M>;&(Fx>(aVC)f#UoTf{h;2ltxXd3Sb`i<8#!4dSEplPBb z=r>W*r4CL5u)o$c$-!{|;!91JIdUFwnWo83&;j0LO;a2>8JMDJsv{=@Q#DO<5|#NZh?l)9sGL-8XBx!;!t)Et*z1vUj^x z)18j&-Ii;*%aOg?ZJO?OWbbynrj-tk5D{N$TIJvn5m>3|UPt2YJ2l4J(|{pes!;=M;wW>?$h+BBXQRKn$|iJ zXFZ_lF-PL82Q@wJNSyVMrY9U(RUg*0&XI^~ji#p^iL)NjwBC_8>rqY5II?$Jt7(HH z5!Yjyo^@pZ|G1{-9ErW2(6rH!2z;HUO^!riPilJJktpmbO)ogIi+ftri;l!&>osk5 zWEc00rY(*{W*anZbtE!-R#S%~k=b*aUUp>vzfsdG4h|g=S896I!LcLaN=>ghICw-{ zscE|-ySNuM?Qn4T=&8+`UUzW(=&3E5-f-k3V5_FL9ohePXnM!N;Uo6fn%;GA{OGBd zH0^Y70O_fhHNEHH2on2iP47E6gv9<@(+3WYA+f*Kw965^+OFwiM^I{qrrnO9)a#n| zID%4dX!^tvlzLOsr;ec1Tbe#|1f|~AwAT@odPmdej-b@Ln)W$@O*=Jx8aRB>h9`w$4?%4+u!5X6<$?qeW`E34gZAc!lg-5wx_EAiMT zKoD2ru}^^@uEb-X0YO|@^Y#KkTv_uz2ZFe==6wMKab?Z>5@_MdO1BSa;mS()70|+! zmF{bxg)1xFH$V$lR=ReFu5=|H8{^PbuEb+w9h&7zJa&;oSGy9AUF^_oSK_g84qfBo zg#_@=p?R*L&v=Kfa|L}SI5gjtC~Trb3tWl9E_G<3D^b`ahZebV(s-Fe*SoTJo9xhH zSN3jG99rT^WH!~IrLII~(;T|NmB{RJhi-HwGP}Z|n_P*^raQFEmB?&{LpQq;nayJkmB{QWhnBk%nay(OHdi9Es~x)CmB?(iLwC3mnO)=13RfbtIS$?FN@O$^&p+{W2&cOcKp+{Xoq#GSt>k1;>k70kKQ zp%-1*<=y4bW>?VXZihNt!JL&2ZF2>4Ryp*NE10v|p_g63oO>L4#TCrC*P&Nk!JPXX zdd(Hgx!|OvD>2f;4!z|{jI_p~w_S;m9&zYhS1{*M zhjzMxIcpty&lSvh%%S&P!JNk(`oI;;dBUMxu3*kOhdy)#bDnhQBUdozDTh9G<@E7s zhjzPyKIMlQX239lFGm`1=)y#(NTfzv|EgPvY;_9Gd7!{Jq_wOFhA%9S%+M1czRC=rT{@ z?>8Kp>h>ChBU5a}(4rh0-%Z#y*26GVE)q02o%q<0;f?#WuV)1eujtYz;xG}Du{ z?0q1JCw}z-5X2L|+64sh#IHUCf_UOr9|1u;@vD!4AfEWuZinW0va0QIXs#z7_K8E+ zdg5W90zo{9xIY7ecoK2%1%h}Iaeod3@g(B@0tn(s#Qh}@#FL179}vV7zxoOY;)!2< z4FvJTuf73-c;Z*>E-mvUMjGSN&7QC$7N4_)cf zp=(@v+7ld_Ye&v=4E*SfU9 z6C9f7(zBl6&~+|7=LrtYcWI+1IJCf}O`hP;LYJQRBr;m$(&o^Iu6Jom=tGNL+8X-M z5|=tcA6n|tw$O)eaOsuMb8d9$)zEWpa_P0ubC$WZJ@lNLUD^?P&Mhvz<;h;{R+rum zJ!iQ~?|Onmx4HDbC+Ks#OCNZGK6kjZ%ae#_g-aiL67k&W(np>|Ja@UY$CDGNyIuOk z6ZBc>(x;xF&nlNb^8|fXyR_F6^ts2SFFnDWdtKV+3Fh4A(pR2f&iyX6`?5wo;L;dh z)~E+vy4VlT7hM|Xhv$nfUE+&JtZ`|)FCOuTOA~zYh(}$T6(dcWwpA-qn*C2R&zXh&zIF|u1D|tvRYm1(XP;&=6UpC=uOvo^ik+d z^F7+_OBA%gqdmSvK?^4YK1)3M(iiku>d{xetWh_3 z^mXV%H+u9<=tDPo)V`mrQOi6UyPrhOH+yu^eu$d)SGRc9VeMpn8$;)+TRrP=ocx@k zmV4HB1M41K!m!rxV?95f=f~^(_<$dK`LW2t<2HV*;>UV^yupw6`SA%q_Te$3qn>46 zV&n4^ek|n2P5fBTj~DpyDnH)h#~yxs#gDJ~@eM!5XgtR9<05{H!{eh+>SX>rogZ`g zv6LSx_;C+E9_Ggr{Mg8k*Z8rMA0P9h-N9obKW6e{J{}i@QkU}Q<@{L3kFET8mmi<< zV~mT(75tdTkDK{%7eDUj#~OY-&X4E$u?3GCI()XkR**K#ew$}~A2~+@8~0PUd)6^0 zTR*{g9I5W`tREs{A2)6;YubSt^E&#d6`u7=3<+B_vY_-;dMJ&2k}JqVn%lu2rOi8; z;>UWZyVJ9Nd$Ls~i@;r;)vKMBc4XAupo0G&Mz_S=Gq`=%^5X`6+{ur7`LPC%HE^Ys zo>e6`XI6PuAGtZR+OukKK<27@JgYy>$6R$U6MRqRKF_MfJ()w*{hn19gcfGwRwC~K z&pK63#2)mlGur9Gj#~8)sK9E1wqf`e-z?>pi`iDCd^7Sp_OVGAZ%7pX5-$?B5s%r# zJu31T@e}b2F|^oN%p3QM@f|;6soi=9JH{QRro$mh{( zg*qG5V?y!C^y40SC}(C*c-B~wIAEP;;a1dQqPJmXnYNY?xfo;8C6hoAKnXDuN?&`q9ob9g)DdC$Tvpnsy= z3!a5rKqEoD=vlbu!!6zHS-9Q9C+Ax{YbD9*y4ACA&u1`ZLx(2-vk&ApPhe&@$d^1B z(6>Oo>rp1{=#c;P#qfR;WJFEubYo00o&2wnk3btf#xfFzGEnUcp6 z_7#3iL-F@uQ{)^8@_kRhPJ#Tu6Uh4ve)Apd8OvwVU2ULddb1@Oy2&h`cNe+BXyU%>xpkaK)l z0(em7qB)rPN8keY|gaZv<9~NjVHf{KDtFONw=s&m9V0>8a z>mNZqk0KUEU;jMN=WxTYFv^Et(mTkw!`HtK^a<_Mh!(Gq569!KBQ53?O+NmXwsjn# z?(+3n=H)}MBzBATWN{i6w=D5Zqx+m2Gz4OC%{*h|b6Rj}`aZ`IVX4PWiDcB6Od(Hk|` z$E^@!>))EbcB60VnXrGr`Y$(a+FL-`bF$u!oAz4&WYyY@4~sK4dd2Du_e0%>#Zidc z@QZE3uMffgWZ0hq+bY<4VT%~tKLhGwS~KJ$?g*JL!~^Snz>D?0>*j3~fwA>p>@>FF zY)!2DX49s3yz4G`1Iv=o7N7sDjap!A!wmn?>-P^~`k0L#|JeFs{>~4spJT|MVyHhA z@~1$3DAnxrA3~jUdJ|ku#nrQYZd@buiiG#>h*r8kGgLLS|iU?D4${|7f_DlrR!Uj z9NXa8e{6$TjW#j1z8d<3xOySp#;u;#^?`cppPdS0AnQ#PVh^+#7-z!i`QqTQ^)-Ib z8pidCsi(hwjgb8`)ICS$O~YetHMT*=R#$KiiPK-lw$wsBIv13;grC0{(gN$llAk2l9vIhDY*!J$=g-7tLm4i^B=p>4-;CU5R)rv~6(JitO^? z!NW&#R;}+HUg7U9b-6u~O{bvCy(D$ne*s8sf{&+XcvWxjp2GX{Ev9cSYDKM9Tjlfk zyuNB*jjz_{^G)(?=9^qQ#kYkJ<70d-Ftt^+;~Zy-p{32Rk7XdG{qV)K7sC2n*oJ5Pe2w>5&v8|!Y4I82 z;Ya=mAk4=)0jM)Zb&go$JGSYs@y?w$$T<^-kOny~P zOgplgTBHs20R8@FQ(oDy^;Xfy9qRxeXRaJ z?IRpp`1r`s(c000k^CV8xjujY;J_he8LULPAp5^qdV-)^?vJol$iEMy3_ZFYdUP?Y z|Mq*%t1W~h4)i6_xP*o%blRE41J0qt+)}M|RTqZyJ^k6?(Sa<;A}1W70Xrh}k^fOi zx2xbN+EVJN*6m$N4bd{br6og$b}XF&hr)R05qrY_aI~7u1*}c+u#~p6VJ_2_K`q94 z6>!ziT=1AG&y*UiW=73+@SR!hn^7~Px~j$x|7$hdRab2dx!=`GDRX9Z)i#^~HOdoE z8L%^T><&x8vuLqnAoc2Oo;5B z8f*}fGR55L+8wH=%&49U4S}4R?W;XVj-}Y4YA^PLy4EanHmk^o7En3XW_A(+Qa;b2 zH8ZL-7zKS`tHduzar_TWIMcZwVb#eP7@B49!JjS|c>pq!> z+qt|y6}QM^tgE|{F%SK548E9$+uL~Gi(9O3tczg)>l^dX$1vZR*9>XQH|9Z-=4fNy zi_kvoyC%|DjGt!6!Y*p!hnykAR7he^G|_F&%IH~o-!yT6IV-7WT>(2-({MyA!Uk)i zSW6SxY&4vSWwZWWqPbpwu-+dEgc^2%I@xR{-a!Sy;NA@j_HGPuZaNcBr~aKysb^I zqZf_jf0`Ryk%gqcf$GW(oJ-1ch6=+n1J)0bh~5r=W1v0|SkOY?OgObLmdQqv-C3yA zl!8Z=(g}ba-HA**nK;lI7+ac&b<(J(VhiKx zOe~d+bai)T{4meL$c2-UbT-}z*>LPdlA0B}o+z zOmc8O1ZE5F1D`kGdm?;`>mzj2;)HP%Bn}n#!vDp^&@+&rWe{w|Rq$n=+hB7Cr1TZV zo3L+KEYyG-8W#toOq;o|2)w>cTG5kQ09$Zm? z?x;6{#MrsS;Hnv<#x6jT93Cuyo^UFs+>#KKxRL?;1El>KrsQ=tp{A>eV@DWOg@jG$?bho$g`aXjJDQJ@zzk zEKuhlJ?0uXn$$T+k9h`;W@QdG)cFRE7IhBNV=n_oP~A{NBuKzWqHd`nQY2_3Q8(3k z^4*Y;MBP^FNt1dbiMp}YlO_#D5_M~>CruiSBBVk3#VvGS^9iIGIzT6tBn)JURkuDmKa&`6?g zue>Vxp^-%0V0l$?kdZ{)VtG}v%s`^PDhctbi{({G&PbwevAil-VIWao zm4tXza)^;c-C}uF@?%MYmt2PPg(KarOb)H!QEv~gPWmf&)SZY|D61-X)cuH8DFYQe z>aN5qmB9)gb#LO;%1{N5xORG*mf;E>b+_V`%SZ)}x@Ym~rBK1+dId9D zNu+Mkyox!jl1Sa8c_njrC6T&K^J?aZN+NZm<`vD6l|<@R&8wQ9RuZY3HLq-bR!O98 z*Sxy`Dp+PvgB%EY8@+q~{M z+Qg)8+`RZX#>Av<-Mj)?V`5S_Z(ar+YhqHjZ(a)>XJS$}a9$7{Z(>rna9$OiP|4(a zX>_8AN!`YIeRQ(Ugg28^uk*uAQ@l@jx|WQ0rele+o2s!uAQYjSs%OYzo28eDgYT*0 z0nU^RHl4I)pp*WyB!i6uTQkrlkh3L&jpJG~&;^ilB!i8^S~Bn=>s-lTw?^=LI<0%(#^1JH*9!a=?Q}nr>`)=cL7JcUsd;|C01)TbRBlq0}ocewf_uU1Y z`hF|G1NekoHrAO-{(Kbxl{sA~h zTI`Ve_>i;@XvuIY6KPvm78C2?$v=*X59;L;^P5RZaq$tYts>+iJuia)h-Co?dlS=_ z6O^bQC3r_Ty+{?$Ve2u%L(Er(lPx?>aESTJaI%3X2yQ$6=FamqxF-=FbfF!u7M~)x z8}0bI)YF7_p&eh1dWPUGwBu_~&l22)c6{aOF9;90(2iHAe9+>Lg8;o^T2IJlc*jo{i@n#G`)W ztdl3uFNl|$-bFm>r;HB~{yoH_e#-a;!v7obsGl-^0pZ_AJnE;6ZzlYQh)4a#xu!6I zej(KFKZr;Dl<^_L{}=J7pEACI@E;)_^;5<#ApFOONBxxX&4m9H@u=T87gQ$DuO9XL z4DqO+GCoB3&k>LMDdQUm{{`YvKV|#^!heZ))K3}TO!%)6kNPF7mzyIi2Zsw21;B5R z00mSh;0U-02~a_G0uF(ztAGF{R43pVcoY(#hUx?y1dl-i6tP=fM6%*FNPr@$6R;Z} ziv%d5IsyCfaY%q7suQpyACCkmqB;S4@`*?gz-5T?RK(|9Cm})56#<`ooQwn^R|LEQ zKLrWuT@mmy^i(8ha7DmtvD1-&L{y%Sf;1nUfdnL?GC@5NoQVV^qB21v5uAktB%(4w z6A_$^1SFy|K?@O_iv%R1@}v|bcRmjZNJM3VdLlR<2}nd`f<_{^00~G$Wr8LmxDW|Q zL}h{&BKQ>&kci4NQ;=q+i;;jtR3@k=f=iHqL{uhdB!XWf0g0$g&_o1lk$^;0CTJmo zOOb#?RG*qSC|-sPq@p?lN5#vLfn-!?;IMcFGLVky3>+7)L4g-B+Kc>3shN#0TBr z`5NDih!45J^L4J95MS>G&)0fxMtp-CJYVm)74fK_^6V6B#50!L5RdvPJq zqkhWxCc@u`c+^iB-$M95ARhHoo|A%2sNemFNBxxX^@M)_@u;6NzLD?`A|CZq#y1iE zA;hD8%J>$-KZ1DFPkk!l$FBc~1Sp_70Y|_`kpLA`C*TnH7!sg_>I57EA4dYzP@RB- z;Gd8HMO2@K*o&V;0u)i5fZg~hBtQ|>3D}RHMgkO3oq!$r86-dv)d|>>|BM6yxN@#O z6Vs*hzaT#72G6(4{)+gJ8$91KdJggRZt#5Dh~(*Q9osTJ>g$N zJnE;6ZzTLW#G`)7_$I=yM?C7MjBg?Q2E?O&$}>^074>@q@u;6NzMk+K5s&&Q;~NS8 zPsF2s%J?S2zlnI%PZ{4r_n)d@HRzKaAXp*jJ_ z!1s^NBxv% zqF@vw;a7-9{gmXCe0DbC3WLNv*&Uu|QBh7d+Rr1BrKw z2jJ;c1b+3Y-UgEIR!{&aVu^8xn1S8MC)p-;Ga#~sTFnR719*jBg25AVL0SfBy>Sz23 z34Vn3Cqr?tSPU=S<>Ds|#i3#`y#0=gpE4BJ7mMMQ@m&0jCwgFK7+&yRcJMG4!@-|5 zmKTrSS}gywvAlSA{DBI7g!UI>dGYvBE{5{wJ+Y3;S7*lp{QH>~s4S8hZ>gaVN;!jJ zF8do1*avhg0&=JqxdmOFZE>5xXhlIj^)gX_$XQn%;fDubDUzhx((MzQnMF(ZJum+# zkwmk$k=}}iI`nFZ#%8jypx|dMUMo?AZJfr6gN9~Zkt3aoEmf9;FKn$Zl7#Idk5xk` z=D%L#h{E6Zn(&q8791S-HxxOR*aSc;3ew|^B1I~q-U=GojU|dU7aXL6%Ctc)iaUTF8K3$yje_t<`3#LZxrX$5?{`wz~f_I$-8t4rALT@HucTJ@NUi#hcMF7s& zT?@8C(_-dVgr2xlR$x-+VgTEnR9S(^Y%W2t%{hn#n12lLYXI9`0JlO@r`ICdZaHCv zre2Q`+GZZHLQ}UdCA3W_vOx3d{xU+_ShE$H`h7W|BQ8vZ-(G(OqFt!QFMPd{(CVu3 zdf+NTtE$q+KR7nbM7fw$;Q0CJ(v^zz*Vu2}}-jGlK2oMkScz#w`GL5;sg}>h!IM zcHjXfH1+y6LfdJTaaR;I8J-~#fe%}dbCvn4srhearXcww++_;<2 z>Z)Z|{r(f6ox}|jn)>}DqFt!Q zapNgMtE9b=5d-ya8w@aidZ-jvE{C*lzrjymQzZq^5K`h`LLEb00 zZ49x(Q|CWmyq!N-;i>l@O1zCnSmCMr|B-kbpRmAlB>Atz+jxZ)p8Ee0;ccUd6`uP4 zG2>n6$MNJ7iC5Q;Bg&@|udW}*l+PqyT|bU0pA)_#W%rKua_>jyllf*)y4#;u~|cK2a(kTr_gdN!|fw$C7dJc zaRhe~SxtEA{PB!;5E)E(>ir24Zyy;iThHJx$`(_2bBTy2PvN$C336!aIqqmHKgHJyYWCBdZBd<9C+C z+ecOtp2qKN!aIqqCOp~iIfQo-Su61zS)RB>TYh3_Q z)h6s$5|l#guK=EDcMZQ7;L(K5!-nG@{St!P{KCT$PNwl|fXD5oyz${{5pFjrS;EP% z#sJ=CH(`$tzZBpJS8y`R%Mfn&V58O1`C+5W0iJeqbpH9+6#x&rfpbj165w%Ha2ofk z0NxgLVYGaQ@M?f(+?WjqG5JfIIR>Yxwm5cjS-O z@EZv3z#mO;8kZXZ?#Lgl;Wr`Ni9ed)t+8!*2n&BY!l($scb8xa}eh{jn0x ztGwIr=uX_(1SjQh$D_M~lXQ0g+)*?z9i94qC%_#=gGx9@gS!Ck$em4aYW&>*cjV5M zaCYZ=$(@Z?smYz2_{`h6#ucQz7~-1+wacjV62@IL_Dkvm(%?dPP6PJ@z#aKxC7k{7De_0-)nE2UUhY0!-CggA~qSf2y9BY(7pKM!z6 z{%C@eN4$V=C;nIoXMg+~z#aLc2~J0U5#Wyeu@cVy_!7V!`J)L=poCfY? zfIITXN;v!DtJQJ%TetLkP2(*ScE{JCFaW<4hgbPbd~vOUqvVn6kiq_kkydyTXFcMh zc7Hj|3Qpp@j_|PExr7y*3}XYeK9aEcC8PzOmwj(Yyv-T36`p#(5%Hiuyud+OfBvn= zTfh)8u8b(!HuCWP3krh{hu6qa8s4{&!O`%V@YKO~5btDoO>i3CcMiy@4cR0Kz1`^<_ z>U1)03eNPCd!c<@oerdJFML)Il*aZOg4@lxR&eUvCW6~VRx3F5Y;_Ga-tHoi6`scS zD8k#n0i#?#>^)!MT2qrwCr!#O;IqPGsnGW6jS7a6w8u%j%{>7tJZXD8;cc}o?*JX1 zv^{~~wj*l+CuvXQ)+b#Mu-}|S1o4iv%{?)T{_}F~WFkn#(-Tj6R(KNN6vB77!IJ`~ zatCaU)2tvb2u~w?w8M5yY0(3Ig~FN0U<~;b*Xd;%LOY8JotUSQp=6$COT4{#n($z$ZqB>|h~`9$EzJWT}D{|kt~iFumvB*2A)cVeC< zJSlJycff&pR^r(_e?@p_=4oOe1=iNUpChh3XMkUq;;Lhe%Hnn_)^dW9ab8MrxSuw$ z?_0pBWtTDBP8$n24b9~Yw>^)xz|+uNLHMxU?{v&?Hq9$#=i?oAKUcS4p#EP~Vz6;< z3kH(l>JmdpbqsiJy@nXlG36m-^ZX6LJM8}6v$_2oI)6*>_O5Q5Qzi>M_5WJJN4spU z<5G<^$exNd(hW`eFcXV}TY))Ct&F9AfZX|*OV|H)mvcOaKZz6mo zp0=60&3JyC;AX;y6E3WWf8l(KByeFr{LAKBC4n0YT0jaQ~ z+)*S@wj=)S@|}_ZEJ@W6`90cqNdh;P#P9#Sn;4R*nC&9pY)kxW=X-R9wp3U-7V+EO zeqR%gn$8mHd7}FRmf1}-HW zsF|QWB;(siV?0Bqt27O~Ja~r+Z9`ZEL#eax5svQbq!n)kOr64c0}TpCsECO=6*SqCA*f`1!Gk1gUzTH9u9pUsM zWxM3}r`%d3P_|2+Np2&8ws>1tHli+M1C8kIMGjRN`M%BFwee8e6b5;N)`&FOhMw@M-*@k%M}F~`|pVY4b|rFFPT-~@b?E+p~LRX z*aA;7+^^$pVwVM;G$2ML~8nsOlk$G(S%A?1#NBzUwIo}VeR(YCgj ze39~FwF{G23ODHRHS{)9WjPOl0-}w$GAVHHe1oPX->m3hk~* zWWrBYP`POo+wxPADHUEqg1c0Tr}d{R$Xxf5AHIJ^(#1N%t%(@?Eu{8No0-Kzd$##! zB~`ks4esrvVm7X0!NZpSXCn{%K_eGDWK(}J@+90fh>Ys5Wkl{;L?-o|B!UO7ZU2at zg*?0lcwTSKft@x_3|LW+GB4`wXb->*4`mkl*L+?wutZ~NL@GtY_|0 zFhFDUvVp~Zjb=qdBlL=q#_kV5TClLgzgA=ky3&{ZV4Z=*mAgrqc6X);B^Cw zD}DJ@G#iXGF7#y=c(WG%z$S&#)^Ivj`b`-8_&ykcyLoR>xv>mqz6ks%L1=FmvG#L= z`6#7j+IzLp*kXtCC-Rh9Q{wn{k;CrH#Dal5`TZh;?et_pL7wwLk;3*TbQTokH6Io! zlBu}OqSMU5mhn+-Ea_TKHj9sS3UxL4g(E$@X};BvM2`2OK6C4E6A)?`{3$H zHe&lXT+OZEFnko@@$!M{@p-AW#s}v>uHYoXu|7Bpa|Nf~ABRUz!ZnM9b`Q#$`_B`| z@z?;j3>02Y@FBN-ytilpNpP|c=SWz>Iar9BIryUKDMbz!Udeyq=+q*G3%6{fo}A|E zjz+@S_E^~FdY-u(e8u2&AH+9Q!`ZY`K3(vWo@eM3>hX>LuiuXTvpmNa>&m#EEcg!%pIhW`VOC*k#(6~w7iPtOW&3?0`N#N`-lj^d0CdiV5#J`LLKr|>Iv3MUcE%t3-&g&ggXi2W+SOh95>jReUU zENx*m(w)l2?56-T6De{HGU0Se6NxJ#p4xv?By!sz`Aa0^Y3)ud`W6i$jjk;cxo!|C zbRF_UyE+U z&c%0PZZ(kDJfLCO9}?y^N#ZW#@jCN%$&u_z@ilRq+f!Dp;pOHXl}tAGAS{{4Z0^P> zrz=zb0|c6L;2NCJ?(t!n<1k%LRGM{uSEO+es4Yk+%HCTfaWcVLuuzBZE3!D5?JZcy z9DYwM8Tg5+%}ryIx+n^t{N1lh4{t9qT)YV!LGr`T+~Kc7abux8wbb?u6Wdx&RT_W? zi$s}kNAysUD4nsnj4!)x(Igtqhl@;+jQvt%oX*jZK2l;zENZv8zB_)aXkhaJZxXQGB{>q{?WLEz) zwFb@!RJ|<7k>*Xwl}vR-yCd)`blVH|W@`^}%y~;v;k(%2;YpWN6n*|hRGDw1H$PDD zwj^??H%Fp(Os#RFHwUG6CD*soo5Rz4lImOO&3De;XR7pKOT*hn`0 zArYj~Ha{x1Fg|`E#(xRlmgrg{uYK7+*JpMweyzkul~lG1VT)Gr3no6{UM+2lC*UfA z{Y?-v5!`UzeRrXKT1K>_E8(I|p#a6Q&nl^GPm`=#MQ-{9QMHHD?c70|RlWre2ca)3 zcx>M4V#PyU`cQ*4Woz^f-=U$H}W zuckF?(iS7fI+`fxiTY^Q5}P+^Sg^EFZ;l}r`1w|MB4+m^94iuRidP6t2(b-(w}$Ul z@SO$UD^b-8y?B`_4F-Ul*{)o3#U5p8;LAio*!5?fBv%kKyUwO zUvAk*p)Wr;f2Dvze`K%7o_qQugR6$}{kh?}{>J%%djCPKqxt?m|ALku(Shk0!t1Ra z9T>?UGLY-@=LZVH>no-E2L}%E<9{MKlK*KgTM*L*wcTgU%VrPj$@b?*3L;tBoqn0n z7R=sbz2@67n;j|i6mmhRUbU;xlOala#qMWUWwR@W21l|5s5d;?TM$#B4rGXFzvTL> zmJ@-P{(Diit4}1kwwS(NXh{zo9^5M?lJx)doi**CZGM7>?8^^`>AP#1#;L*4f-#vJ z9_HjOPzP%Cs%p?ZPB;}UE{~nQm{~=woxqy5w5Sr4k384=h!fR@3 zfXM^j8Qi78>`K4TW@fWE=81S~c5y64_d^;3aK&Uni_o^kqHt^6pUw8=dizI)a=ml1 z*@3~r%HhGo!GC9G;l4#Q-USyGBZ;(MRDsyY)R`7qoxTg%dv$gv5<&~$#t*0Ji?evk zsVfOru!0MOwpt^F{d0CJVx;JBjH9s-L^G8_9u%*^Vvx^N40%v|yq1l3wY9e4l_ITa?9^0|&o>Q*ce* z9~9b+oQlC2Nl0k7V?$fv9cFY-6C=-u6qyK{Qy`gtHIyoi3Vs4DmhaSa$( zBYbr~iRk-i=_x&d7M`O-(G$R@jx5hX#A)SOh{F%$irMhp9=_Yb_hI1PUU64P7*8;@8E|3eR* z`FebycUf{}zCS-SvP>uj1WT#l;E7};RKIlT{B~>x8UcoT7~e!B3On?n*x}Ktyq+qL z*W>YewYjlKJ6zTa?z`_QFqwIoR2;5AKxzO|`<9i(jb$)9@p$ft+nvQ;TY@R=4Er94 zb6dq>#`4yQ$&Dpx$LmYUZv@w5h9x4XXbg+!10o+*ASEcWDQ@ zHD@Xn>^=hy4Bdhe+yi%UXHU)(V(tv+$GjQP6d~r%fadRoB@I)!et;8*2j}|-I}l&y19I;z_t~;#OOJ2ADe$Tqx@`m$De{hoiQXXJXdg zrL2WpW5zzE3y*Sv-dA$b8|5>T*@?%Y$il& zc>$3?cBGUoNgy-21Bey`dqjJRaYBf;Qtr|%58QGI^l~9*>B)8^({b@q0vq-NLlO?L zh?5W}aL41@cS-{c&VDdr9ijR4|nh|IouIqMKx^>!3{e4%4*qGA@Xt;P(S8f zAr94xk-uM0@R3*P^|5RK3DF-1X$Lrl^d6wtKjFlFQ}%_#FehejjqMuI6G9Xk$%9At zAw>`So|pvF1fcR-} zLIE4v6W7m{haAKvz&;e=StwSf94)}7qL78C<~bT1TouNPvCnO?Te~}5bsdu=0eGIjf8s*5kkNcdyML1RXn_S z{@JQ_JTMe~0M+k@f?1d^#O=I693BroP-ps;yh~Y-zL1l!C&Ved&y{~kS(qciVuW_| z>_haOQU$8~BmAGsszj#&j+x)5D)3)}tfG?}srST6_yNGqya&ZNXmF^~QN=FuI3xoW z;vnN^0dGW;5ZA%(?C%IM6)Mf%8>|qwEieeU1zW1a?H&-!ar<2eS-718QsA~xh>LMs z4?MUH32_^4gF<|STi~4w?U@Y?Zon<@?u*-bFmd4)hA)F#Fql5v?hE|51p`@w+r5N1 zL*`$A+kN0n1h-KCE}4J7%zsvLwJ-5}Ek z%XFVi|6Hb5%QQel6}a1xxP@r{3*1hD1+&aQAGgr2YjF$xx)Zk$IG(^Qn8*vb-ByTK za0~s_al{7+;)Cr`SPsk8M{o=2$L01Z+-@Pn>vH?K%>P<$F;HOnwz9qG_K4qE=I~uXys>ui3>fMk zvZR3ZJ0op93!4uQ1Y$*Y*^yN}y(|g$w|}r#%Msp*Dx;iNB&o37vxk9#gba-TNSoHVyWrv3Gx&rRy2lBkr z+n<9g3tX}yJCqyl#Y5=n6+?J+u9O7z_!>(-)K}bJVc73mHQHY+=w4%7* zyP|j1P=5~6p%H4+3IPVy)1Mt49mtLrFS$VT2l|qu{UbTi+tVL~OSe4(y*cdE=ujrV z3a*&IZZbbGBKmUuJx6w=;qt;Dmjqz9XShJM0s?z0cd2G~8V+4yK)S8g$+4|-IJo7* z_ASv?CW#GkVv`jODHLh}O)L^ZUrDHH98i<&B*2A6)SW>#&Z&C<5jw$pa3fi)ps7Z+MB?BG=)haU}B z8cU0nVJVKEe*Di%XO_4p#5ug-9Is3mHk#19Ct?~e1i+mr;nPp+E-<$Rit%#+d;v%M z#{YhXH?lZmKOsh`mOQDRTCDyeR{$zQYfd>x=ONy=kiYn$dXz2{^D1^gj5U798S9V^JCn(pZ2x4;6jJ~(FAK$1=lq6x_TLJG55P?2+=OHryeBT?YGfA*8J78ns44ZE+kZMIho^skj+lW zIB^i9>5!NYSG`WqIWSWb>)`*LwgKIJdOmDREhZm&i_XNwPmy1;!(KH4)_F))8u;S1 z8OYyk>bzkrhmTicG_jI1_lxo#^U-&>A3J zD;vE~6wMuL!I_@eX_leam?^wFHREO~^b@3E8xmW}rXcVHco4j3