Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.90 KB | None | 0 0
  1. /* ###################################################################
  2. ** Filename : main.c
  3. ** Project : 3
  4. ** Processor : MKL46Z256VLL4
  5. ** Version : Driver 01.01
  6. ** Compiler : GNU C Compiler
  7. ** Date/Time : 2019-05-30, 13:41, # CodeGen: 0
  8. ** Abstract :
  9. ** Main module.
  10. ** This module contains user's application code.
  11. ** Settings :
  12. ** Contents :
  13. ** No public methods
  14. **
  15. ** ###################################################################*/
  16. /*!
  17. ** @file main.c
  18. ** @version 01.01
  19. ** @brief
  20. ** Main module.
  21. ** This module contains user's application code.
  22. */
  23. /*!
  24. ** @addtogroup main_module main module documentation
  25. ** @{
  26. */
  27. /* MODULE main */
  28.  
  29.  
  30. /* Including needed modules to compile this module/procedure */
  31. #include "Cpu.h"
  32. #include "Events.h"
  33. /* Including shared modules, which are used for whole project */
  34. #include "PE_Types.h"
  35. #include "PE_Error.h"
  36. #include "PE_Const.h"
  37. #include "IO_Map.h"
  38. #define NOTERATIO 1.05 // 正弦波の値を変えるタイミングを変える倍率
  39. #define INTERVAL 1500 // 音と音のインターバル
  40. #define SCORESIZE 82
  41. #define SCORE2SIZE 66
  42. /* User includes (#include below this line is not maintained by Processor Expert) */
  43. void convert8bit(int i) {
  44. //上位ビットから順に B0, B1, B2, B3, A14, A15, A16, A17
  45. if (i & 1) {GPIOB_PSOR = (1 << 0);} else {GPIOB_PCOR = (1 << 0);}
  46. if ((i >> 1) & 1) {GPIOB_PSOR = (1 << 1);} else {GPIOB_PCOR = (1 << 1);}
  47. if ((i >> 2) & 1) {GPIOB_PSOR = (1 << 2);} else {GPIOB_PCOR = (1 << 2);}
  48. if ((i >> 3) & 1) {GPIOB_PSOR = (1 << 3);} else {GPIOB_PCOR = (1 << 3);}
  49. if ((i >> 4) & 1) {GPIOA_PSOR = (1 << 14);} else {GPIOA_PCOR = (1 << 14);}
  50. if ((i >> 5) & 1) {GPIOA_PSOR = (1 << 15);} else {GPIOA_PCOR = (1 << 15);}
  51. if ((i >> 6) & 1) {GPIOA_PSOR = (1 << 16);} else {GPIOA_PCOR = (1 << 16);}
  52. if ((i >> 7) & 1) {GPIOA_PSOR = (1 << 17);} else {GPIOA_PCOR = (1 << 17);}
  53. }
  54.  
  55. typedef struct noteinfo {
  56. double length; // 音の長さ
  57. char pitch; //音の高さ(-1なら休符)
  58. int octave; //オクターブ
  59. } note;
  60.  
  61. int notes[12][4] =
  62. {
  63. {1222, 611, 305, 152}, // C 0
  64. {1153, 576, 288, 143}, // C# 1
  65. {1089, 544, 271, 135}, // D 2
  66. {1028, 513, 256, 127}, // D# 3
  67. {970, 484, 242, 120}, // E 4
  68. {915, 457, 228, 114}, // F 5
  69. {864, 431, 215, 107}, // F# 6
  70. {815, 407, 203, 101}, // G 7
  71. {770, 384, 192, 95}, // G# 8
  72. {726, 363, 181, 90}, // A 9
  73. {685, 342, 171, 85}, // A#(a) 10
  74. {647, 323, 161, 80} // B 11
  75. };
  76.  
  77. int getPitchNumber(char pitch) { // break...?
  78. switch (pitch) {
  79. case 'C': return 0; break;
  80. case 'c': return 1; break;
  81. case 'D': return 2; break;
  82. case 'd': return 3; break;
  83. case 'E': return 4; break;
  84. case 'F': return 5; break;
  85. case 'f': return 6; break;
  86. case 'G': return 7; break;
  87. case 'g': return 8; break;
  88. case 'A': return 9; break;
  89. case 'a': return 10; break;
  90. case 'B': return 11; break;
  91. case 'R': return -1; break;
  92. }
  93. }
  94.  
  95. int getOctave(){
  96. int octave;
  97. if(GPIOE_PDIR & (1 << 2)){
  98. if(GPIOE_PDIR & (1 << 3)){
  99. octave = 2; //どっちも5Vなら1オクターブ高く
  100. }else{
  101. octave = 1; //両方が違う値をとればそのままの値を
  102. }
  103. }else{
  104. if(GPIOE_PDIR & (1 << 3)){
  105. octave = 1; //両方が違う値をとればそのままの値を
  106. }else{
  107. octave = 0; //どっちも0Vなら1オクターブ低く
  108. }
  109. }
  110. return octave;
  111. }
  112.  
  113. int getSpeed(){
  114. int speed;
  115. if(GPIOE_PDIR & (1 << 6)){speed = 2;}else{speed = 1;}
  116. return speed;
  117. }
  118.  
  119. int changeSong(){
  120. // 1ならscore[]を、0ならscore2[]を与える
  121. int score;
  122. if(GPIOE_PDIR & (1 << 1)) {
  123. score = 1;
  124. }else{
  125. score = 2;
  126. }
  127. return score;
  128. }
  129.  
  130. int restflag;
  131.  
  132. void setNote(note note) {
  133. // note->length : 音の長さ
  134. // note->pitch : 音の高さ
  135. // note->octave : オクターブ
  136. // カウンタを止める -> 設定変更 -> increment開始
  137. int pitch = getPitchNumber(note.pitch); // 音の高さに対応する数字を取得
  138. int octave = note.octave + getOctave();
  139. int speed = getSpeed();
  140. int tempo;
  141. if(changeSong() == 1){tempo = 116;} else {tempo = 82;}
  142. TPM0_SC &= ~TPM_SC_CMOD(0b11); // Stop TPM0 (Set CMOD to 0)
  143. TPM1_SC &= ~TPM_SC_CMOD(0b11); // Stop TPM1 (Set CMOD to 0)
  144. if (pitch == -1) { // 休符
  145. TPM1_MOD = TPM_MOD_MOD((7499760 / tempo * note.length - INTERVAL) / speed); //31249(1秒)* (60/116) * note->length - 音と音の切れ目
  146. restflag = 1;
  147. } else {
  148. TPM0_MOD = TPM_MOD_MOD(notes[pitch][octave]);
  149. TPM1_MOD = TPM_MOD_MOD((7499760 / tempo * note.length - INTERVAL) / speed); //31249(1秒)* (60/116) * note->length - 音と音の切れ目
  150. restflag = 0;
  151. }
  152. TPM0_SC |= TPM_SC_CMOD(0b01); // Start TPM0
  153. TPM1_SC |= TPM_SC_CMOD(0b01); // Start TPM1
  154. }
  155.  
  156. void determineNoteByTSI(int touch){
  157. TPM0_SC &= ~TPM_SC_CMOD(0b11); // Stop TPM0 (Set CMOD to 0)
  158. TPM0_MOD = TPM_MOD_MOD(touch / 64);
  159. TPM0_SC |= TPM_SC_CMOD(0b01); // Start TPM0
  160. }
  161.  
  162.  
  163.  
  164.  
  165. /*lint -save -e970 Disable MISRA rule (6.3) checking. */
  166. int main(void)
  167. /*lint -restore Enable MISRA rule (6.3) checking. */
  168. {
  169. /* Write your local variable definition here */
  170.  
  171. /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  172. PE_low_level_init();
  173. /*** End of Processor Expert internal initialization. ***/
  174.  
  175. /* Write your code here */
  176. /* For example: for(;;) { } */
  177. /* 正弦波となるように電圧のデータを組む */
  178. int sin_wave[] =
  179. {
  180. 0x80, 0x9F, 0xBD, 0xD7, 0xEC,
  181. 0xF9, 0xFF, 0xFD, 0xF3, 0xE2,
  182. 0xCB, 0xAF, 0x90, 0x6F, 0x50,
  183. 0x32, 0x1D, 0x0C, 0x02, 0x00,
  184. 0x06, 0x13, 0x28, 0x42, 0x60
  185. };
  186.  
  187. // 体裁として、1行あたり1小節 R=rest(休符)
  188. note score[] = {
  189. // 体裁として、1行あたり1小節 R=rest(休符)
  190. {0.1875, 'C', 0}, {0.0625, 'F', 0},
  191. {0.25, 'A', 0}, {0.25, 'G', 0}, {0.25, 'F', 0}, {0.1875, 'F', 0}, {0.0625, 'F', 0},
  192. {0.75, 'C', 1}, {0.25, 'A', 0},
  193. {0.5, 'A', 0}, {0.25, 'F', 0}, {0.25, 'A', 0},
  194. {0.75, 'G', 0}, {0.1875, 'C', 0}, {0.0625, 'F', 0},
  195. {0.25, 'A', 0}, {0.25, 'G', 0}, {0.25, 'F', 0}, {0.1875, 'F', 0}, {0.0625, 'A', 0},
  196. {0.75, 'D', 1}, {0.25, 'D', 1},
  197. {0.375, 'C', 1}, {0.125, 'A', 0}, {0.25, 'G', 0}, {0.1875, 'G', 0}, {0.0625, 'A', 0},
  198. {0.75, 'F', 0}, {0.25, 'R', 0},
  199. {0.25, 'G', 0}, {0.125, 'G', 0}, {0.125, 'A', 0}, {0.1875, 'a', 0}, {0.0625, 'a', 0}, {0.125, 'a', 0}, {0.125, 'a', 0},
  200. {0.25, 'A', 0}, {0.125, 'A', 0}, {0.125, 'a', 0}, {0.5, 'C', 1},
  201. {0.1875, 'D', 1}, {0.0625, 'D', 1}, {0.125, 'D', 1}, {0.125, 'D', 1}, {0.25, 'C', 1}, {0.125, 'A', 0}, {0.125, 'F', 0},
  202. {0.1875, 'G', 0}, {0.0625, 'G', 0}, {0.125, 'F', 0}, {0.125, 'D', 0}, {0.25, 'C', 0}, {0.25, 'R', 0},
  203. {0.25, 'D', 0}, {0.125, 'D', 0}, {0.125, 'C', 0}, {0.1875, 'F', 0}, {0.0625, 'F', 0}, {0.125, 'G', 0}, {0.125, 'C', 1},
  204. {0.25, 'A', 0}, {0.125, 'G', 0}, {0.125, 'G', 0}, {0.125, 'F', 0}, {0.125, 'R', 0}, {0.1875, 'C', 1}, {0.0625, 'C', 1},
  205. {0.25, 'D', 1}, {0.25, 'C', 1}, {0.25, 'A', 0}, {0.1875, 'F', 0}, {0.0625, 'A', 0},
  206. {0.75, 'C', 1}, {0.25, 'D', 1},
  207. {0.5, 'C', 1}, {0.25, 'A', 0}, {0.25, 'G', 0},
  208. {0.25, 'F', 0}, {0.1875, 'F', 1}, {0.0625, 'F', 1}, {0.5, 'F', 1},
  209. {1.0, 'R', 0}
  210. };
  211.  
  212. note score2[] = {
  213. {0.0625, 'C', 1}, {0.0625, 'G', 0}, {0.0625, 'A', 0}, {0.0625, 'G', 0}, {0.125, 'A', 0}, {0.125, 'G', 0}, {0.125, 'E', 1}, {0.0625, 'G', 1}, {0.0625, 'E', 1}, {0.0625, 'D', 1}, {0.1875, 'C', 1},
  214. {0.0625, 'C', 1}, {0.0625, 'G', 0}, {0.0625, 'A', 0}, {0.0625, 'G', 0}, {0.125, 'A', 0}, {0.125, 'G', 0}, {0.125, 'E', 1}, {0.0625, 'G', 1}, {0.0625, 'E', 1}, {0.0625, 'D', 1}, {0.1875, 'C', 1},
  215. {0.25, 'A', 0}, {0.0625, 'R', 0}, {0.0625, 'A', 0}, {0.0625, 'B', 0}, {0.0625, 'C', 1}, {0.25, 'E', 1}, {0.25, 'C', 1},
  216. {0.125, 'F', 1}, {0.125, 'E', 1}, {0.125, 'C', 1}, {0.125, 'A', 0}, {0.125, 'G', 0}, {0.0625, 'E', 1}, {0.1875, 'E', 1},
  217. {0.0625, 'C', 1}, {0.0625, 'G', 0}, {0.0625, 'A', 0}, {0.0625, 'G', 0}, {0.125, 'A', 0}, {0.125, 'G', 0}, {0.125, 'E', 1}, {0.0625, 'G', 1}, {0.0625, 'E', 1}, {0.0625, 'D', 1}, {0.1875, 'C', 1},
  218. {0.0625, 'C', 1}, {0.0625, 'G', 0}, {0.0625, 'A', 0}, {0.0625, 'G', 0}, {0.125, 'A', 0}, {0.125, 'G', 0}, {0.125, 'E', 1}, {0.0625, 'G', 1}, {0.0625, 'E', 1}, {0.0625, 'D', 1}, {0.1875, 'C', 1},
  219. {0.25, 'G', 1}, {0.25, 'C', 1}, {0.125, 'F', 1}, {0.125, 'E', 1}, {0.125, 'D', 1}, {0.0625, 'C', 1}, {1.0625, 'C', 1},
  220. {1, 'R', 0}
  221. };
  222.  
  223. /* クロックの設定 */
  224. SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; // PTA のクロックを有効にする
  225. PORTA_PCR2 = PORT_PCR_MUX(1); // PTA2 を GPIO に設定する
  226. GPIOA_PDDR &= ~(1 << 2); // PTA2 を入力に設定する(for debug)
  227.  
  228. PORTA_PCR14 = PORT_PCR_MUX(1); // PTA14をGPIOに設定する
  229. PORTA_PCR15 = PORT_PCR_MUX(1); // PTA15をGPIOに設定する
  230. PORTA_PCR16 = PORT_PCR_MUX(1); // PTA16をGPIOに設定する
  231. PORTA_PCR17 = PORT_PCR_MUX(1); // PTA17をGPIOに設定する
  232. GPIOA_PDDR |= (0b1111 << 14); //PTA14-17を出力に設定する
  233.  
  234. SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;
  235. PORTB_PCR0 = PORT_PCR_MUX(1); // PTB0をGPIOに設定する
  236. PORTB_PCR1 = PORT_PCR_MUX(1); // PTB1をGPIOに設定する
  237. PORTB_PCR2 = PORT_PCR_MUX(1); // PTB2をGPIOに設定する
  238. PORTB_PCR3 = PORT_PCR_MUX(1); // PTB3をGPIOに設定する
  239. GPIOB_PDDR |= (0b1111 << 0); //PTB0-3を出力に設定する
  240.  
  241. SIM_SCGC5 |= SIM_SCGC5_PORTD_MASK; // PTDのクロックを有効にする
  242. PORTD_PCR5 = PORT_PCR_MUX(1);
  243. GPIOD_PDDR |= (1 << 5); //(debug)
  244. SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK; // PTEのクロックを有効にする
  245. PORTE_PCR29 = PORT_PCR_MUX(1);
  246. GPIOE_PDDR |= (1 << 29); // (debug)
  247.  
  248. PORTE_PCR1 = PORT_PCR_MUX(1);
  249. PORTE_PCR2 = PORT_PCR_MUX(1);
  250. PORTE_PCR3 = PORT_PCR_MUX(1);
  251. PORTE_PCR6 = PORT_PCR_MUX(1);
  252. GPIOE_PDDR &= ~(0b111 << 1); // PTE1-3のクロックを有効にする(音程の変更)
  253. GPIOE_PDDR &= ~(1 << 6);
  254.  
  255. //Enable clock gates
  256. SIM_SCGC5 |= (SIM_SCGC5_TSI_MASK) | (SIM_SCGC5_PORTA_MASK);
  257. PORTA_PCR1 = PORT_PCR_MUX(0); //Enable ALT0 for portA1 -> Ch 2
  258. //Configure the TSI module and enable the interrupt
  259. TSI0_GENCS |= (TSI_GENCS_ESOR_MASK
  260. | TSI_GENCS_REFCHRG(4)
  261. | TSI_GENCS_DVOLT(0)
  262. | TSI_GENCS_EXTCHRG(6)
  263. | TSI_GENCS_PS(4)
  264. | TSI_GENCS_NSCN(11)
  265. | TSI_GENCS_TSIIEN_MASK
  266. | TSI_GENCS_STPE_MASK
  267. //| TSI_GENCS_STM_MASK //Trigger for the module 0=Software
  268. );
  269. // Clear End of scan and Out of Range Flags
  270. TSI0_GENCS |= (TSI_GENCS_OUTRGF_MASK) | (TSI_GENCS_EOSF_MASK);
  271. //Select Desired Channel to Scan
  272. TSI0_DATA |= (TSI_DATA_TSICH(2)); // Choose channel 2
  273. // Enables TSI
  274. TSI0_GENCS |= (TSI_GENCS_TSIEN_MASK);
  275.  
  276. int i; // for sin_wave[]
  277. int j=0; // for score[]
  278. int state = 0;
  279. int counter = 0;
  280. int song = 1; // 1ならscore[], 2ならscore2[]を演奏
  281. bool pta2_val;
  282. int pta2_pushing = 0;
  283. int scorenumber;
  284. int touch;
  285. // スイッチが離されるまで待つ
  286. while (1) {
  287. pta2_val = GPIOA_PDIR & (1 << 2) ? 1 : 0;
  288. if (pta2_val == 0) break;
  289. }
  290.  
  291. while(1){
  292. switch (state) {
  293. case 0: // 初期状態
  294. // 変数の値を設定
  295. i = 0; j = 1;
  296. GPIOD_PCOR = (1 << 5);
  297. GPIOE_PCOR = (1 << 29);
  298. while(1){
  299. pta2_val = GPIOA_PDIR & (1 << 2) ? 1 : 0;
  300. if (pta2_val) {
  301. if (pta2_pushing == 0) {
  302. pta2_pushing = 1; //押下モードに移行
  303. }
  304. } else {
  305. if (pta2_pushing == 1) { //おしてたら
  306. pta2_pushing = 0;
  307. state = 1;
  308. break;
  309. } else {
  310. pta2_pushing = 0;
  311. }
  312. }
  313. }
  314. break;
  315. case 1: // 演奏状態
  316. //タイマーを設定する
  317. GPIOD_PSOR = (1 << 5);
  318. GPIOE_PCOR = (1 << 29);
  319. SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK;
  320. SIM_SCGC6 |= SIM_SCGC6_TPM1_MASK;
  321. SIM_SOPT2 |= SIM_SOPT2_TPMSRC(0b11); // MCGIRCLKをセットする
  322. MCG_C2 |= MCG_C2_IRCS_MASK; // 4MHzをクロックソースとして指定
  323. MCG_SC &= ~MCG_SC_FCRDIV(0b111); // Divide by 1を設定
  324. TPM0_SC &= ~TPM_SC_PS(0b111); //divide by 1;
  325. TPM1_SC |= TPM_SC_PS(0b111); // divide by 128
  326. TSI0_DATA |= TSI_DATA_SWTS_MASK; // TSI0のscanを開始する
  327. scorenumber = changeSong();
  328. /* if(scorenumber == 1){
  329. if(j<SCORESIZE) {setNote(score[j]);} else {j=0;}
  330. }else{
  331. if(j<SCORE2SIZE) {setNote(score2[j]);} else {j=0;}
  332. }
  333. j++;*/
  334. while (1) {
  335. pta2_val = GPIOA_PDIR & (1 << 2) ? 1 : 0;
  336.  
  337.  
  338.  
  339.  
  340. if(TPM0_SC & TPM_SC_TOF_MASK){
  341. TPM0_SC |= TPM_SC_TOF_MASK;
  342. if(i==24) i=0;
  343. if(counter % 2 == 0 || restflag == 0){
  344. // インターバルor休符なら電圧を一定にしておく
  345. TPM0_SC &= ~TPM_SC_CMOD(0b11); // Stop TPM0 (Set CMOD to 0)
  346. TPM0_MOD = TPM_MOD_MOD(notes[9][0]);
  347. convert8bit(sin_wave[i]);
  348. TPM0_SC |= TPM_SC_CMOD(0b01); // Start TPM0
  349. i++;
  350. }
  351.  
  352. }
  353.  
  354. if(TSI0_GENCS & TSI_GENCS_EOSF_MASK){ // スキャンがおわったら
  355. TSI0_GENCS &= ~TSI_GENCS_EOSF_MASK; // タイマーをリセットする
  356. TSI0_DATA &= ~TSI_DATA_SWTS_MASK; // スタートを0にしとく(?)
  357. // TSI0_TSICNTを読み込んでみる
  358.  
  359. touch = TSI0_DATA & TSI_DATA_TSICNT_MASK;
  360. // touchの値に応じて音を流す
  361. determineNoteByTSI(touch);
  362. // クロックを再開する
  363. TSI0_DATA |= TSI_DATA_SWTS_MASK;
  364. }
  365.  
  366.  
  367.  
  368. /*if(TPM1_SC & TPM_SC_TOF_MASK){
  369. TPM1_SC |= TPM_SC_TOF_MASK;
  370. restflag = 0;
  371. if(counter % 2 == 1){
  372. // 音の間のインターバル
  373. TPM0_SC &= ~TPM_SC_CMOD(0b11);
  374. TPM1_SC &= ~TPM_SC_CMOD(0b11); // Stop TPM0 (Set CMOD to 0)
  375. TPM1_MOD = TPM_MOD_MOD(INTERVAL);
  376. TPM0_SC |= TPM_SC_CMOD(0b01); // Start TPM0
  377. TPM1_SC |= TPM_SC_CMOD(0b01);
  378. restflag = 1;
  379. }else{
  380. // 音を鳴らす
  381. if(scorenumber == 1){
  382. if(j<SCORESIZE) {setNote(score[0]);} else {j=0;}
  383. }else{
  384. if(j<SCORE2SIZE) {setNote(score2[0]);} else {j=0;}
  385. }
  386. j++;
  387. }
  388. counter++;
  389. }*/
  390.  
  391. if (pta2_val) {
  392. if (pta2_pushing == 0) {
  393. pta2_pushing = 1; //押下モードに移行
  394. }
  395. } else {
  396. if (pta2_pushing == 1) { //おしてたら
  397. pta2_pushing = 0;
  398. i = 0; j = 0; restflag = 0;
  399. TPM0_SC &= ~TPM_SC_CMOD(0b11); // Stop TPM0 (Set CMOD to 0)
  400. TPM1_SC &= ~TPM_SC_CMOD(0b11); // Stop TPM1 (Set CMOD to 0)
  401. state = 2;
  402. break;
  403. } else {
  404. pta2_pushing = 0;
  405. }
  406. }
  407. }
  408. break;
  409. case 2: // 演奏終了状態
  410. GPIOD_PCOR = (1 << 5);
  411. GPIOE_PSOR = (1 << 29);
  412. while(1){
  413. pta2_val = GPIOA_PDIR & (1 << 2) ? 1 : 0;
  414. if (pta2_val) {
  415. if (pta2_pushing == 0) {
  416. pta2_pushing = 1; //押下モードに移行
  417. }
  418. } else {
  419. if (pta2_pushing == 1) { //おしてたら
  420. pta2_pushing = 0;
  421. state = 1; // 離したらループ先頭に
  422. break;
  423. } else {
  424. pta2_pushing = 0;
  425. }
  426. }
  427. }
  428. break;
  429. default:
  430. break;
  431. }
  432. }
  433.  
  434.  
  435. /*** Don't write any code pass this line, or it will be deleted during code generation. ***/
  436. /*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
  437. #ifdef PEX_RTOS_START
  438. PEX_RTOS_START(); /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
  439. #endif
  440. /*** End of RTOS startup code. ***/
  441. /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
  442. for(;;){}
  443. /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
  444. } /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
  445.  
  446. /* END main */
  447. /*!
  448. ** @}
  449. */
  450. /*
  451. ** ###################################################################
  452. **
  453. ** This file was created by Processor Expert 10.5 [05.21]
  454. ** for the Freescale Kinetis series of microcontrollers.
  455. **
  456. ** ###################################################################
  457. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement