PDL 2.1.0のadc.cにある間違えたレジスタアクセスSCIS01およびSCIS23 – KBA229088 - Community Translated (JA)

Version 1

    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.c8ビットでアクセスされるのは何故ですか?

     

    回答:

    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.0adc.cの正しいコードになります:

    // スキャン変換入力選択レジスタ設定

    pstcAdc->SCIS01 = (uint16_t)(0x0000FFFFul & pstcConfig->pstcScanInit->u32ScanCannelSelect.u32AD_CHn);

     

    pstcAdc->SCIS23 = (uint16_t)((0xFFFF0000ul & pstcConfig->pstcScanInit->u32ScanCannelSelect.u32AD_CHn) >> 16u);