[video member=miotatsu stream_platform=twitch project=riscy title="PWM Speed Test (Cont.)" vod_platform=youtube id=zZRPFFYIX7s annotator=Miblo] [0:08][Recap and set the stage for the day] [0:32][Point out a solution from the forum[ref site="SiFive Forums" page="Freedom E SDK toolchain fails to build" url=https://forums.sifive.com/t/freedom-e-sdk-toolchain-fails-to-build/530] to build the Freedom E SDK][:research] [2:26][Compile and upload test.c to our HiFive1] [5:02][Connect to and reset our HiFive1, to see no output][:run] [6:22][Use PWM0_REG rather than PWM1_REG] [7:43][Compile, upload and :run test.c to see no output] [8:51][Try to print "Hello, World!" before entering the busy-loop][:programming] [9:47][:Run our program and see no output] [12:21][Simplify test.c down to the absolute essentials for printing][:programming] [13:26][Try to :run our program and still see no output] [14:32][Append '\\r' to our string][:programming] [15:25][:Run our program and again see no output] [16:26][Set up the UART][:programming] [17:24][Try to :run our program and still see no output] [18:08][Make test.c wait for the HiFive1 to settle][:programming] [18:51][Try to :run our program and still see no output] [19:44][Pass our "Hello, World!" string to _puts() as a variable][:programming] [21:08][Try to :run our program and still see no output] [22:21][Compile, upload and :run led_fade to determine that our upload is not working, and investigate why] [25:41][Peruse the forums for information on upload failures[ref site="SiFive Forums" page="Not able to upload programs expect in safe boot mode" url=https://forums.sifive.com/t/not-able-to-upload-programs-expect-in-safe-boot-mode/362]][:research] [29:04][Try to upload the led_fade program in safe mode[ref site="SiFive Developers" page="SiFive HiFive1 Getting Started Guide" url=https://static.dev.sifive.com/dev-kits/hifive1/hifive1-getting-started-v1.0.3.pdf]] [32:51][Connect to and reset our HiFive1 to see the led_fade successfully running][:run] [33:22][Try to upload demo_gpio, and :run it successfully] [35:26][Try to upload our own test program, and :run it successfully] [37:01][Uncomment our PLIC_init() call, hit an error upon uploading, and investigate why][:programming] [41:02][Comment out the g_ext_interrupt_handlers initialisation][:programming] [41:38][Switch to safe boot mode, upload and successfully :run our test program] [42:27][Uncomment that g_ext_interrupt_handlers initialisation and try to determine how the interrupt handlers table should be set up][:programming] [44:30][Try to upload and :run our test program, to see that we were doing it correctly after all] [45:04][Try to pass a string literal to _puts()][:programming] [47:48][Upload and :run our program successfully] [48:34][Proceed to uncomment the PLIC_enable_interrupt() call and set up the PWM in ONESHOT mode][:programming] [49:39][Switch to safe boot mode, upload and :run our program without success, and investigate why] [52:18][Introduce mei_isr() and correctly set up the PLIC interrupt handler][:programming] [59:58][Read through trap_entry in entry.S][:research] [1:05:28][Consider how global_interrupts.c sets up the interrupt handlers][:research] [1:10:19][See how coreplexip-e31-arty/init.c sets up the localISR in handle_trap()][:research] [1:13:09][Wrap it up with the determination to dive into the assembly code] [/video]