- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi
I want to translate KBA229088, please confirm to my work.
Regards,
Nino
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, Nino-san
Confirm to work this KBA.
Thanks,
Jenna
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
PDL 2.1.0のadc.cにある間違えたレジスタアクセスSCIS01およびSCIS23 – KBA229088
バージョン 1
ChaitanyaV_61が 2019/12/02 22:44 に作成。ChaitanyaV_61が 2019/12/02 22:44 に変更。
Author: TakashiM_61 Version: **
質問: 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);