From ea4d250eb48a07e223107ea759923b47bc3ebcc4 Mon Sep 17 00:00:00 2001 From: grammers <samkar-4@student.ltu.se> Date: Wed, 14 Feb 2018 20:07:52 +0000 Subject: [PATCH] bare5: task 2 --- examples/.bare5.rs.swp | Bin 20480 -> 24576 bytes examples/bare5.rs | 46 +++++++++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/examples/.bare5.rs.swp b/examples/.bare5.rs.swp index 5f9c56a8961c6eeb8293d8357fd0d60aae8d53b0..3a33262254f9e0e8a262228114e94f049cdb9e18 100644 GIT binary patch delta 1582 zcmZozz}RqrQ7p+I%+puFLeGGKfq_AQfgy8ROO&kFMzJ^i>?{oR3=9lRlMMyLCo2dD zFq(o`nyes&5Vc@dDVStnV1&}lP&#sRpg=$WBn1{;F$M+(H;}Xd1B2^iK?UP_U48}z zS$+lvCVmD6Mt%l{w|oo?xA_<tmhv$$B=RvZ$nr5T+~j3oxXjDIu!Wa_VKXlS!z5k? zhCE&dh74W?hIC#A22WlF27O)z27X=!21Z^6hBrJ643Bsi7?$xcFwEg$V3^Irz|hFU zz!1&Dz~IZnz+l0{z@W#&!0?KjA)Vm?Hv_{hZU%;%+zbq-xEUDMax*Z@<Yr)K;bvg? z#l^r-z{SAujFW*OhLeHe5(fi=2L}VgK6VBM6LtoMRcs6l3TzAv(^wf8cvu-2nphYZ zelRmI<S{caJYiyBh+<-3xWEYV@?<MTna!SxFL)WXChO~8t>4Maz+edqKLG}YNN6y9 z;b&mD%g?}Yh@XLB4L<`zBR>O!4>WjW_!$`f@-Z-M<zrwd;bUNM<zrxQ;bUOn<YQns z&db1XjF*973NHi0WL^e_4qgU^0$v6N6<!7g7G4I1cRUOXZ+RFPuJJH1bn-ATc<?aP zGbr*fFmUrQFtG42F#P9cVED_;!0?Bgf#C)>1H)-<28PMp3=F;83=G}e3=BEk3=Hwy z3=BHl3=C@A3=AsV3=B`X7#I$5F);LSF)*ZaF)(;@F)(;?F)(OxF)#>mF);k*WMH_@ z$-r=vlY!whCj-MtP6mb(oD2;6I2jlcIO`c0<T)7_j&U$B<Z&=Cm~t>M7;!K#{9$Kc z_{q+|Fo~Ukp`V?BA(owiA&Q-W!IGVU!Hk`O!GN8C;UpUa!!b4nhFNS34Aa>d7*g37 z7?Ri+7#!Ic7#!Fb7(THwFdSuNVA#vbz);D`z)-=;z!1jDz+lY^4RKItZ{}cG$~^g? znaJj^W>Z<}i&9HUi}DnTtQiy(6clQ~B#2d{V5^`}q+nyCV5q5}tzeL32vL!iU!;(! zkeR1osHaz+S(2ep4c3yATB49!TB1;7rBG^Yq+qLHV9k)0r;wXi91l{Z0V2RsnhLsh zASKldV7uxS%8N2fQsYaFjWiNdQi^mG$`W%*Q#B!$f!PYS3c1C}3N;EE5U!1lLVj9W zacT)v5!mYDWU%Q9whH+<DGF)|iW(?ZYl1w2p({TpB^0KuC^az!?g~wa<MR<BU}ZW` zi=iC2pLD=p2fGd|r8)Vfwe05k)?CbnxkzTD78hGtxd(XqJH|UX2D|Dg7#ip(80jb& zBpDb&{i3fwd8M5_lfM4s7j|iI&ESv$>ke{u2I~dINQJS1rjCJ*p$?K}KYJq<eSL+5 z$&L1QAXE0+i<*F9Q(qqxN<qoV3bqPC&d$}fU=L=d<fLk7DpWHhrZ6xpWME*J2rZvX zCkr~P4s&5<U@%~2V9;k~V7Sc0z_6Ezfnhll1H()v28LuN1_pU128P>=3=Gp5Av%qi z7#NtD7#O}YGB7M-WMJ@TWMHslWMD97WMD93WMD95WMEKaoGjv4zxkRj2P1E8eu@Gp z&Qptv6{;t%cIuMQ*DozjRVXgWH8x5!F{rSz(z0gI(r2ihJkL{hbE@-fo-mM075Eq! zYWN_9uK*}XGcYjx<7Z%a!_UBQgP(z60zU&o7e50-2R{QtJ3j+M1hg>u$;ZI3fRBM; v3LgW*Bt8a)iF^zU6ToI|P83k!W77wN$;yt3oQUWMbqogu<Qm8SObQGDoi{r8 delta 1068 zcmZoTz}T>WQ7p+I%+puFLeGGKfq_AQf#H68OVlCHjbd;3`I#B&85kItKoSfL3@(!e z1>_m+CL0Qfb23B4JU15#^z%<#pfE{+g;$n=fx(jzVv5UTK?UP_1%3twR(=Ks7JdeX z4}1&^_xKnXR`4+}r0_8?DDW{b+~H+lxW>!Cu$`BIVH+<4!&F`dhC*HjhHPF2hAdtN z1|MDq1|wbu1|ePs1{PihhW9)S3{QC&7*_HyFwEy+V3^0lz|g|Oz!1m7z!1R0z+lb8 zz+lM3!0?uvf#ESXLpsA<ZU%-s+zbq7xfvKXa5FH>;bvfH=VoB|%f-M@%*DX)l9PcU zo|A#$DhC6DHwOd5L3RcPb9M%XwQLLw%4`e_Gg%oJ_*oekT3Hwvels&L6f!d~JZEBH zh-G46xXcLgt_S19iSm;z6?r!YE8gavY^Z;^ehVuD!xuJ4NO(en>Iy#t!)|^ChNb)r z47L0W3|{;U44(W93|jmQ3{UtN7?$!eFf8F?V94ZSU{L2{U{K>@VEDqz!0?%uf#C%& z1H%Pg28I@128I+~1_nP~1_obV1_m=;28NeB3=AuH7#JFP7#Om77#LD`80s0~c^DXC zc^DXCco-Ngco-P8c^DWzb3+2=H8%sp8EyuK{oD);J=_coZQKkDE!+$Y&D;zOmD~&r z(%cLTx40M>8o3x4G`ScUK5#NHyyawI*v`qou!WO>!IzVP!HbiDL4uQkL6nn$;R^=? z!$%GVhSwYn3@scC42>KS3=E+h3=BaW3=9e!3=Fay3=DtR85n+p0+yYDp@E%&p@N-( z!GxWG!I+(aL6Dt+;Tszy#9py6Fl=LEVDN@wPc{aIU^WJZ05IOn$g+losg_}~rK!41 zEizzGP^blAh!{wL&SVQyO)n6i0Yo4$LK#Ag5Q{-UVY9yJ0+z`WtwlH6TXQi_uClYA zyxT5qa*(|dqr&74d%K{V)DnfF<mC9|{DMjaTLrbE<Ya4xv^<5(l$=zJqU2;N1-0DL z5``dVXB~y~g3SCxsDOKbr@y17LN!BT3IhW_0|SFHG!NNL7Iau0Vam+FV8YD6aD$0~ z;Sdu8!x|<AhSf|A3^SP+7+RSa7;Kps7|fX%7)+TM7)+QL7+9GY7=AJ`Fsxu?U<hPn zV6bLnV6bFlV6b3hU@&Kdn6AXgz%W_Jv3~NCILXQX<Ni-x=F}xzTAZp-T#{>SlxAX3 UVP&Od%}_geo~P{QROi_|0K(zg-2eap diff --git a/examples/bare5.rs b/examples/bare5.rs index eaf19e2..8123f65 100644 --- a/examples/bare5.rs +++ b/examples/bare5.rs @@ -9,6 +9,7 @@ extern crate cortex_m; extern crate cortex_m_rt; // C like API... +/* mod stm32f40x { use core::{cell, ptr}; @@ -107,12 +108,19 @@ mod stm32f40x { } } } -use stm32f40x::*; +*/ +//use stm32f40x::*; // see the Reference Manual RM0368 (www.st.com/resource/en/reference_manual/dm00096844.pdf) // rcc, chapter 6 // gpio, chapter 8 - +mod address { + pub const PERIPH_BASE: u32 = 0x40000000; + pub const AHB1PERIPH_BASE: u32 = PERIPH_BASE + 0x00020000; + pub const RCC_BASE: u32 = AHB1PERIPH_BASE + 0x3800; + pub const GPIOA_BASE: u32 = AHB1PERIPH_BASE + 0x0000; + } + fn wait(i: u32) { for _ in 0..i { cortex_m::asm::nop(); // no operation (cannot be optimized out) @@ -121,22 +129,25 @@ fn wait(i: u32) { // system startup, can be hidden from the user fn main() { - let rcc = unsafe { &mut *RCC::get() }; // get the reference to RCC in memory - let gpioa = unsafe { &mut *GPIOA::get() }; // get the reference to GPIOA in memory - idle(rcc, gpioa); + //let rcc = unsafe { &mut *RCC::get() }; // get the reference to RCC in memory + //let gpioa = unsafe { &mut *GPIOA::get() }; // get the reference to GPIOA in memory + idle(); } // user application -fn idle(rcc: &mut RCC, gpioa: &mut GPIOA) { - let rcc_copy = &rcc; +fn idle() { + //let Rcc = RCC{}; + //let rcc_copy = &rcc; // power on GPIOA - let r = rcc.AHB1ENR.read(); // read - rcc.AHB1ENR.write(r | 1 << (0)); // set enable + // `let r = rcc.AHB1ENR.read(); // read + //rcc.AHB1ENR.write(r | 1 << (0)); // set enable + mod_u32((address::RCC_BASE + 0x30),0,1,1); // configure PA5 as output - let r = gpioa.MODER.read() & !(0b11 << (5 * 2)); // read and mask - gpioa.MODER.write(r | 0b01 << (5 * 2)); // set output mode + //let r = gpioa.MODER.read() & !(0b11 << (5 * 2)); // read and mask + //gpioa.MODER.write(r | 0b01 << (5 * 2)); // set output mode + mod_u32(address::GPIOA_BASE, 10, 2, 0b01); // and alter the data output through the BSRR register // this is more efficient as the read register is not needed. @@ -168,6 +179,19 @@ fn read_u32(addr: u32) -> u32{ core::ptr::read_volatile(addr as *const _) } } +fn mod_u32(addr: u32, offset: u32, with: u32, mut value: u32){ + let old: u32 = read_u32(addr); + let msc: u32 = old & !(mas_with(with) << offset); + value = msc | (value << offset); + write_u32(addr, value); +} +fn mas_with(with: u32) -> u32{ + let mut r: u32 = 0; + for i in 1..with { + r = (r << 1) + 0b1; + } + return r; +} //ike API // In C the .h files are used for defining interfaces, like function signatures (prototypes), -- GitLab