[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]
