- Timestamp:
- Jun 2, 2015, 3:39:53 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ssp_qb_r5f100le_cs/trunk/target/qb_r5f100le_cs/target_serial.c
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 10 10 * Nagoya Municipal Industrial Research Institute, JAPAN 11 11 * 12 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 13 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 14 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 15 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 16 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 17 * XR[hÉÜÜêÄ¢é±ÆD 18 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 19 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 20 gip 21 * Ò}j 22 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 23 * ̳ÛØKèðfÚ·é±ÆD 24 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 25 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 26 * ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌ 30 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 32 * ñ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 34 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 35 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 36 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 37 * ÆÓ·é±ÆD 12 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 14 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 17 * スコード中に含まれていること. 18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 19 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 20 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 21 * の無保証規定を掲載すること. 22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 23 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 24 * と. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 26 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 28 * 報告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 30 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 31 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 32 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 33 * 免責すること. 38 34 * 39 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨40 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI41 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF42 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»43 * ÌÓCðíÈ¢D35 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 36 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 37 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 38 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 39 * の責任を負わない. 44 40 * 45 41 */ 46 42 47 43 /* 48 * VAhCoiQB-R5F100LEpj44 * シリアルドライバ(QB-R5F100LE用) 49 45 */ 50 46 #pragma sfr … … 56 52 57 53 /* 58 * VAI/O|[gÇubNGA54 * シリアルI/Oポート管理ブロックエリア 59 55 */ 60 56 static SIOPCB siopcb_table[TNUM_SIOP]; … … 62 58 63 59 /* 64 * WX^Ýèl60 * レジスタ設定値 65 61 */ 66 62 #define PORT2SIOPID(x) ((x) + 1) … … 71 67 72 68 /* 73 * áxVAú»69 * 低レベルシリアル初期化 74 70 */ 75 71 void target_sau_init(ID siopid) 76 72 { 77 /* ú»ÏÝÌêÍ·®É^[*/73 /* 初期化済みの場合はすぐにリターン */ 78 74 if(PER0 & TBIT_PER0_SAU0EN) { 79 75 return; 80 76 } 81 77 82 /* NbNÂ*/78 /* クロック供給許可 */ 83 79 PER0 |= TBIT_PER0_SAU0EN; 84 80 85 // µÒÂ81 // 少し待つ 86 82 NOP(); 87 83 NOP(); 88 84 NOP(); 89 85 90 // CKm0 ðIðDügÍfclk/8 (=2.5MHz)86 // CKm0 を選択.周波数は fclk/8 (=2.5MHz) 91 87 SPS0 = UINT16_C(0x0033); 92 88 93 // jbg0C`l{0,1} Ì®ìâ~89 // ユニット0,チャネル{0,1} の動作停止 94 90 ST0 |= UINT16_C(0x0003); 95 91 96 // [hÝè97 // ®ìNbNFSPS0WX^ÅÝèµ½®ìNbN̤¿CCK00 Ìûðg¤98 // ]NbNFCKS00, CKS01 rbgÅwèµ½®ìNbN(ÂÜèCK00)̪üNbN99 // X^[ggKvöFM-->\tgEFAgKÌÝ, óM-->RxD0[q100 // §ºèðX^[grbgƵÄo101 // UART [hCèÝÍ]®¹Ý92 // モード設定 93 // 動作クロック:SPS0レジスタで設定した動作クロックのうち,CK00 の方を使う 94 // 転送クロック:CKS00, CKS01 ビットで指定した動作クロック(つまりCK00)の分周クロック 95 // スタートトリガ要因:送信-->ソフトウェアトリガのみ, 受信-->RxD0端子 96 // 立下りをスタートビットとして検出 97 // UARTモード,割り込みは転送完了割込み 102 98 SMR00 = UINT16_C(0x0022); 103 99 SMR01 = UINT16_C(0x0122); 104 100 105 // `l0: MÌÝÂC`l1: óMÌÝÂ106 // G[ÝINTSREx̶ðÖ~107 // peBȵCLSBt@[XgC1XgbvrbgC8rbgf[^·101 // チャネル0: 送信のみ許可,チャネル1: 受信のみ許可 102 // エラー割込みINTSRExの発生を禁止 103 // パリティなし,LSBファースト,1ストップビット,8ビットデータ長 108 104 SCR00 = UINT16_C(0x8097); 109 105 SCR01 = UINT16_C(0x4097); 110 106 111 // [ rbg15:9] = 0x40 --> 64112 // VAÖÌNbNÍ2.5MHz(=20/8)113 // ªüäÍ(64+1)*2 = 130107 // [ビット15:9] = 0x40 --> 64 108 // シリアルへの供給クロックは 2.5MHz(=20/8) 109 // 分周比は (64+1)*2 = 130 114 110 // 2.5[MHz]/130 = 19.23[kHz] 115 111 SDR00 = UINT16_C(0x8000); 116 112 SDR01 = UINT16_C(0x8000); 117 113 118 // óM|[gÌmCYtB^ON114 // 受信ポートのノイズフィルタON 119 115 NFEN0 |= UINT8_C(0x01); 120 116 121 // G[tOÌNA(óM¤Ì`l1ÌÝ)117 // エラーフラグのクリア(受信側のチャネル1のみ) 122 118 SIR01 |= UINT16_C(0x0007); 123 119 124 // VAf[^oÍlð`l0ÌÝ1Æ·éD120 // シリアルデータ出力値をチャネル0のみ1とする. 125 121 SO0 |= UINT16_C(0x0001); 126 122 127 // ÊMf[^ͽ]¹¸»ÌÜÜoÍ123 // 通信データは反転せずそのまま出力 128 124 SOL0 = UINT16_C(0x0000); 129 125 130 126 /* 131 * VA`l0Jn127 * シリアルチャネル0開始 132 128 */ 133 // VAoÍÂ129 // シリアル出力許可 134 130 SOE0 |= UINT16_C(0x0001); 135 131 136 // `l{0,1}ÌJn132 // チャネル{0,1}の開始 137 133 SS0 |= UINT16_C(0x0003); 138 134 } 139 135 140 136 /* 141 * SIO ú»137 * SIO初期化 142 138 */ 143 139 void sio_initialize(intptr_t exinf) … … 146 142 147 143 /* 148 * VAI[v144 * シリアルオープン 149 145 */ 150 146 SIOPCB *sio_opn_por(ID siopid, intptr_t exinf) … … 162 158 p_siopcb->exinf = exinf; 163 159 164 // ÝÌ}XN160 // 割込みのマスク 165 161 dis_int(INTNO_INTST0); 166 162 dis_int(INTNO_INTSR0); 167 // ÝvNA163 // 割込み要求クリア 168 164 x_clear_int(INTNO_INTST0); 169 165 x_clear_int(INTNO_INTSR0); 170 166 171 // n[hEFAÌú»167 // ハードウェアの初期化 172 168 target_sau_init(siopid); 173 169 … … 176 172 177 173 /* 178 * VAN[Y174 * シリアルクローズ 179 175 */ 180 176 void sio_cls_por(SIOPCB *p_siopcb) 181 177 { 182 /* óMÖ~*/183 184 // `l{0,1}Ìâ~178 /* 送受信禁止 */ 179 180 // チャネル{0,1}の停止 185 181 ST0 |= UINT16_C(0x0003); 186 182 187 /* VAW 188 [ð³øÉ·é */ 183 /* シリアルモジュールを無効にする */ 189 184 PER0 &= ~TBIT_PER0_SAU0EN; 190 185 } … … 192 187 193 188 /* 194 * 1 ¶M189 * 1文字送信 195 190 */ 196 191 bool_t 197 192 sio_snd_chr(SIOPCB *p_siopcb, char c) 198 193 { 199 // Mobt@ªóÈçÎC1¶M194 // 送信バッファが空ならば,1文字送信 200 195 if((SSR00L & TBIT_SSRmnL_TSF) == UINT16_C(0)) { 201 196 SDR00 = (uint16_t)c; … … 208 203 209 204 /* 210 * 1 ¶óM205 * 1文字受信 211 206 */ 212 207 int_t … … 215 210 int_t c = -1; 216 211 217 // óMobt@Éf[^ª êÎC1¶óM212 // 受信バッファにデータがあれば,1文字受信 218 213 if((SSR01L & TBIT_SSRmnL_BFF) != 0) { 219 214 c = (int_t)SDR01; … … 224 219 225 220 /* 226 * R[obNÌÂ221 * コールバックの許可 227 222 */ 228 223 void … … 246 241 247 242 /* 248 * R[obNÌÖ~243 * コールバックの禁止 249 244 */ 250 245 void … … 269 264 270 265 /* 271 * ÝT[rX[`272 */ 273 274 /* 275 * óMÝ266 * 割込みサービスルーチン 267 */ 268 269 /* 270 * 受信割込み 276 271 */ 277 272 void … … 282 277 if((p_siopcb->enacb & TBIT_ENACB_RCV) != 0) { 283 278 /* 284 * óMÊmR[obN[`ðÄÑo·D279 * 受信通知コールバックルーチンを呼び出す. 285 280 */ 286 281 sio_irdy_rcv(p_siopcb->exinf); … … 289 284 290 285 /* 291 * MÝ286 * 送信割込み 292 287 */ 293 288 void … … 298 293 if((p_siopcb->enacb & TBIT_ENACB_SND) != 0) { 299 294 /* 300 * MÊmR[obN[`ðÄÑo·D295 * 送信通知コールバックルーチンを呼び出す. 301 296 */ 302 297 sio_irdy_snd(p_siopcb->exinf); … … 305 300 306 301 /* 307 * 1 ¶oÍi|[OÅÌoÍj302 * 1文字出力(ポーリングでの出力) 308 303 */ 309 304 void 310 305 sio_pol_snd_chr(char c, ID siopid) 311 306 { 312 /* Mobt@ªóÉÈéÜÅÒÂ(LÀÔàÌð¬§ð¼è) */307 /* 送信バッファが空になるまで待つ(有限時間内の条件成立を仮定) */ 313 308 while((SSR00L & TBIT_SSRmnL_TSF) != 0){} 314 309 315 // 1 ¶M310 // 1文字送信 316 311 SDR00 = (uint16_t)c; 317 312 } -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.