From aebff3d5958854c3d082baedc4fc750ac438b4e1 Mon Sep 17 00:00:00 2001 From: JamesFlare1212 Date: Thu, 13 Feb 2025 12:55:48 -0500 Subject: [PATCH] add engr-2350-quiz-02 --- content/en/posts/engr-2350/quiz02/index.md | 204 +++++++++++++++++ .../en/posts/engr-2350/quiz02/q2-gpio.avif | Bin 0 -> 8467 bytes content/zh-cn/posts/engr-2350/quiz02/index.md | 205 ++++++++++++++++++ .../zh-cn/posts/engr-2350/quiz02/q2-gpio.avif | Bin 0 -> 8467 bytes 4 files changed, 409 insertions(+) create mode 100644 content/en/posts/engr-2350/quiz02/index.md create mode 100644 content/en/posts/engr-2350/quiz02/q2-gpio.avif create mode 100644 content/zh-cn/posts/engr-2350/quiz02/index.md create mode 100644 content/zh-cn/posts/engr-2350/quiz02/q2-gpio.avif diff --git a/content/en/posts/engr-2350/quiz02/index.md b/content/en/posts/engr-2350/quiz02/index.md new file mode 100644 index 0000000..25e0941 --- /dev/null +++ b/content/en/posts/engr-2350/quiz02/index.md @@ -0,0 +1,204 @@ +--- +title: ENGR 2350 - Quiz 2 +date: 2025-02-13T12:26:20-05:00 +lastmod: 2025-02-13T12:26:20-05:00 +slug: engr-2350-quiz-02 +draft: false +author: + name: James + link: https://www.jamesflare.com + email: + avatar: /site-logo.avif +description: This post shows the back Quiz 2 of ENGR 2350 on Spring 2025. It includes the question and answer with explains. +keywords: ["C","Programming","RPI","ENGR 2350","Quiz"] +license: +comment: true +weight: 0 +tags: + - C + - Programming + - RPI + - ENGR 2350 + - Quiz +categories: + - Programming + - Electrical Engineering +collections: + - ENGR 2350 +hiddenFromHomePage: false +hiddenFromSearch: false +hiddenFromRss: false +hiddenFromRelated: false +summary: This post shows the back Quiz 2 of ENGR 2350 on Spring 2025. It includes the question and answer with explains. +resources: + - name: featured-image + src: featured-image.jpg + - name: featured-image-preview + src: featured-image-preview.jpg +toc: true +math: true +lightgallery: false +password: +message: +repost: + enable: false + url: + +# See details front matter: https://fixit.lruihao.cn/documentation/content-management/introduction/#front-matter +--- + + + +## Q1 Timer Calculations + +> For a Timer\_A module operating with a system clock of **12 MHz** and in "up mode"... + +### Q1.1 + +> ...what must be the timer's period (in number of counts) be such that the overflow period is **8 ms**? Assume that the timer's clock divider is set to **32**. + +$$\text{Timer clock} = \frac{12\text{ MHz}}{32} = 375000 \text{ Hz} \quad (375 \text{ kHz})$$ +$$N = 375000 \times 0.008 \text{ s} = \boxed{3000} \text{ ticks}$$ + +### Q1.2 + +> What is the smallest divider possible that could still allow the timer to produce the same overflow period? Assume, of course, that the timer's period (in counts) can also change. + +If we want the smallest divider possible, we’d ideally choose a divider of $\boxed{1}$ + +## Q2 Basic GPIO + +> Answer the following questions about GPIO functionality and usage considering the circuit as provided below. +> {{< image src="q2-gpio.avif" width="480px" caption="Q2 Basic GPIO Pin Out" >}} + +### Q2.2 + +> Initialize the GPIO pins in the circuit diagram above using the **DriverLib**. Do not modify any other pins in the port. + +```c +GPIO_setAsInputPin(GPIO_PORT_P6, GPIO_PIN1 | GPIO_PIN6); +GPIO_setAsOutputPin(GPIO_PORT_P6, GPIO_PIN4); +``` + +### Q2.3 + +> Using **Registers** or the **DriverLib**, turn on LED1 only if PB1 is pressed and PB2 is not. The LED should be set off otherwise. + +```c +PB1 = GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN1); +PB2 = GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN6); + +if (!PB1 && !PB2){ + GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN6); +} else { + GPIO_setOutputLowOnPIN(GPIO_PORT_P3, GPIO_PIN6); +} +``` + +## Q3 + +> Convert the flow chart to an equivalent segment of code. +> +> ```mermaid +> flowchart TB +> A([Start]) --> B{"Are a and b\nboth zero?"} +> B -- Yes --> C([Done]) +> B -- No --> D[Divide a by 2
and save back into a] +> D --> E[Multiply b by a
and save back into b] +> E --> B +> ``` + +```c +while (a == 0 && b == 0) { + a = a / 2; + b = b * a; +} +``` + +## Q4 Timer / Interrupt Code + +> Given the complete program below and knowing that SMCLK is **12 MHz**, answer the following questions. +> +> ```c +> void IncA(),IncB(),IncC(); +> uint8_t A = 0,B = 0,C = 0; +> Timer_A_UpModeConfig tim_config; +> uint32_t timer = XXXXXXXXX; // Some valid value +> +> void main(){ +> SysInit(); +> TimerInit(); +> while(1){ +> // To fill in +> } +> } +> +> void TimerInit(){ +> tim_config.clockSource = TIMER_A_CLOCKSOURCE_SMCLK; +> tim_config.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_32; +> tim_config.timerPeriod = 12345; +> tim_config.timerClear = TIMER_A_DO_CLEAR; +> tim_config.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_ENABLE; +> Timer_A_configureUpMode(timer,&tim_config); +> Timer_A_registerInterrupt(timer,TIMER_A_CCRX_AND_OVERFLOW_INTERRUPT,IncC); +> Timer_A_startCounter(timer,TIMER_A_UP_MODE); +> } +> +> void IncA(){ +> Timer_A_clearInterruptFlag(TIMER_A1_BASE); +> A++; +> } +> +> void IncB(){ +> Timer_A_clearInterruptFlag(TIMER_A2_BASE); +> B++; +> } +> +> void IncC(){ +> Timer_A_clearInterruptFlag(TIMER_A3_BASE); +> C++; +> } +> ``` + +### Q4.1 + +> What function given in this code is and will be called as an **Interrupt Service Routine**? Give the function name. + +```c +IncC() +``` + +Because the line `Timer_A_registerInterrupt(timer, TIMER_A_CCRX_AND_OVERFLOW_INTERRUPT, IncC);` It sets up `IncC()` as the ISR for the timer interrupt. + +### Q4.2 + +> How often is this function triggered by the hardware? Give your answer in milliseconds. + +$$\text{Timer Clock} = \frac{12\,\text{MHz}}{32} = 375\,\text{kHz}$$ +$$\text{Tick Period} = \frac{1}{375\,\text{kHz}} \approx 2.667\,\mu\text{s}$$ +$$\text{Interrupt Period} = 12345 \times 2.667\,\mu\text{s} \approx \boxed{32.92}\,\text{ms}$$ + +### Q4.3 + +> Write a segment of code to be placed in the `while(1)` loop that would implement a **blocking** delay of approximately 5 s without using `__delay_cycles()` such that the message "`5 seconds`" is printed after each delay. + +$$\text{Period} \approx \frac{12345}{12\,\text{MHz}/32} \approx 32.92\text{ ms}$$ +$$\frac{5000\text{ ms}}{32.92\text{ ms}} \approx 152$$ + +```c +C = 0; +while(C < 152) {} +printf("5 seconds\n"); +``` + +### Q4.4 + +> Write a segment of code to be placed in the `while(1)` loop that would implement a **non-blocking** delay of approximately 5 s without using `__delay_cycles()` such that the message "`5 seconds`" is printed after each delay and "`not blocked`" is printed continuously. + +```c +printf("not blocked"); +if (C >= 152) { + printf("5 seconds"); + C = 0; +} +``` diff --git a/content/en/posts/engr-2350/quiz02/q2-gpio.avif b/content/en/posts/engr-2350/quiz02/q2-gpio.avif new file mode 100644 index 0000000000000000000000000000000000000000..96f18291d4af0677e1449804577fdc13f71ce35a GIT binary patch literal 8467 zcmZvBWl)^K(lr{~-GaLZ_r={Eg6rZews=_FU4jM(5Zo<6gS!U^?n|)X4llX4Zhe2g zo~oYHr@QNP&GX}_seyrkA-DDPb+hmW+QPiqzug&V%k2!bc#C1PoNYWU{_$@{ZEx)a z`Y(imaRXX;{ty3e$8-aFI{zntee=9PCs(U~kqiI^?rpspYzNH0%$rdP{1;JO{*Qs7 zdZPt_K$riF@t=Bvx4`DVjsFJY;{Mn9|H!w@|Hwt48_4Y~Sr2rxa(&zJtX!QyE>=$9 z|0uuv^hTjucymjKz>>c~7<{0Io6SD}0|WQg1{?AQ-i8MQ|1q%0Z%)v{3oQLF@&dUC zJGL7baVbs;~R#9fkg<3K#GEaLx8}Cg}*VRK#}f<|)9GsV)IOTB@QmFi7LW!Kq(R#8&%|;TvCWvUuL)>Ztyz9b zc%nM0yq%%-51?y#($)x-g7Wj15ukkK($4YgAG*IAOrZtib?8cK)|dYM?)B$)!i#kx z9#&@3BiZf2kk|`tX3I6YCT|J#GAUkXS(8YAeI-#CS^G90uvSmXD zu@nXCAecPs>H_{(;NwPShGz1Wb)QCSZ?A|(+^SXfAPecn0aJD~BNtz&(w9#S*F%WI zAqadFw3#FC(wKEVNQ5h4jCeXS3yA!Z`!tTXcO~6*tg;7d1?W^fafnolmxv{kBf}^& z4*`V9v}`1&TjX7zWM4-vP(i@}2I`~;I=KeyW~f7kWi$Ka^Zt5*>dsm;D{>wA$ST9O z3ChoHt9U&}QT6zXDU8dTkP0t{y>PY(ie@|6_{{boOC*n<@xf3cbeV5%bxXxH_9I$C@(FSK=ppZFxR{pYk)Y;1 z!()>O)xZ~Dzn3kma&+9O)CLp0tm0VVC4)bsB`iVBO(?a^H_xLee)kSNvQP)3E}bE- zl3A#+qYJ~c&1C|=~I|Hh* zhN(ME35iU~tSyz8g0tHoPxcZpkK>Uv8JkHIbfE*)&$4k9bC=$+v&~ksSSH+v&Jw?* zC5VNuH3|{a<+STg)1l8gC(3Mee=Di_cuD><-4Cv#=mZ#8`DoUZv!_Kq1q z&Spou$)b)$CE=hBAin(Q<9u1L&rba^d{Pkxvjwpn{=*~DaJy}-BFPf6OCg`dBg}{E zu$p8G-B*sNa?Yg+d2dlkU0^bZ5&8?ca%K@4C;KkTd^Gl+u%F*n@9%ghq?++nmV4}#`Ae%=1DHP>+X=bdeBY)((pU&V{D`wskGJD+N>EDuHL~Ke7 zoVL}VgdID_$~I>P#|op`d%*~;g`vEU+RUlJ384rQo}}mc4&YgI%N@^q-xBIUn$b#I zY~PhhzuE2w;J&EktnTr7P4(vwhV0%~bhH<1C;^7>_blJ8aqp1YfXY zvtC{xCp*gh6u&{8mVcy1DW!Zyk@Xin+7C3$>Ud^d9rhB7&?Y6rz4H}JS+|7OkvKSy zX$%taYDIKf+#4g<4^&4W3FcMB)^0K5Ju!B-sjF1S3r1Nx6lV5%uivAdpYYLtNT4GJ z(_=B=djI2&p>tX06&yIo@ylA;x0x+7nxgvQ(2{A1HZk~!eFsJnME}g}_%#d?DNusZ z*|6|~YFYO%l+mPp%0@Bm!~CagSMuP^?RpRbX${>8PSf&eZc3eLdOJkonzd4I7ouZz zmV42EIHN`*c<;`ZM`gV6PI-=8i8Pkmuf~hOHChkhtEdFwfB;pvxQe6Wqa*5|6h<<3 z+Y9nzTOqHZdC~4G(75Vc3+1`O8XK;ZYCVTU zXS`}U>CQ-ZHe220*Y(uI`-3j~I)V4eFGcY;SY*Wrf{Hj~_Dp732c_cQibyCFm>_it zI*G?Q2}s>9!hG-75E|lVVq#Rdhdr+m?b*?;)W`Y5IBax55mJI7wHYP~2+zv}Nj6T6 z^`1niXLFwf7BP68OW729@y+=+!_k5x=IF49cIUy<_=*V`KK|T!e$@Ph!bO zIxk3h`J`56aPbG6(2vcbRuvqz`BCBPh_tOdx8itT3tfP6cE*qK>+6%eh#$Q+mv`jH zDo)V=)NEW3PJ9KVhu`a^9@-jGBp#JNSbiUrLjM+P91YP$hK}^7b$`Qa#;!BwD$Xo> z0Nu!+66ujLKyY)0?Cd{2pL{hr@mQmL4G31OIikS-uyo%(5VNlgfhN zgtV#lc7}w7-YUHu50`o{_}JT;9an3M+fIvMlJ>%JMG#x`gQ#)(t1K0=8$My|jHjO7 z5v$`*P8s%rwlUpcXkS{N#_T7=A~bd2Gf&V`uUNvbA$%uE1R3_>5gWzn)8+y(#158v zQ}!G+TL~sse9v%(z3t)mc_Gwdm6jfh@oc>Px0pYUb!5Gw>KsQdbOP?4+71Dm-dJnD zE-fxp(wHCe8hm~Jq-HNOEnLsc&v$syxkU+vl&%c=*$7h%kX1HS;C&=A)MZYewY4cn zM+ym#tRMe-@s0}~v^b4GcaV0C`#2CW&Z?0?YcH$)c^71Pd~S%)@5%l$%bj4i>K_Q% z4j@77u*S?C6(+D^O3%^-Cpy(lo>Q^Y}Sa9;9`L?q>%Ub&!> zXz(X+Rh*{}%wohEStltPY|`ef!A0z7z>^S+Ah^#%|6Yr>v0;Z&dVX{TepL7FU@$bC6j!3dN5U+ub4a}V+HZ6}t%&EagMO#fq|xl|z)g-k zkEN6eZ`u9xq(BF!^p3VFe<}^pn0|_iB~3zVb!Ln9TMv1nazJViTEAl{79TA5LGAYD z0LJPL=e=O8Xesxs`{-9JjO0h;V@}yP<|^8&^uyBUryNcd;r)3+C8G@tebkG=Y6)#J zgUDYw_q zr@2Umk6@;;7O>A)C?x`krtc&Q`B}Pdxqmp9`%@bEL{L=dYtnRWpVO$xZ-l`8TyMvn zVeP`F#C8~?&%t?4|MiK_%>Xk5ASVFf;RtRnceize$I?7y_6JFjlh*PD#?{5IR4wtZ zUH-V}^81P3VW@mv-(RTfD9a%;*WxbL&sm5P$yUH4Q+!Jz1qsyZG==c!yhHstzm{`1 zbm}zA>)*3+)J_XPde1+KkuQDl^v5mqIxA7c0oqnA`~KJ8=iOSgH4$Q{FNX8w{ajv> zByzzL=d}jOC|CL#S~KOdYGVMIoELteHH*rGx)`*%F98mP^_lXjjCHS{N|AcHL>NgK zoqrFcb2Hd-zB9VGZeLB=A&z{xa2-XoTgRBtg9vjV{})C#`%+KnevjSo-cBK4J*a9k zN{rP__mG9{bq4pkYKvBKR~qR&NbfuUk6Bfby^H09yJ*o(f&Houw%og@+kuc_wa&8) z9o!o74gtG(C#k{RkoE;>!M`XAd2tg-;mAfuh$f^TG!dFqPETki>F*h^?T5eYW2U4Z zcC`?sGHEhh1w?bF-_KydVsv$aJKXzFd8d`g`fV)3(>q2>59hTuRb6`B*GEr>3lhgX zY}ll#)>eH&P-4OoptUmoTJ=6v<|T3s9Cj@n--*Uj&1Ic<)?jTGqU-c_0 z{jJA@q}YGbbO4r$*HUYAY;F@nP`$)=gp)RBkje@AL#cVB_(~()6_40_dvgJy>v4t9 z`6Ip7^7wtqKPt2MxYU_F>9bS!0*bBi515kb+N^Sj*5~195E3JuPHw;FA0x1>Deng^ zcHl;n%$}Dh(msxyks{og$O8n`wLdc*vdbc@PUMxUP9X3aWWq1;$+dOO7L9x6rn9bmfI z)Zu8nvp@Cgk0^Zh?7MiuveYHOFsXhuwj$o4cIpVQru#SH6Y%ov~b;Fjqdg*Yd+ zvAlg?^ zWyS>dRc%@u`XgW1o^agV%+);7$2@%8KP>ur;%$9iwb-KIHYmlh(5RVwKZ|{Z%e>qJ zk&{4+*zcBcp5t{Z5@CTsbe0V0akmynLaNgj3~TAV9=7JO#h_)QI?qqwX1J9i))jAA!nW1;?wrxo``oN&AApGjNbNqH zrC`Z=T)$O2Lcf}$UYDvUB@%KuM2JAhyZd4P(Bn@6aZYy&9W6&ZBo4IpiJ$v(SJ`|% zb3HUvIyjZV@3&LJT%sY+=ZAnPU|(*H);CqaShC6lGmBNrN#v?fWS3|ND~NxaG(p28 zZHwC-y+_!xsD4S$nQdDN?l{5E(YbXVEXc^1`-yeE`{7kfvwJ1PQUcbRlxMclo!8b% z)15SCO%;4oNP?2M!XOIGqs;{*spOvs2NgaXp-m|JFeFbqUE*ecakYy9h4t`EkkY33 z1#<7O3Yf_V$n>I^!Wkc?P{JIA@BOLXT{1P?z>FHsRSt1-kaJltj`v{#$gy5e7G@hYc zT-&x^_D=8lPJ5FCH9jcBb-q%@Go{ix8A^E#sV_jgo~(*~Gw`Lb1B~*N%?f2juEjXA zK50xGe-xm+E;46(l0-M*`D~}?whrY>6BnSFD57f6*;4sEaLr>Y7U(#;eX9ju`TOT# z`WI7XSw;v7b8deDW5?WhP?ob#S$mp{kVSm30*Ci??CC@gLJ?sN@=qV3pjz!){mrM^Fg#MAIkyQz9!E#u){N) zPpj_0&IMIj+5aMEFKcEqolAbxKx?YVr3QL+zTZ1Q`UMm$lVmUiz(EA_Sqk{<(=0`| z^n-k!9!D-s-oJgIj*~gBu;j8-(&O4a+ae3)Hn8#B3C2j|rFULiMWpwd%--qQRwsXe_l^(oSfE~j9 z#Pnaioru`@M4j_%%qYo}?@U=rn{Z%7S60Sb5u=~0mM6b+Mj`eVq?>FJxLoAvNKr=( zYBD$jv;0Fw0mW-Ft<}!eucPA5E8IG<@x;`nGc3@p_`fI^ignzuHlzv-J#~+?R{j=@ z2Qrry>FY|v0Q+LNR>b?@MDL%bqtfL!0*X`^sUkysA~XGW0X`+vakmS_r}*fUYi1Qb z`2L{{VXG4rU$5waiD!N>O$=!{Gw5u6_fcdyzr9xEgFF&(Fr+evmrhj(`wdA%i0HR-McX<6=&+3^ z)c9HihM!p)!BPC@w^a}E8e}L(GO3j)4?2X3 zACM&gAoAoi3`e^KXCW#rO6)y#Lvq48OQw(GDuWVVlF|`ye2-S-osfz@k%mCfIa|dq zizmUkg+7_z7H)A7bGoGX%%o|QMXB*WL5Hs6k7;+lE%JMp^YHwUb^PdNO!iEH8~-xK z62`Nt1U+yeg`sV^YD6zBn7&W4VX1d}kvgZwPq)odZ`-5m z9zPcf*F!e{lH|%$(~~`$N5cC(h!E+n=+1e)D6t4&YSZI4QpqR=gK>zmRd#zY5M6Uv zx2pBL9d?iA^}4+ly;`9m?U#u^8{|e;`YrpIhq!BDl?Os?f(3Uch(nm!$`x40M<9E%{7%V+etrSGe7w~@x?#akVmv~|Zvj7QSZb}&*Xas}O*%cY!m3q1#s5i2Sj{U2T`JX!R1$ln!RtCloa6gSjV5V?Qdd+K8BLYHc74{M-;t-b1mtDTj0_lsKy z+)HBy1XH66;S_-2SZ3%OrT|Pmq_69r+7%Fm+F0R*w$Q{J;LOaK`=B%*Pc^v?n#47} z5QqRw&Bui=lh2OD+vRHz3IA-13hEWEuiPF8To4oB;7LO?^M`9a;l~C>wzS8SB(4M3 zzwIbOSltU|dv@EC+ z=KVo?-IhmRdM$c;>Dd!C>u-NN+g5V2W(&2#j+|qyU3^5B`3pEPlz%MU9!H7uVv0~^ zU0iUpKCxtTf5bh(ANJ4pBlX1UVP2-O$0iJS+Fw$p9q`rY1RjQoM9uon7FK0};o zg~k*S6MO|#HsNcQA#hBj=PJ^~=ckG8#-pFu5N^hd>5#yrNmUl{ajRo{AZ7caD1oBsafZ$VG+ zWc7@G)Xk^m*`2C2Odj{XPlg;0FA=1azne>f7HcPZ}oYwjhk^_Ku6o#$#VGqJC{{5n9I0UlY4i1{*Y|9lg z>#OPMiCQAW8+*O}T$0~ZJFyE@4%4GgW~-7|Xuov#T)y>D+C0&44Z0LfHggS0!9o+P zUAvLLCT{aDeyoSRV%E%4W+n4n9v>9hm9SeOPBNiJXc0Mp zV)&2rFi5l=SGfs$Vn}1U9y_2F9pJg^pXN@}8SA=?qThLbj&x2jGiW3)z+hKyaHIhs z0)wtZ9)Bg)g0cK47Qu_fc%4KF1c(lEO=mK@+JRmJeHi74HGUi~b&4%hVN2tPO(UjB z#%Hl?Mo@*mS1H2ksY=+}zZU$abOd|S^g@ztzrk-obxTSo+ z@ugMF-tWe$#|^qn(y!_jJ=2@K^oLRFpK3wiTH)^TQl5N&A7!BE(^!@M`XkgjiRY@9 zcd!JlApHBmH?dw@A?oA_1G@XdF;bHN;e5W`@9UKUPhk$hX~VH%YT4Qsv#*|6RggO9 zzyPY}%;I2|D+ptoQJ+kTMMs@gnESW1%==+%2FZ%0b5CJ%l+?(K@4EthU$?CdeN1l5 zcc=H^$BVS>aW#r5Qwk6S`|fipk9W9M9#0yz7hL2aLXGaMnKqNxMUJ{mHpI75_3spe zf=B0O6kApQmP_EES`Xgxd1pbp%;fa_PVUSJNjEp$ zto99=cA(KBf}F5LnolafekzmWmvg@g@I0{EayikalNC(8aux*OS2sH$F1=2JQf(#N zgHD1uUmv*Py^d;d^28j6j0})+`y<&dh)%F)yK7I$?xYg + +#### Q1 定时器计算 + +> 对于一个工作在 **12 MHz** 系统时钟下并且处于“向上模式”的 Timer\_A 模块... + +##### Q1.1 + +> 要让定时器的溢出周期为 **8 ms**,需要设置其周期(以计数值表示)为多少?假设定时器的时钟分频器设置为 **32**。 + +$$\text{Timer clock} = \frac{12\,\text{MHz}}{32} = 375000 \text{ Hz} \quad (375 \text{ kHz})$$ +$$N = 375000 \times 0.008 \text{ s} = \boxed{3000} \text{ ticks}$$ + +##### Q1.2 + +> 要使定时器仍能产生相同的溢出周期,最小的分频器应该是多少?假设定时器的周期(以计数值表示)可以调整。 + +如果我们想要最小的分频器设置为 1,则可以满足要求。因此,最小的分频器设置为 $\boxed{1}$ + +#### Q2 基本 GPIO + +> 请回答以下关于 GPIO 功能和使用的问题,并考虑提供的电路图。 +> +> {{< image src="q2-gpio.avif" width="480px" caption="Q2 Basic GPIO Pin Out" >}} + +##### Q2.2 + +> 使用 **DriverLib** 初始化电路图中的 GPIO 引脚。不要修改端口的其他引脚。 + +```c +GPIO_setAsInputPin(GPIO_PORT_P6, GPIO_PIN1 | GPIO_PIN6); +GPIO_setAsOutputPin(GPIO_PORT_P6, GPIO_PIN4); +``` + +##### Q2.3 + +> 使用 **寄存器** 或 **DriverLib**,当 PB1 被按下且 PB2 未被按下时,点亮 LED1;否则关闭 LED。 + +```c +PB1 = GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN1); +PB2 = GPIO_getInputPinValue(GPIO_PORT_P6, GPIO_PIN6); + +if (!PB1 && !PB2){ + GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN6); +} else { + GPIO_setOutputLowOnPIN(GPIO_PORT_P3, GPIO_PIN6); +} +``` + +#### Q3 + +> 将流程图转换为等效的代码段。 +> +> ```mermaid +> flowchart TB +> A([Start]) --> B{"Are a and b\nboth zero?"} +> B -- Yes --> C([Done]) +> B -- No --> D[Divide a by 2
and save back into a] +> D --> E[Multiply b by a
and save back into b] +> E --> B +> ``` + +```c +while (a == 0 && b == 0) { + a = a / 2; + b = b * a; +} +``` + +#### Q4 定时器/中断代码 + +> 给定下面的完整程序,并且知道 SMCLK 是 **12 MHz**,回答以下问题。 +> +> ```c +> void IncA(),IncB(),IncC(); +> uint8_t A = 0,B = 0,C = 0; +> Timer_A_UpModeConfig tim_config; +> uint32_t timer = XXXXXXXXX; // Some valid value +> +> void main(){ +> SysInit(); +> TimerInit(); +> while(1){ +> // To fill in +> } +> } +> +> void TimerInit(){ +> tim_config.clockSource = TIMER_A_CLOCKSOURCE_SMCLK; +> tim_config.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_32; +> tim_config.timerPeriod = 12345; +> tim_config.timerClear = TIMER_A_DO_CLEAR; +> tim_config.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_ENABLE; +> Timer_A_configureUpMode(timer,&tim_config); +> Timer_A_registerInterrupt(timer,TIMER_A_CCRX_AND_OVERFLOW_INTERRUPT,IncC); +> Timer_A_startCounter(timer,TIMER_A_UP_MODE); +> } +> +> void IncA(){ +> Timer_A_clearInterruptFlag(TIMER_A1_BASE); +> A++; +> } +> +> void IncB(){ +> Timer_A_clearInterruptFlag(TIMER_A2_BASE); +> B++; +> } +> +> void IncC(){ +> Timer_A_clearInterruptFlag(TIMER_A3_BASE); +> C++; +> } +> ``` + +##### Q4.1 + +> 在给定的代码中,哪个函数会被作为 **中断服务例程** 调用?给出函数名。 + +```c +IncC() +``` + +因为 `Timer_A_registerInterrupt(timer, TIMER_A_CCRX_AND_OVERFLOW_INTERRUPT, IncC);` 这一行将 `IncC()` 设置为定时器中断的 ISR。 + +##### Q4.2 + +> 这个函数被硬件触发的频率是多少?请给出答案并用毫秒为单位。 + +$$\text{Timer Clock} = \frac{12\,\text{MHz}}{32} = 375\,\text{kHz}$$ +$$\text{Tick Period} = \frac{1}{375\,\text{kHz}} \approx 2.667\,\mu\text{s}$$ +$$\text{Interrupt Period} = 12345 \times 2.667\,\mu\text{s} \approx \boxed{32.92}\,\text{ms}$$ + +##### Q4.3 + +> 编写一段代码,放在 `while(1)` 循环中,实现一个 **阻塞** 的延迟,大约为 5 秒钟,并且不使用 `__delay_cycles()`,使得每次延迟后打印出消息 "`5 seconds`"。 + +$$\text{Period} \approx \frac{12345}{12\,\text{MHz}/32} \approx 32.92\text{ ms}$$ +$$\frac{5000\text{ ms}}{32.92\text{ ms}} \approx 152$$ + +```c +C = 0; +while(C < 152) {} +printf("5 seconds\n"); +``` + +##### Q4.4 + +> 编写一段代码,放在 `while(1)` 循环中,实现一个 **非阻塞** 的延迟,大约为 5 秒钟,并且不使用 `__delay_cycles()`,使得每次延迟后打印出消息 "`5 seconds`" 并且连续打印出 "`not blocked`"。 + +```c +printf("not blocked"); +if (C >= 152) { + printf("5 seconds"); + C = 0; +} +``` diff --git a/content/zh-cn/posts/engr-2350/quiz02/q2-gpio.avif b/content/zh-cn/posts/engr-2350/quiz02/q2-gpio.avif new file mode 100644 index 0000000000000000000000000000000000000000..96f18291d4af0677e1449804577fdc13f71ce35a GIT binary patch literal 8467 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