Changeset 155 for uKadecot/trunk/src
- Timestamp:
- Feb 4, 2016, 11:11:09 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/src/ukadecot/arduino.c
r108 r155 58 58 * モジュールストップ機能の設定(S12AD) 59 59 */ 60 sil_wrh_mem( (uint16_t *)SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* 書込み許可 */61 sil_wrw_mem( (uint32_t *)SYSTEM_MSTPCRA_ADDR,62 sil_rew_mem( (uint32_t *)SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA17_BIT);63 sil_wrh_mem( (uint16_t *)SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* 書込み禁止 */60 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* 書込み許可 */ 61 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 62 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA17_BIT); 63 sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* 書込み禁止 */ 64 64 65 65 /* 12bitADC初期化 */ 66 sil_wrh_mem( (uint16_t *)S12AD_ADEXICR_ADDR, 0x0000); /* 温度センサ出力、内部基準電圧非選択 */67 sil_wrh_mem( (uint16_t *)S12AD_ADANS0_ADDR, 0x00FF); /* 変換ポートAN000〜AN007選択、AN008〜AN015非選択 */68 sil_wrh_mem( (uint16_t *)S12AD_ADANS1_ADDR, 0x0000); /* 変換ポートAN016〜AN020非選択 */66 sil_wrh_mem(S12AD_ADEXICR_ADDR, 0x0000); /* 温度センサ出力、内部基準電圧非選択 */ 67 sil_wrh_mem(S12AD_ADANS0_ADDR, 0x00FF); /* 変換ポートAN000〜AN007選択、AN008〜AN015非選択 */ 68 sil_wrh_mem(S12AD_ADANS1_ADDR, 0x0000); /* 変換ポートAN016〜AN020非選択 */ 69 69 70 70 /* PWM出力(490Hz) */ … … 157 157 158 158 /* 書き込みプロテクトレジスタの設定 PFSWEビットへの書き込みを許可 */ 159 sil_wrb_mem( (uint8_t *)MPC_PWPR_ADDR, 0x00);159 sil_wrb_mem(MPC_PWPR_ADDR, 0x00); 160 160 /* 書き込みプロテクトレジスタの設定 PxxFSレジスタへの書き込みを許可 */ 161 sil_wrb_mem( (uint8_t *)MPC_PWPR_ADDR, 0x40);161 sil_wrb_mem(MPC_PWPR_ADDR, 0x40); 162 162 163 163 switch(pin){ … … 166 166 if(gpio){ 167 167 /* P21端子機能制御レジスタ P21とする */ 168 sil_wrb_mem( (uint8_t *)MPC_P21PFS_ADDR, 0x00);168 sil_wrb_mem(MPC_P21PFS_ADDR, 0x00); 169 169 } 170 170 else{ 171 171 /* P21端子機能制御レジスタ TIOCA3とする */ 172 sil_wrb_mem( (uint8_t *)MPC_P21PFS_ADDR, 0x03);172 sil_wrb_mem(MPC_P21PFS_ADDR, 0x03); 173 173 } 174 174 result = E_OK; … … 178 178 if(gpio){ 179 179 /* P20端子機能制御レジスタ P20とする */ 180 sil_wrb_mem( (uint8_t *)MPC_P20PFS_ADDR, 0x00);180 sil_wrb_mem(MPC_P20PFS_ADDR, 0x00); 181 181 } 182 182 else{ 183 183 /* P20端子機能制御レジスタ TIOCB3とする */ 184 sil_wrb_mem( (uint8_t *)MPC_P20PFS_ADDR, 0x03);184 sil_wrb_mem(MPC_P20PFS_ADDR, 0x03); 185 185 } 186 186 result = E_OK; … … 190 190 if(gpio){ 191 191 /* P22端子機能制御レジスタ P22とする */ 192 sil_wrb_mem( (uint8_t *)MPC_P22PFS_ADDR, 0x00);192 sil_wrb_mem(MPC_P22PFS_ADDR, 0x00); 193 193 } 194 194 else{ 195 195 /* P22端子機能制御レジスタ TIOCC3とする */ 196 sil_wrb_mem( (uint8_t *)MPC_P22PFS_ADDR, 0x03);196 sil_wrb_mem(MPC_P22PFS_ADDR, 0x03); 197 197 } 198 198 result = E_OK; … … 202 202 if(gpio){ 203 203 /* P23端子機能制御レジスタ P23とする */ 204 sil_wrb_mem( (uint8_t *)MPC_P23PFS_ADDR, 0x00);204 sil_wrb_mem(MPC_P23PFS_ADDR, 0x00); 205 205 } 206 206 else{ 207 207 /* P23端子機能制御レジスタ TIOCD3とする */ 208 sil_wrb_mem( (uint8_t *)MPC_P23PFS_ADDR, 0x03);208 sil_wrb_mem(MPC_P23PFS_ADDR, 0x03); 209 209 } 210 210 result = E_OK; … … 214 214 if(gpio){ 215 215 /* P24端子機能制御レジスタ P24とする */ 216 sil_wrb_mem( (uint8_t *)MPC_P24PFS_ADDR, 0x00);216 sil_wrb_mem(MPC_P24PFS_ADDR, 0x00); 217 217 } 218 218 else{ 219 219 /* P24端子機能制御レジスタ TIOCB4とする */ 220 sil_wrb_mem( (uint8_t *)MPC_P24PFS_ADDR, 0x03);220 sil_wrb_mem(MPC_P24PFS_ADDR, 0x03); 221 221 } 222 222 result = E_OK; … … 226 226 if(gpio){ 227 227 /* P25端子機能制御レジスタ P25とする */ 228 sil_wrb_mem( (uint8_t *)MPC_P25PFS_ADDR, 0x00);228 sil_wrb_mem(MPC_P25PFS_ADDR, 0x00); 229 229 } 230 230 else{ 231 231 /* P25端子機能制御レジスタ TIOCA4とする */ 232 sil_wrb_mem( (uint8_t *)MPC_P25PFS_ADDR, 0x03);232 sil_wrb_mem(MPC_P25PFS_ADDR, 0x03); 233 233 } 234 234 result = E_OK; … … 238 238 if(gpio){ 239 239 /* P32端子機能制御レジスタ P32とする */ 240 sil_wrb_mem( (uint8_t *)MPC_P32PFS_ADDR, 0x00);240 sil_wrb_mem(MPC_P32PFS_ADDR, 0x00); 241 241 } 242 242 else{ 243 243 /* P32端子機能制御レジスタ TIOCC0とする */ 244 sil_wrb_mem( (uint8_t *)MPC_P32PFS_ADDR, 0x03);244 sil_wrb_mem(MPC_P32PFS_ADDR, 0x03); 245 245 } 246 246 result = E_OK; … … 250 250 if(gpio){ 251 251 /* P33端子機能制御レジスタ P33とする */ 252 sil_wrb_mem( (uint8_t *)MPC_P33PFS_ADDR, 0x00);252 sil_wrb_mem(MPC_P33PFS_ADDR, 0x00); 253 253 } 254 254 else{ 255 255 /* P33端子機能制御レジスタ TIOCD0とする */ 256 sil_wrb_mem( (uint8_t *)MPC_P33PFS_ADDR, 0x03);256 sil_wrb_mem(MPC_P33PFS_ADDR, 0x03); 257 257 } 258 258 result = E_OK; … … 261 261 262 262 /* 書き込みプロテクトレジスタの設定 書き込みを禁止 */ 263 sil_wrb_mem( (uint8_t *)MPC_PWPR_ADDR, 0x80);263 sil_wrb_mem(MPC_PWPR_ADDR, 0x80); 264 264 265 265 /* 機能ポートに設定 */ … … 314 314 } 315 315 316 static ER change_pin_mode(arduino_pin_mode_t mode, volatile uint8_t *pdr, int bit)317 { 318 volatile uint8_t *pcr = pdr + (PORT0_PCR_ADDR - PORT0_PDR_ADDR);316 static ER change_pin_mode(arduino_pin_mode_t mode, volatile __evenaccess uint8_t *pdr, int bit) 317 { 318 volatile __evenaccess uint8_t *pcr = pdr + (PORT0_PCR_ADDR - PORT0_PDR_ADDR); 319 319 320 320 switch(mode){ … … 388 388 } 389 389 390 static ER write_gpio(arduino_digital_value_t value, volatile uint8_t *podr, int bit)390 static ER write_gpio(arduino_digital_value_t value, volatile __evenaccess uint8_t *podr, int bit) 391 391 { 392 392 switch(value){ … … 452 452 } 453 453 454 static ER read_gpio(volatile uint8_t *pidr, int bit, arduino_digital_value_t *result)454 static ER read_gpio(volatile __evenaccess uint8_t *pidr, int bit, arduino_digital_value_t *result) 455 455 { 456 456 if ((sil_reb_mem(pidr) & bit) != 0) { … … 523 523 switch(pin){ 524 524 case 14: 525 /* *value = sil_reh_mem( (uint16_t *)S12AD_ADDR0_ADDR); */525 /* *value = sil_reh_mem(S12AD_ADDR0_ADDR); */ 526 526 *value = 1023 - (arduino_ad_avelage[0] / (arduino_ad_table_count * 4/*12bit→10bit*/)); 527 527 return E_OK; 528 528 case 15: 529 /* *value = sil_reh_mem( (uint16_t *)S12AD_ADDR1_ADDR); */529 /* *value = sil_reh_mem(S12AD_ADDR1_ADDR); */ 530 530 *value = 1023 - (arduino_ad_avelage[1] / (arduino_ad_table_count * 4/*12bit→10bit*/)); 531 531 return E_OK; 532 532 case 16: 533 /* *value = sil_reh_mem( (uint16_t *)S12AD_ADDR2_ADDR); */533 /* *value = sil_reh_mem(S12AD_ADDR2_ADDR); */ 534 534 *value = 1023 - (arduino_ad_avelage[2] / (arduino_ad_table_count * 4/*12bit→10bit*/)); 535 535 return E_OK; 536 536 case 17: 537 /* *value = sil_reh_mem( (uint16_t *)S12AD_ADDR3_ADDR); */537 /* *value = sil_reh_mem(S12AD_ADDR3_ADDR); */ 538 538 *value = 1023 - (arduino_ad_avelage[3] / (arduino_ad_table_count * 4/*12bit→10bit*/)); 539 539 return E_OK; 540 540 case 18: 541 /* *value = sil_reh_mem( (uint16_t *)S12AD_ADDR4_ADDR); */541 /* *value = sil_reh_mem(S12AD_ADDR4_ADDR); */ 542 542 *value = 1023 - (arduino_ad_avelage[4] / (arduino_ad_table_count * 4/*12bit→10bit*/)); 543 543 return E_OK; 544 544 case 19: 545 /* *value = sil_reh_mem( (uint16_t *)S12AD_ADDR5_ADDR); */545 /* *value = sil_reh_mem(S12AD_ADDR5_ADDR); */ 546 546 *value = 1023 - (arduino_ad_avelage[5] / (arduino_ad_table_count * 4/*12bit→10bit*/)); 547 547 return E_OK; 548 548 case 20: 549 /* *value = sil_reh_mem( (uint16_t *)S12AD_ADDR6_ADDR); */549 /* *value = sil_reh_mem(S12AD_ADDR6_ADDR); */ 550 550 *value = 1023 - (arduino_ad_avelage[6] / (arduino_ad_table_count * 4/*12bit→10bit*/)); 551 551 return E_OK; 552 552 case 21: 553 /* *value = sil_reh_mem( (uint16_t *)S12AD_ADDR7_ADDR); */553 /* *value = sil_reh_mem(S12AD_ADDR7_ADDR); */ 554 554 *value = 1023 - (arduino_ad_avelage[7] / (arduino_ad_table_count * 4/*12bit→10bit*/)); 555 555 return E_OK; … … 605 605 void arduino_tick() 606 606 { 607 static volatile uint16_t *const regs[8] = {607 static volatile __evenaccess uint16_t *const regs[8] = { 608 608 S12AD_ADDR0_ADDR, 609 609 S12AD_ADDR1_ADDR, … … 619 619 620 620 /* ADCの変換結果取得 */ 621 if((sil_reb_mem( (uint8_t *)S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0){621 if((sil_reb_mem(S12AD_ADCSR_ADDR) & S12AD_ADCSR_ADST_BIT) == 0){ 622 622 for (i = 0; i < 8; i++){ 623 623 arduino_ad_avelage[i] -= arduino_ad_table[i][arduino_ad_pos]; … … 633 633 634 634 /* 変換開始(シングルスキャンモード) */ 635 sil_wrb_mem( (uint8_t *)S12AD_ADCSR_ADDR, S12AD_ADCSR_ADST_BIT);636 } 637 } 635 sil_wrb_mem(S12AD_ADCSR_ADDR, S12AD_ADCSR_ADST_BIT); 636 } 637 }
Note:
See TracChangeset
for help on using the changeset viewer.