
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
PDL 2.1.0のadc.cにある間違えたレジスタアクセスSCIS01およびSCIS23 – KBA229088 - Community Translated (JA)
Community Translated by keni_4440091 Version: **
Translation - English: Wrong Register Access SCIS01 and SCIS23 in adc.c in PDL 2.1.0 - KBA229088
質問:
SCIS01およびSCIS23レジスタは16ビット幅を持っているにも関わらず、adc.cの8ビットでアクセスされるのは何故ですか?
回答:
PDL 2.1.0に含まれるADCデバイスドライバーでは、スキャン変換入力選択レジスタSCIS01およびSCIS23へのアクセスはadc.cファイルに実装されています。
// スキャン変換入力選択レジスタの設定
pstcAdc->SCIS01 = (uint8_t)(0x0000FFFFul & pstcConfig->pstcScanInit->u32ScanCannelSelect.u32AD_CHn);
pstcAdc->SCIS23 = (uint8_t)((0xFFFF0000ul & pstcConfig->pstcScanInit->u32ScanCannelSelect.u32AD_CHn) >> 16u);
上記コードの抜粋は正しくありません。
FM0+ファミリペリフェラルマニュアルアナログマクロパートによると、これらのレジスタは16ビット幅を持っています。SCIS01およびSCIS23レジスタが、上記コードの抜粋で記述されているように8ビットキャスト“(uint8_t)”でアクセスされる場合、最上位8ビット(MSBs)は無視されます。
これは、SCIS01レジスタのチャネル8から15まで、およびSCIS23レジスタのチャネル24から31までが上記実装で選択されないことを意味しています。
従って、下記はPDL 2.1.0でadc.cの正しいコードになります:
// スキャン変換入力選択レジスタ設定
pstcAdc->SCIS01 = (uint16_t)(0x0000FFFFul & pstcConfig->pstcScanInit->u32ScanCannelSelect.u32AD_CHn);
pstcAdc->SCIS23 = (uint16_t)((0xFFFF0000ul & pstcConfig->pstcScanInit->u32ScanCannelSelect.u32AD_CHn) >> 16u);