[video member=miotatsu stream_platform=twitch project=riscy title="Reading about GPIO" vod_platform=youtube id=vj58V0q-898 annotator=Miblo]
[0:07][Plug SiFive's shout-out of the interview with Andrew and Yunsup[ref
    site=Twitter
    page="See what else Andrew & Yunsup said about their experience with RISC-V in an interview w/ @miotatsu: https://forums.sifive.com/t/andrew-yunsup-interview/413"
    url=https://twitter.com/SiFiveInc/status/849698515915685888]]
[0:22][Consult the forums for Megan's advice on finding the OTP[ref
    site="SiFive Forums"
    page="Lots of Questions… (RISCY BUSINESS Day 21)"
    url=https://forums.sifive.com/t/lots-of-questions-riscy-business-day-21/434]][:research]
[1:31][Consult the forums for Megan's advice on enabling the HiFive1 to reliably start our programs[ref
    site="SiFive Forums"
    page="Does anyone else have problems with output?"
    url=https://forums.sifive.com/t/does-anyone-else-have-problems-with-output/446]][:research]
[4:29][Open our files]
[8:42][Enable uart_init() to perform a busy loop]
[13:39][:Run our program to see similarly sketchy outputting behaviour]
[14:08][Enable uart_init() to loop over INT_MAX[ref
    site="C++ reference"
    page="Numeric limits"
    url=http://en.cppreference.com/w/c/types/limits]]
[17:18][:Run our program, see no blinking lights and wonder why]
[20:31][See the lights, the let the program :run for a little bit]
[21:28][Try looping over INT_MAX on the dev machine]
[22:21][:Run our test and estimate that it took five seconds]
[22:56][See the properly printed output of print_instructions()][:run]
[23:05][Try to make uart_init() loop over a smaller number]
[24:14][:Run our program and see that that worked perfectly]
[24:57][Enable print_instructions() to print out the data at 0x21FE4[ref
    site="SiFive Forums"
    page="Lots of Questions… (RISCY BUSINESS Day 21)"
    url=https://forums.sifive.com/t/lots-of-questions-riscy-business-day-21/434]]
[26:00][@popcorn0x90][0x7FFF. I thought it would be 0xFFFF]
[27:01][Self-plug the episode on ripple carry adders[ref
    site=YouTube
    page="RISCY BUSINESS - Day 12: Ripple Carry Adders & Two's Complement"
    url=https://www.youtube.com/watch?v=BObABjzvVPw]]
[27:50][Continue with print_instructions()]
[28:22][:Run our program and see a potentially valid Unix timestamp]
[29:18][Note that the OTP content locations are offsets[ref
    site="SiFive Developers"
    page="SiFive HiFive1 Getting Started Guide"
    url=https://static.dev.sifive.com/dev-kits/hifive1/hifive1-getting-started-v1.0.2.pdf]][:research]
[30:32][Consult the Platform Reference Manual on the E300 Platform Memory Map[ref
    site="SiFive Developers"
    page="Platform Reference Manual"
    url=https://www.sifive.com/documentation/freedom-soc/freedom-e300-platform-reference-manual/]][:research]
[31:30][Consult the E3 Coreplex Memory Map table for the address of the OTP read port[ref
    site="SiFive Developers"
    page="E3 Coreplex Manual"
    url=https://static.dev.sifive.com/pdfjs/web/viewer.html?file=https://static.dev.sifive.com/SiFive-E3-Coreplex-v1.2.pdf]][:research]
[32:49][@miblo][Well, it appears to be 0x7FFFFFFF or 1 << 31 - 1]
[33:25][Recap the intuition on two's complement, that you count with zeros]
[34:42][Report the value at 0x21FE4 in the forums[ref
    site="SiFive Forums"
    page="Lots of Questions… (RISCY BUSINESS Day 21)"
    url=https://forums.sifive.com/t/lots-of-questions-riscy-business-day-21/434]]
[37:06][Request for viewers' board ID values at 0x21FE4]
[38:11][@miblo][Yeah, I don't have the SDK installed yet, so I'll have to report back]
[38:32][Scan quickly through the manuals looking for GPIO documentation]
[41:15][Read about General Purpose Input/Output Controller (GPIO) in the Platform Reference Manual[ref
    site="SiFive Developers"
    page="Platform Reference Manual"
    url=https://www.sifive.com/documentation/freedom-soc/freedom-e300-platform-reference-manual/]][:research]
[47:02][Read about level-triggered and edge-trigger interrupts on Wikipedia[ref
    site=Wikipedia
    page=Interrupt
    url=https://en.wikipedia.org/wiki/Interrupt] in conjunction with Megan's post about how the UART works[ref
    site="SiFive Forums"
    page="Does anyone else have problems with output?"
    url=https://forums.sifive.com/t/does-anyone-else-have-problems-with-output/446]][:research]
[51:11][Continue reading about the GPIO's Interrupts in the Platform Reference Manual[ref
    site="SiFive Developers"
    page="Platform Reference Manual"
    url=https://www.sifive.com/documentation/freedom-soc/freedom-e300-platform-reference-manual/]][:research]
[54:41][:Research GPIO pull-up[ref
    site=StackExchange
    page="What is a pull up resistor? What does it do? And why is it needed?"
    url=http://raspberrypi.stackexchange.com/questions/4569/what-is-a-pull-up-resistor-what-does-it-do-and-why-is-it-needed]]
[57:05][Continue reading about Internal Pull-Ups and the remaining information about Interrupts in the Platform Reference Manual[ref
    site="SiFive Developers"
    page="Platform Reference Manual"
    url=https://www.sifive.com/documentation/freedom-soc/freedom-e300-platform-reference-manual/]][:research]
[1:00:27][We are out time for today]
[/video]
