上田です。
> while(!AD.CSR.BIT.ADF) ; // 変換終了待ち
!(論理否定演算子)で使用するデータ型はint型なので、
この表記方法で正しく判定してくれるでしょうか?
普通に、
while(AD.CSR.BIT.ADF==0) ; // 変換終了待ち
書いてみてはどうでしょうか?
または、ADST bitは、変換終了すると自動的に0リセットされることを
利用して、
AD.CSR.BIT.ADST = 1; // A/D変換開始
while(AD.CSR.BIT.ADST==1) ; // 変換終了待ち
ADdata = AD.DRA >> 6; // 変換されたデータをADdataに格納
return(ADdata); // 変換した値を持って返る
と書いても同様の結果が得られます。