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

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