teensy-3-6-digital-io.cpp 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051
  1. #include "all-headers.h"
  2. void pinMode (const DigitalPort inPort, const DigitalMode inMode) {
  3. // Set config and dir to apply
  4. uint32_t config = 0 ;
  5. bool output = false ;
  6. switch (inMode) {
  7. case DigitalMode::OUTPUT :
  8. config = PORT_PCR_MUX (1) ;
  9. output = true ;
  10. break ;
  11. case DigitalMode::OUTPUT_OPEN_COLLECTOR :
  12. config = PORT_PCR_MUX (1) | PORT_PCR_ODE ;
  13. output = true ;
  14. break ;
  15. case DigitalMode::INPUT :
  16. config = PORT_PCR_MUX(1) ;
  17. break ;
  18. case DigitalMode::INPUT_PULLDOWN :
  19. config = PORT_PCR_MUX(1) | PORT_PCR_PE ;
  20. break ;
  21. case DigitalMode::INPUT_PULLUP :
  22. config = PORT_PCR_MUX(1) | PORT_PCR_PE | PORT_PCR_PS ;
  23. break ;
  24. }
  25. // Apply
  26. switch (inPort) {
  27. case DigitalPort::D0 : // PTB16
  28. PORTB_PCR (16) = config ;
  29. bitband32 (GPIOB_PDDR, 16, output) ;
  30. break ;
  31. case DigitalPort::D1 : // PTB17
  32. PORTB_PCR (17) = config ;
  33. bitband32 (GPIOB_PDDR, 17, output) ;
  34. break ;
  35. case DigitalPort::D2 : // PTD0
  36. PORTD_PCR (0) = config ;
  37. bitband32 (GPIOD_PDDR, 0, output) ;
  38. break ;
  39. case DigitalPort::D3 : // PTA12
  40. PORTA_PCR (12) = config ;
  41. bitband32 (GPIOA_PDDR, 12, output) ;
  42. break ;
  43. case DigitalPort::D4 : // PTA13
  44. PORTA_PCR (13) = config ;
  45. bitband32 (GPIOA_PDDR, 13, output) ;
  46. break ;
  47. case DigitalPort::D5 : // PTD7
  48. PORTD_PCR (7) = config ;
  49. bitband32 (GPIOD_PDDR, 7, output) ;
  50. break ;
  51. case DigitalPort::D6 : // PTD4
  52. PORTD_PCR (4) = config ;
  53. bitband32 (GPIOD_PDDR, 4, output) ;
  54. break ;
  55. case DigitalPort::D7 : // PTD2
  56. PORTD_PCR (2) = config ;
  57. bitband32 (GPIOD_PDDR, 2, output) ;
  58. break ;
  59. case DigitalPort::D8 : // PTD3
  60. PORTD_PCR (3) = config ;
  61. bitband32 (GPIOD_PDDR, 3, output) ;
  62. break ;
  63. case DigitalPort::D9 : // PTC3
  64. PORTC_PCR (3) = config ;
  65. bitband32 (GPIOC_PDDR, 3, output) ;
  66. break ;
  67. case DigitalPort::D10 : // PTC4
  68. PORTC_PCR (4) = config ;
  69. bitband32 (GPIOC_PDDR, 4, output) ;
  70. break ;
  71. case DigitalPort::D11 : // PTC6
  72. PORTC_PCR (6) = config ;
  73. bitband32 (GPIOC_PDDR, 6, output) ;
  74. break ;
  75. case DigitalPort::D12 : // PTC7
  76. PORTC_PCR (7) = config ;
  77. bitband32 (GPIOC_PDDR, 7, output) ;
  78. break ;
  79. case DigitalPort::D13 : // PTC5
  80. PORTC_PCR (5) = config ;
  81. bitband32 (GPIOC_PDDR, 5, output) ;
  82. break ;
  83. case DigitalPort::D14 : // PTD1
  84. PORTD_PCR (1) = config ;
  85. bitband32 (GPIOD_PDDR, 1, output) ;
  86. break ;
  87. case DigitalPort::D15 : // PTC0
  88. PORTC_PCR (0) = config ;
  89. bitband32 (GPIOC_PDDR, 0, output) ;
  90. break ;
  91. case DigitalPort::D16 : // PTB0
  92. PORTB_PCR (0) = config ;
  93. bitband32 (GPIOB_PDDR, 0, output) ;
  94. break ;
  95. case DigitalPort::D17 : // PTB1
  96. PORTB_PCR (1) = config ;
  97. bitband32 (GPIOB_PDDR, 1, output) ;
  98. break ;
  99. case DigitalPort::D18 : // PTB3
  100. PORTB_PCR (3) = config ;
  101. bitband32 (GPIOB_PDDR, 3, output) ;
  102. break ;
  103. case DigitalPort::D19 : // PTB2
  104. PORTB_PCR (2) = config ;
  105. bitband32 (GPIOB_PDDR, 2, output) ;
  106. break ;
  107. case DigitalPort::D20 : // PTD5
  108. PORTD_PCR (5) = config ;
  109. bitband32 (GPIOD_PDDR, 5, output) ;
  110. break ;
  111. case DigitalPort::D21 : // PTD6
  112. PORTD_PCR (6) = config ;
  113. bitband32 (GPIOD_PDDR, 6, output) ;
  114. break ;
  115. case DigitalPort::D22 : // PTC1
  116. PORTC_PCR (1) = config ;
  117. bitband32 (GPIOC_PDDR, 1, output) ;
  118. break ;
  119. case DigitalPort::D23 : // PTC2
  120. PORTC_PCR (2) = config ;
  121. bitband32 (GPIOC_PDDR, 2, output) ;
  122. break ;
  123. case DigitalPort::D24 : // PTE26
  124. PORTE_PCR (26) = config ;
  125. bitband32 (GPIOE_PDDR, 26, output) ;
  126. break ;
  127. case DigitalPort::D25 : // PTA5
  128. PORTA_PCR (5) = config ;
  129. bitband32 (GPIOA_PDDR, 5, output) ;
  130. break ;
  131. case DigitalPort::D26 : // PTA14
  132. PORTA_PCR (14) = config ;
  133. bitband32 (GPIOA_PDDR, 14, output) ;
  134. break ;
  135. case DigitalPort::D27 : // PTA15
  136. PORTA_PCR (15) = config ;
  137. bitband32 (GPIOA_PDDR, 15, output) ;
  138. break ;
  139. case DigitalPort::D28 : // PTA16
  140. PORTA_PCR (16) = config ;
  141. bitband32 (GPIOA_PDDR, 16, output) ;
  142. break ;
  143. case DigitalPort::D29 : // PTB18
  144. PORTB_PCR (18) = config ;
  145. bitband32 (GPIOB_PDDR, 18, output) ;
  146. break ;
  147. case DigitalPort::D30 : // PTB19
  148. PORTB_PCR (19) = config ;
  149. bitband32 (GPIOB_PDDR, 19, output) ;
  150. break ;
  151. case DigitalPort::D31 : // PTB10
  152. PORTB_PCR (10) = config ;
  153. bitband32 (GPIOB_PDDR, 10, output) ;
  154. break ;
  155. case DigitalPort::D32 : // PTB11
  156. PORTB_PCR (11) = config ;
  157. bitband32 (GPIOB_PDDR, 11, output) ;
  158. break ;
  159. case DigitalPort::D33 : // PTE24
  160. PORTE_PCR (24) = config ;
  161. bitband32 (GPIOE_PDDR, 24, output) ;
  162. break ;
  163. case DigitalPort::D34 : // PTE25
  164. PORTE_PCR (25) = config ;
  165. bitband32 (GPIOE_PDDR, 25, output) ;
  166. break ;
  167. case DigitalPort::D35 : // PTC8
  168. PORTC_PCR (8) = config ;
  169. bitband32 (GPIOC_PDDR, 8, output) ;
  170. break ;
  171. case DigitalPort::D36 : // PTC9
  172. PORTC_PCR (9) = config ;
  173. bitband32 (GPIOC_PDDR, 9, output) ;
  174. break ;
  175. case DigitalPort::D37 : // PTC10
  176. PORTC_PCR (10) = config ;
  177. bitband32 (GPIOC_PDDR, 10, output) ;
  178. break ;
  179. case DigitalPort::D38 : // PTC11
  180. PORTC_PCR (11) = config ;
  181. bitband32 (GPIOC_PDDR, 11, output) ;
  182. break ;
  183. case DigitalPort::D39 : // PTA17
  184. PORTA_PCR (17) = config ;
  185. bitband32 (GPIOA_PDDR, 17, output) ;
  186. break ;
  187. case DigitalPort::D40 : // PTA28
  188. PORTA_PCR (28) = config ;
  189. bitband32 (GPIOA_PDDR, 28, output) ;
  190. break ;
  191. case DigitalPort::D41 : // PTA29
  192. PORTA_PCR (29) = config ;
  193. bitband32 (GPIOA_PDDR, 29, output) ;
  194. break ;
  195. case DigitalPort::D42 : // PTA26
  196. PORTA_PCR (26) = config ;
  197. bitband32 (GPIOA_PDDR, 26, output) ;
  198. break ;
  199. case DigitalPort::D43 : // PTB20
  200. PORTB_PCR (20) = config ;
  201. bitband32 (GPIOB_PDDR, 20, output) ;
  202. break ;
  203. case DigitalPort::D44 : // PTB22
  204. PORTB_PCR (22) = config ;
  205. bitband32 (GPIOB_PDDR, 22, output) ;
  206. break ;
  207. case DigitalPort::D45 : // PTB23
  208. PORTB_PCR (23) = config ;
  209. bitband32 (GPIOB_PDDR, 23, output) ;
  210. break ;
  211. case DigitalPort::D46 : // PTB21
  212. PORTB_PCR (21) = config ;
  213. bitband32 (GPIOB_PDDR, 21, output) ;
  214. break ;
  215. case DigitalPort::D47 : // PTD8
  216. PORTD_PCR (8) = config ;
  217. bitband32 (GPIOD_PDDR, 8, output) ;
  218. break ;
  219. case DigitalPort::D48 : // PTD9
  220. PORTD_PCR (9) = config ;
  221. bitband32 (GPIOD_PDDR, 9, output) ;
  222. break ;
  223. case DigitalPort::D49 : // PTB4
  224. PORTB_PCR (4) = config ;
  225. bitband32 (GPIOB_PDDR, 4, output) ;
  226. break ;
  227. case DigitalPort::D50 : // PTB5
  228. PORTB_PCR (5) = config ;
  229. bitband32 (GPIOB_PDDR, 5, output) ;
  230. break ;
  231. case DigitalPort::D51 : // PTD14
  232. PORTD_PCR (14) = config ;
  233. bitband32 (GPIOD_PDDR, 14, output) ;
  234. break ;
  235. case DigitalPort::D52 : // PTD13
  236. PORTD_PCR (13) = config ;
  237. bitband32 (GPIOD_PDDR, 13, output) ;
  238. break ;
  239. case DigitalPort::D53 : // PTD12
  240. PORTD_PCR (12) = config ;
  241. bitband32 (GPIOD_PDDR, 12, output) ;
  242. break ;
  243. case DigitalPort::D54 : // PTD15
  244. PORTD_PCR (15) = config ;
  245. bitband32 (GPIOD_PDDR, 15, output) ;
  246. break ;
  247. case DigitalPort::D55 : // PTD11
  248. PORTD_PCR (11) = config ;
  249. bitband32 (GPIOD_PDDR, 11, output) ;
  250. break ;
  251. case DigitalPort::D56 : // PTE10
  252. PORTE_PCR (10) = config ;
  253. bitband32 (GPIOE_PDDR, 10, output) ;
  254. break ;
  255. case DigitalPort::D57 : // PTE11
  256. PORTE_PCR (11) = config ;
  257. bitband32 (GPIOE_PDDR, 11, output) ;
  258. break ;
  259. case DigitalPort::True : // No port
  260. case DigitalPort::False : // No port
  261. break ;
  262. }
  263. }
  264. void digitalWrite (const DigitalPort inPort, const bool inValue) {
  265. switch (inPort) {
  266. case DigitalPort::D0 : // PTB16
  267. if (inValue) {
  268. GPIOB_PSOR = 1 << 16 ;
  269. }else{
  270. GPIOB_PCOR = 1 << 16 ;
  271. }
  272. break ;
  273. case DigitalPort::D1 : // PTB17
  274. if (inValue) {
  275. GPIOB_PSOR = 1 << 17 ;
  276. }else{
  277. GPIOB_PCOR = 1 << 17 ;
  278. }
  279. break ;
  280. case DigitalPort::D2 : // PTD0
  281. if (inValue) {
  282. GPIOD_PSOR = 1 << 0 ;
  283. }else{
  284. GPIOD_PCOR = 1 << 0 ;
  285. }
  286. break ;
  287. case DigitalPort::D3 : // PTA12
  288. if (inValue) {
  289. GPIOA_PSOR = 1 << 12 ;
  290. }else{
  291. GPIOA_PCOR = 1 << 12 ;
  292. }
  293. break ;
  294. case DigitalPort::D4 : // PTA13
  295. if (inValue) {
  296. GPIOA_PSOR = 1 << 13 ;
  297. }else{
  298. GPIOA_PCOR = 1 << 13 ;
  299. }
  300. break ;
  301. case DigitalPort::D5 : // PTD7
  302. if (inValue) {
  303. GPIOD_PSOR = 1 << 7 ;
  304. }else{
  305. GPIOD_PCOR = 1 << 7 ;
  306. }
  307. break ;
  308. case DigitalPort::D6 : // PTD4
  309. if (inValue) {
  310. GPIOD_PSOR = 1 << 4 ;
  311. }else{
  312. GPIOD_PCOR = 1 << 4 ;
  313. }
  314. break ;
  315. case DigitalPort::D7 : // PTD2
  316. if (inValue) {
  317. GPIOD_PSOR = 1 << 2 ;
  318. }else{
  319. GPIOD_PCOR = 1 << 2 ;
  320. }
  321. break ;
  322. case DigitalPort::D8 : // PTD3
  323. if (inValue) {
  324. GPIOD_PSOR = 1 << 3 ;
  325. }else{
  326. GPIOD_PCOR = 1 << 3 ;
  327. }
  328. break ;
  329. case DigitalPort::D9 : // PTC3
  330. if (inValue) {
  331. GPIOC_PSOR = 1 << 3 ;
  332. }else{
  333. GPIOC_PCOR = 1 << 3 ;
  334. }
  335. break ;
  336. case DigitalPort::D10 : // PTC4
  337. if (inValue) {
  338. GPIOC_PSOR = 1 << 4 ;
  339. }else{
  340. GPIOC_PCOR = 1 << 4 ;
  341. }
  342. break ;
  343. case DigitalPort::D11 : // PTC6
  344. if (inValue) {
  345. GPIOC_PSOR = 1 << 6 ;
  346. }else{
  347. GPIOC_PCOR = 1 << 6 ;
  348. }
  349. break ;
  350. case DigitalPort::D12 : // PTC7
  351. if (inValue) {
  352. GPIOC_PSOR = 1 << 7 ;
  353. }else{
  354. GPIOC_PCOR = 1 << 7 ;
  355. }
  356. break ;
  357. case DigitalPort::D13 : // PTC5
  358. if (inValue) {
  359. GPIOC_PSOR = 1 << 5 ;
  360. }else{
  361. GPIOC_PCOR = 1 << 5 ;
  362. }
  363. break ;
  364. case DigitalPort::D14 : // PTD1
  365. if (inValue) {
  366. GPIOD_PSOR = 1 << 1 ;
  367. }else{
  368. GPIOD_PCOR = 1 << 1 ;
  369. }
  370. break ;
  371. case DigitalPort::D15 : // PTC0
  372. if (inValue) {
  373. GPIOC_PSOR = 1 << 0 ;
  374. }else{
  375. GPIOC_PCOR = 1 << 0 ;
  376. }
  377. break ;
  378. case DigitalPort::D16 : // PTB0
  379. if (inValue) {
  380. GPIOB_PSOR = 1 << 0 ;
  381. }else{
  382. GPIOB_PCOR = 1 << 0 ;
  383. }
  384. break ;
  385. case DigitalPort::D17 : // PTB1
  386. if (inValue) {
  387. GPIOB_PSOR = 1 << 1 ;
  388. }else{
  389. GPIOB_PCOR = 1 << 1 ;
  390. }
  391. break ;
  392. case DigitalPort::D18 : // PTB3
  393. if (inValue) {
  394. GPIOB_PSOR = 1 << 3 ;
  395. }else{
  396. GPIOB_PCOR = 1 << 3 ;
  397. }
  398. break ;
  399. case DigitalPort::D19 : // PTB2
  400. if (inValue) {
  401. GPIOB_PSOR = 1 << 2 ;
  402. }else{
  403. GPIOB_PCOR = 1 << 2 ;
  404. }
  405. break ;
  406. case DigitalPort::D20 : // PTD5
  407. if (inValue) {
  408. GPIOD_PSOR = 1 << 5 ;
  409. }else{
  410. GPIOD_PCOR = 1 << 5 ;
  411. }
  412. break ;
  413. case DigitalPort::D21 : // PTD6
  414. if (inValue) {
  415. GPIOD_PSOR = 1 << 6 ;
  416. }else{
  417. GPIOD_PCOR = 1 << 6 ;
  418. }
  419. break ;
  420. case DigitalPort::D22 : // PTC1
  421. if (inValue) {
  422. GPIOC_PSOR = 1 << 1 ;
  423. }else{
  424. GPIOC_PCOR = 1 << 1 ;
  425. }
  426. break ;
  427. case DigitalPort::D23 : // PTC2
  428. if (inValue) {
  429. GPIOC_PSOR = 1 << 2 ;
  430. }else{
  431. GPIOC_PCOR = 1 << 2 ;
  432. }
  433. break ;
  434. case DigitalPort::D24 : // PTE26
  435. if (inValue) {
  436. GPIOE_PSOR = 1 << 26 ;
  437. }else{
  438. GPIOE_PCOR = 1 << 26 ;
  439. }
  440. break ;
  441. case DigitalPort::D25 : // PTA5
  442. if (inValue) {
  443. GPIOA_PSOR = 1 << 5 ;
  444. }else{
  445. GPIOA_PCOR = 1 << 5 ;
  446. }
  447. break ;
  448. case DigitalPort::D26 : // PTA14
  449. if (inValue) {
  450. GPIOA_PSOR = 1 << 14 ;
  451. }else{
  452. GPIOA_PCOR = 1 << 14 ;
  453. }
  454. break ;
  455. case DigitalPort::D27 : // PTA15
  456. if (inValue) {
  457. GPIOA_PSOR = 1 << 15 ;
  458. }else{
  459. GPIOA_PCOR = 1 << 15 ;
  460. }
  461. break ;
  462. case DigitalPort::D28 : // PTA16
  463. if (inValue) {
  464. GPIOA_PSOR = 1 << 16 ;
  465. }else{
  466. GPIOA_PCOR = 1 << 16 ;
  467. }
  468. break ;
  469. case DigitalPort::D29 : // PTB18
  470. if (inValue) {
  471. GPIOB_PSOR = 1 << 18 ;
  472. }else{
  473. GPIOB_PCOR = 1 << 18 ;
  474. }
  475. break ;
  476. case DigitalPort::D30 : // PTB19
  477. if (inValue) {
  478. GPIOB_PSOR = 1 << 19 ;
  479. }else{
  480. GPIOB_PCOR = 1 << 19 ;
  481. }
  482. break ;
  483. case DigitalPort::D31 : // PTB10
  484. if (inValue) {
  485. GPIOB_PSOR = 1 << 10 ;
  486. }else{
  487. GPIOB_PCOR = 1 << 10 ;
  488. }
  489. break ;
  490. case DigitalPort::D32 : // PTB11
  491. if (inValue) {
  492. GPIOB_PSOR = 1 << 11 ;
  493. }else{
  494. GPIOB_PCOR = 1 << 11 ;
  495. }
  496. break ;
  497. case DigitalPort::D33 : // PTE24
  498. if (inValue) {
  499. GPIOE_PSOR = 1 << 24 ;
  500. }else{
  501. GPIOE_PCOR = 1 << 24 ;
  502. }
  503. break ;
  504. case DigitalPort::D34 : // PTE25
  505. if (inValue) {
  506. GPIOE_PSOR = 1 << 25 ;
  507. }else{
  508. GPIOE_PCOR = 1 << 25 ;
  509. }
  510. break ;
  511. case DigitalPort::D35 : // PTC8
  512. if (inValue) {
  513. GPIOC_PSOR = 1 << 8 ;
  514. }else{
  515. GPIOC_PCOR = 1 << 8 ;
  516. }
  517. break ;
  518. case DigitalPort::D36 : // PTC9
  519. if (inValue) {
  520. GPIOC_PSOR = 1 << 9 ;
  521. }else{
  522. GPIOC_PCOR = 1 << 9 ;
  523. }
  524. break ;
  525. case DigitalPort::D37 : // PTC10
  526. if (inValue) {
  527. GPIOC_PSOR = 1 << 10 ;
  528. }else{
  529. GPIOC_PCOR = 1 << 10 ;
  530. }
  531. break ;
  532. case DigitalPort::D38 : // PTC11
  533. if (inValue) {
  534. GPIOC_PSOR = 1 << 11 ;
  535. }else{
  536. GPIOC_PCOR = 1 << 11 ;
  537. }
  538. break ;
  539. case DigitalPort::D39 : // PTA17
  540. if (inValue) {
  541. GPIOA_PSOR = 1 << 17 ;
  542. }else{
  543. GPIOA_PCOR = 1 << 17 ;
  544. }
  545. break ;
  546. case DigitalPort::D40 : // PTA28
  547. if (inValue) {
  548. GPIOA_PSOR = 1 << 28 ;
  549. }else{
  550. GPIOA_PCOR = 1 << 28 ;
  551. }
  552. break ;
  553. case DigitalPort::D41 : // PTA29
  554. if (inValue) {
  555. GPIOA_PSOR = 1 << 29 ;
  556. }else{
  557. GPIOA_PCOR = 1 << 29 ;
  558. }
  559. break ;
  560. case DigitalPort::D42 : // PTA26
  561. if (inValue) {
  562. GPIOA_PSOR = 1 << 26 ;
  563. }else{
  564. GPIOA_PCOR = 1 << 26 ;
  565. }
  566. break ;
  567. case DigitalPort::D43 : // PTB20
  568. if (inValue) {
  569. GPIOB_PSOR = 1 << 20 ;
  570. }else{
  571. GPIOB_PCOR = 1 << 20 ;
  572. }
  573. break ;
  574. case DigitalPort::D44 : // PTB22
  575. if (inValue) {
  576. GPIOB_PSOR = 1 << 22 ;
  577. }else{
  578. GPIOB_PCOR = 1 << 22 ;
  579. }
  580. break ;
  581. case DigitalPort::D45 : // PTB23
  582. if (inValue) {
  583. GPIOB_PSOR = 1 << 23 ;
  584. }else{
  585. GPIOB_PCOR = 1 << 23 ;
  586. }
  587. break ;
  588. case DigitalPort::D46 : // PTB21
  589. if (inValue) {
  590. GPIOB_PSOR = 1 << 21 ;
  591. }else{
  592. GPIOB_PCOR = 1 << 21 ;
  593. }
  594. break ;
  595. case DigitalPort::D47 : // PTD8
  596. if (inValue) {
  597. GPIOD_PSOR = 1 << 8 ;
  598. }else{
  599. GPIOD_PCOR = 1 << 8 ;
  600. }
  601. break ;
  602. case DigitalPort::D48 : // PTD9
  603. if (inValue) {
  604. GPIOD_PSOR = 1 << 9 ;
  605. }else{
  606. GPIOD_PCOR = 1 << 9 ;
  607. }
  608. break ;
  609. case DigitalPort::D49 : // PTB4
  610. if (inValue) {
  611. GPIOB_PSOR = 1 << 4 ;
  612. }else{
  613. GPIOB_PCOR = 1 << 4 ;
  614. }
  615. break ;
  616. case DigitalPort::D50 : // PTB5
  617. if (inValue) {
  618. GPIOB_PSOR = 1 << 5 ;
  619. }else{
  620. GPIOB_PCOR = 1 << 5 ;
  621. }
  622. break ;
  623. case DigitalPort::D51 : // PTD14
  624. if (inValue) {
  625. GPIOD_PSOR = 1 << 14 ;
  626. }else{
  627. GPIOD_PCOR = 1 << 14 ;
  628. }
  629. break ;
  630. case DigitalPort::D52 : // PTD13
  631. if (inValue) {
  632. GPIOD_PSOR = 1 << 13 ;
  633. }else{
  634. GPIOD_PCOR = 1 << 13 ;
  635. }
  636. break ;
  637. case DigitalPort::D53 : // PTD12
  638. if (inValue) {
  639. GPIOD_PSOR = 1 << 12 ;
  640. }else{
  641. GPIOD_PCOR = 1 << 12 ;
  642. }
  643. break ;
  644. case DigitalPort::D54 : // PTD15
  645. if (inValue) {
  646. GPIOD_PSOR = 1 << 15 ;
  647. }else{
  648. GPIOD_PCOR = 1 << 15 ;
  649. }
  650. break ;
  651. case DigitalPort::D55 : // PTD11
  652. if (inValue) {
  653. GPIOD_PSOR = 1 << 11 ;
  654. }else{
  655. GPIOD_PCOR = 1 << 11 ;
  656. }
  657. break ;
  658. case DigitalPort::D56 : // PTE10
  659. if (inValue) {
  660. GPIOE_PSOR = 1 << 10 ;
  661. }else{
  662. GPIOE_PCOR = 1 << 10 ;
  663. }
  664. break ;
  665. case DigitalPort::D57 : // PTE11
  666. if (inValue) {
  667. GPIOE_PSOR = 1 << 11 ;
  668. }else{
  669. GPIOE_PCOR = 1 << 11 ;
  670. }
  671. break ;
  672. case DigitalPort::True : // No port
  673. case DigitalPort::False : // No port
  674. break ;
  675. }
  676. }
  677. bool digitalRead (const DigitalPort inPort) {
  678. bool result = false ;
  679. switch (inPort) {
  680. case DigitalPort::D0 : // PTB16
  681. result = (GPIOB_PDIR & (1 << 16)) != 0 ;
  682. break ;
  683. case DigitalPort::D1 : // PTB17
  684. result = (GPIOB_PDIR & (1 << 17)) != 0 ;
  685. break ;
  686. case DigitalPort::D2 : // PTD0
  687. result = (GPIOD_PDIR & (1 << 0)) != 0 ;
  688. break ;
  689. case DigitalPort::D3 : // PTA12
  690. result = (GPIOA_PDIR & (1 << 12)) != 0 ;
  691. break ;
  692. case DigitalPort::D4 : // PTA13
  693. result = (GPIOA_PDIR & (1 << 13)) != 0 ;
  694. break ;
  695. case DigitalPort::D5 : // PTD7
  696. result = (GPIOD_PDIR & (1 << 7)) != 0 ;
  697. break ;
  698. case DigitalPort::D6 : // PTD4
  699. result = (GPIOD_PDIR & (1 << 4)) != 0 ;
  700. break ;
  701. case DigitalPort::D7 : // PTD2
  702. result = (GPIOD_PDIR & (1 << 2)) != 0 ;
  703. break ;
  704. case DigitalPort::D8 : // PTD3
  705. result = (GPIOD_PDIR & (1 << 3)) != 0 ;
  706. break ;
  707. case DigitalPort::D9 : // PTC3
  708. result = (GPIOC_PDIR & (1 << 3)) != 0 ;
  709. break ;
  710. case DigitalPort::D10 : // PTC4
  711. result = (GPIOC_PDIR & (1 << 4)) != 0 ;
  712. break ;
  713. case DigitalPort::D11 : // PTC6
  714. result = (GPIOC_PDIR & (1 << 6)) != 0 ;
  715. break ;
  716. case DigitalPort::D12 : // PTC7
  717. result = (GPIOC_PDIR & (1 << 7)) != 0 ;
  718. break ;
  719. case DigitalPort::D13 : // PTC5
  720. result = (GPIOC_PDIR & (1 << 5)) != 0 ;
  721. break ;
  722. case DigitalPort::D14 : // PTD1
  723. result = (GPIOD_PDIR & (1 << 1)) != 0 ;
  724. break ;
  725. case DigitalPort::D15 : // PTC0
  726. result = (GPIOC_PDIR & (1 << 0)) != 0 ;
  727. break ;
  728. case DigitalPort::D16 : // PTB0
  729. result = (GPIOB_PDIR & (1 << 0)) != 0 ;
  730. break ;
  731. case DigitalPort::D17 : // PTB1
  732. result = (GPIOB_PDIR & (1 << 1)) != 0 ;
  733. break ;
  734. case DigitalPort::D18 : // PTB3
  735. result = (GPIOB_PDIR & (1 << 3)) != 0 ;
  736. break ;
  737. case DigitalPort::D19 : // PTB2
  738. result = (GPIOB_PDIR & (1 << 2)) != 0 ;
  739. break ;
  740. case DigitalPort::D20 : // PTD5
  741. result = (GPIOD_PDIR & (1 << 5)) != 0 ;
  742. break ;
  743. case DigitalPort::D21 : // PTD6
  744. result = (GPIOD_PDIR & (1 << 6)) != 0 ;
  745. break ;
  746. case DigitalPort::D22 : // PTC1
  747. result = (GPIOC_PDIR & (1 << 1)) != 0 ;
  748. break ;
  749. case DigitalPort::D23 : // PTC2
  750. result = (GPIOC_PDIR & (1 << 2)) != 0 ;
  751. break ;
  752. case DigitalPort::D24 : // PTE26
  753. result = (GPIOE_PDIR & (1 << 26)) != 0 ;
  754. break ;
  755. case DigitalPort::D25 : // PTA5
  756. result = (GPIOA_PDIR & (1 << 5)) != 0 ;
  757. break ;
  758. case DigitalPort::D26 : // PTA14
  759. result = (GPIOA_PDIR & (1 << 14)) != 0 ;
  760. break ;
  761. case DigitalPort::D27 : // PTA15
  762. result = (GPIOA_PDIR & (1 << 15)) != 0 ;
  763. break ;
  764. case DigitalPort::D28 : // PTA16
  765. result = (GPIOA_PDIR & (1 << 16)) != 0 ;
  766. break ;
  767. case DigitalPort::D29 : // PTB18
  768. result = (GPIOB_PDIR & (1 << 18)) != 0 ;
  769. break ;
  770. case DigitalPort::D30 : // PTB19
  771. result = (GPIOB_PDIR & (1 << 19)) != 0 ;
  772. break ;
  773. case DigitalPort::D31 : // PTB10
  774. result = (GPIOB_PDIR & (1 << 10)) != 0 ;
  775. break ;
  776. case DigitalPort::D32 : // PTB11
  777. result = (GPIOB_PDIR & (1 << 11)) != 0 ;
  778. break ;
  779. case DigitalPort::D33 : // PTE24
  780. result = (GPIOE_PDIR & (1 << 24)) != 0 ;
  781. break ;
  782. case DigitalPort::D34 : // PTE25
  783. result = (GPIOE_PDIR & (1 << 25)) != 0 ;
  784. break ;
  785. case DigitalPort::D35 : // PTC8
  786. result = (GPIOC_PDIR & (1 << 8)) != 0 ;
  787. break ;
  788. case DigitalPort::D36 : // PTC9
  789. result = (GPIOC_PDIR & (1 << 9)) != 0 ;
  790. break ;
  791. case DigitalPort::D37 : // PTC10
  792. result = (GPIOC_PDIR & (1 << 10)) != 0 ;
  793. break ;
  794. case DigitalPort::D38 : // PTC11
  795. result = (GPIOC_PDIR & (1 << 11)) != 0 ;
  796. break ;
  797. case DigitalPort::D39 : // PTA17
  798. result = (GPIOA_PDIR & (1 << 17)) != 0 ;
  799. break ;
  800. case DigitalPort::D40 : // PTA28
  801. result = (GPIOA_PDIR & (1 << 28)) != 0 ;
  802. break ;
  803. case DigitalPort::D41 : // PTA29
  804. result = (GPIOA_PDIR & (1 << 29)) != 0 ;
  805. break ;
  806. case DigitalPort::D42 : // PTA26
  807. result = (GPIOA_PDIR & (1 << 26)) != 0 ;
  808. break ;
  809. case DigitalPort::D43 : // PTB20
  810. result = (GPIOB_PDIR & (1 << 20)) != 0 ;
  811. break ;
  812. case DigitalPort::D44 : // PTB22
  813. result = (GPIOB_PDIR & (1 << 22)) != 0 ;
  814. break ;
  815. case DigitalPort::D45 : // PTB23
  816. result = (GPIOB_PDIR & (1 << 23)) != 0 ;
  817. break ;
  818. case DigitalPort::D46 : // PTB21
  819. result = (GPIOB_PDIR & (1 << 21)) != 0 ;
  820. break ;
  821. case DigitalPort::D47 : // PTD8
  822. result = (GPIOD_PDIR & (1 << 8)) != 0 ;
  823. break ;
  824. case DigitalPort::D48 : // PTD9
  825. result = (GPIOD_PDIR & (1 << 9)) != 0 ;
  826. break ;
  827. case DigitalPort::D49 : // PTB4
  828. result = (GPIOB_PDIR & (1 << 4)) != 0 ;
  829. break ;
  830. case DigitalPort::D50 : // PTB5
  831. result = (GPIOB_PDIR & (1 << 5)) != 0 ;
  832. break ;
  833. case DigitalPort::D51 : // PTD14
  834. result = (GPIOD_PDIR & (1 << 14)) != 0 ;
  835. break ;
  836. case DigitalPort::D52 : // PTD13
  837. result = (GPIOD_PDIR & (1 << 13)) != 0 ;
  838. break ;
  839. case DigitalPort::D53 : // PTD12
  840. result = (GPIOD_PDIR & (1 << 12)) != 0 ;
  841. break ;
  842. case DigitalPort::D54 : // PTD15
  843. result = (GPIOD_PDIR & (1 << 15)) != 0 ;
  844. break ;
  845. case DigitalPort::D55 : // PTD11
  846. result = (GPIOD_PDIR & (1 << 11)) != 0 ;
  847. break ;
  848. case DigitalPort::D56 : // PTE10
  849. result = (GPIOE_PDIR & (1 << 10)) != 0 ;
  850. break ;
  851. case DigitalPort::D57 : // PTE11
  852. result = (GPIOE_PDIR & (1 << 11)) != 0 ;
  853. break ;
  854. case DigitalPort::False : // No port, returns always false
  855. break ;
  856. case DigitalPort::True : // No port, returns always true
  857. result = true ;
  858. break ;
  859. }
  860. return result ;
  861. }
  862. void digitalToggle (const DigitalPort inPort) {
  863. switch (inPort) {
  864. case DigitalPort::D0 : // PTB16
  865. GPIOB_PTOR = 1 << 16 ;
  866. break ;
  867. case DigitalPort::D1 : // PTB17
  868. GPIOB_PTOR = 1 << 17 ;
  869. break ;
  870. case DigitalPort::D2 : // PTD0
  871. GPIOD_PTOR = 1 << 0 ;
  872. break ;
  873. case DigitalPort::D3 : // PTA12
  874. GPIOA_PTOR = 1 << 12 ;
  875. break ;
  876. case DigitalPort::D4 : // PTA13
  877. GPIOA_PTOR = 1 << 13 ;
  878. break ;
  879. case DigitalPort::D5 : // PTD7
  880. GPIOD_PTOR = 1 << 7 ;
  881. break ;
  882. case DigitalPort::D6 : // PTD4
  883. GPIOD_PTOR = 1 << 4 ;
  884. break ;
  885. case DigitalPort::D7 : // PTD2
  886. GPIOD_PTOR = 1 << 2 ;
  887. break ;
  888. case DigitalPort::D8 : // PTD3
  889. GPIOD_PTOR = 1 << 3 ;
  890. break ;
  891. case DigitalPort::D9 : // PTC3
  892. GPIOC_PTOR = 1 << 3 ;
  893. break ;
  894. case DigitalPort::D10 : // PTC4
  895. GPIOC_PTOR = 1 << 4 ;
  896. break ;
  897. case DigitalPort::D11 : // PTC6
  898. GPIOC_PTOR = 1 << 6 ;
  899. break ;
  900. case DigitalPort::D12 : // PTC7
  901. GPIOC_PTOR = 1 << 7 ;
  902. break ;
  903. case DigitalPort::D13 : // PTC5
  904. GPIOC_PTOR = 1 << 5 ;
  905. break ;
  906. case DigitalPort::D14 : // PTD1
  907. GPIOD_PTOR = 1 << 1 ;
  908. break ;
  909. case DigitalPort::D15 : // PTC0
  910. GPIOC_PTOR = 1 << 0 ;
  911. break ;
  912. case DigitalPort::D16 : // PTB0
  913. GPIOB_PTOR = 1 << 0 ;
  914. break ;
  915. case DigitalPort::D17 : // PTB1
  916. GPIOB_PTOR = 1 << 1 ;
  917. break ;
  918. case DigitalPort::D18 : // PTB3
  919. GPIOB_PTOR = 1 << 3 ;
  920. break ;
  921. case DigitalPort::D19 : // PTB2
  922. GPIOB_PTOR = 1 << 2 ;
  923. break ;
  924. case DigitalPort::D20 : // PTD5
  925. GPIOD_PTOR = 1 << 5 ;
  926. break ;
  927. case DigitalPort::D21 : // PTD6
  928. GPIOD_PTOR = 1 << 6 ;
  929. break ;
  930. case DigitalPort::D22 : // PTC1
  931. GPIOC_PTOR = 1 << 1 ;
  932. break ;
  933. case DigitalPort::D23 : // PTC2
  934. GPIOC_PTOR = 1 << 2 ;
  935. break ;
  936. case DigitalPort::D24 : // PTE26
  937. GPIOE_PTOR = 1 << 26 ;
  938. break ;
  939. case DigitalPort::D25 : // PTA5
  940. GPIOA_PTOR = 1 << 5 ;
  941. break ;
  942. case DigitalPort::D26 : // PTA14
  943. GPIOA_PTOR = 1 << 14 ;
  944. break ;
  945. case DigitalPort::D27 : // PTA15
  946. GPIOA_PTOR = 1 << 15 ;
  947. break ;
  948. case DigitalPort::D28 : // PTA16
  949. GPIOA_PTOR = 1 << 16 ;
  950. break ;
  951. case DigitalPort::D29 : // PTB18
  952. GPIOB_PTOR = 1 << 18 ;
  953. break ;
  954. case DigitalPort::D30 : // PTB19
  955. GPIOB_PTOR = 1 << 19 ;
  956. break ;
  957. case DigitalPort::D31 : // PTB10
  958. GPIOB_PTOR = 1 << 10 ;
  959. break ;
  960. case DigitalPort::D32 : // PTB11
  961. GPIOB_PTOR = 1 << 11 ;
  962. break ;
  963. case DigitalPort::D33 : // PTE24
  964. GPIOE_PTOR = 1 << 24 ;
  965. break ;
  966. case DigitalPort::D34 : // PTE25
  967. GPIOE_PTOR = 1 << 25 ;
  968. break ;
  969. case DigitalPort::D35 : // PTC8
  970. GPIOC_PTOR = 1 << 8 ;
  971. break ;
  972. case DigitalPort::D36 : // PTC9
  973. GPIOC_PTOR = 1 << 9 ;
  974. break ;
  975. case DigitalPort::D37 : // PTC10
  976. GPIOC_PTOR = 1 << 10 ;
  977. break ;
  978. case DigitalPort::D38 : // PTC11
  979. GPIOC_PTOR = 1 << 11 ;
  980. break ;
  981. case DigitalPort::D39 : // PTA17
  982. GPIOA_PTOR = 1 << 17 ;
  983. break ;
  984. case DigitalPort::D40 : // PTA28
  985. GPIOA_PTOR = 1 << 28 ;
  986. break ;
  987. case DigitalPort::D41 : // PTA29
  988. GPIOA_PTOR = 1 << 29 ;
  989. break ;
  990. case DigitalPort::D42 : // PTA26
  991. GPIOA_PTOR = 1 << 26 ;
  992. break ;
  993. case DigitalPort::D43 : // PTB20
  994. GPIOB_PTOR = 1 << 20 ;
  995. break ;
  996. case DigitalPort::D44 : // PTB22
  997. GPIOB_PTOR = 1 << 22 ;
  998. break ;
  999. case DigitalPort::D45 : // PTB23
  1000. GPIOB_PTOR = 1 << 23 ;
  1001. break ;
  1002. case DigitalPort::D46 : // PTB21
  1003. GPIOB_PTOR = 1 << 21 ;
  1004. break ;
  1005. case DigitalPort::D47 : // PTD8
  1006. GPIOD_PTOR = 1 << 8 ;
  1007. break ;
  1008. case DigitalPort::D48 : // PTD9
  1009. GPIOD_PTOR = 1 << 9 ;
  1010. break ;
  1011. case DigitalPort::D49 : // PTB4
  1012. GPIOB_PTOR = 1 << 4 ;
  1013. break ;
  1014. case DigitalPort::D50 : // PTB5
  1015. GPIOB_PTOR = 1 << 5 ;
  1016. break ;
  1017. case DigitalPort::D51 : // PTD14
  1018. GPIOD_PTOR = 1 << 14 ;
  1019. break ;
  1020. case DigitalPort::D52 : // PTD13
  1021. GPIOD_PTOR = 1 << 13 ;
  1022. break ;
  1023. case DigitalPort::D53 : // PTD12
  1024. GPIOD_PTOR = 1 << 12 ;
  1025. break ;
  1026. case DigitalPort::D54 : // PTD15
  1027. GPIOD_PTOR = 1 << 15 ;
  1028. break ;
  1029. case DigitalPort::D55 : // PTD11
  1030. GPIOD_PTOR = 1 << 11 ;
  1031. break ;
  1032. case DigitalPort::D56 : // PTE10
  1033. GPIOE_PTOR = 1 << 10 ;
  1034. break ;
  1035. case DigitalPort::D57 : // PTE11
  1036. GPIOE_PTOR = 1 << 11 ;
  1037. break ;
  1038. case DigitalPort::False : // No port, no effect
  1039. case DigitalPort::True : // No port, no effect
  1040. break ;
  1041. }
  1042. }