新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Freescale 9S12 系列單片機(jī)應(yīng)用筆記(SCI)3

Freescale 9S12 系列單片機(jī)應(yīng)用筆記(SCI)3

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
這次介紹如何在 uC/OS-II 上實(shí)現(xiàn)串口驅(qū)動(dòng)。


本文引用地址:http://m.butianyuan.cn/article/201611/318825.htm
  1. /*sci_ucos.h*/
  2. #ifndef_SCI_RTOS_H_

  3. #define_SCI_RTOS_H_

    #defineSCI_RX_BUF_SIZE64/*NumberofcharactersinRxringbuffer*/

  4. #defineSCI_TX_BUF_SIZE64/*NumberofcharactersinTxringbuffer*/

    /*

  5. *********************************************************************************************************
  6. *CONSTANTS
  7. *********************************************************************************************************
  8. */

    #ifndefNUL

  9. #defineNUL0x00
  10. #endif

    /*ERRORCODES*/

  11. #defineSCI_NO_ERR0/*Functioncallwassuccessful*/
  12. #defineSCI_BAD_CH1/*Invalidcommunicationsportchannel*/
  13. #defineSCI_RX_EMPTY2/*Rxbufferisempty,nocharacteravailable*/
  14. #defineSCI_TX_FULL3/*Txbufferisfull,couldnotdepositcharacter*/
  15. #defineSCI_TX_EMPTY4/*IftheTxbufferisempty.*/
  16. #defineSCI_RX_TIMEOUT5/*Ifatimeoutoccurredwhilewaitingforacharacter*/
  17. #defineSCI_TX_TIMEOUT6/*Ifatimeoutoccurredwhilewaitingtosendachar.*/

  18. #defineSCI_PARITY_NONE0/*Definesforsettingparity*/
  19. #defineSCI_PARITY_ODD1
  20. #defineSCI_PARITY_EVEN2

  21. /*
  22. *********************************************************************************************************
  23. *DATATYPES
  24. *********************************************************************************************************
  25. */
  26. typedefstruct{
  27. shortRingBufRxCtr;/*NumberofcharactersintheRxringbuffer*/
  28. OS_EVENT*RingBufRxSem;/*PointertoRxsemaphore*/
  29. unsignedchar*RingBufRxInPtr;/*Pointertowherenextcharacterwillbeinserted*/
  30. unsignedchar*RingBufRxOutPtr;/*Pointerfromwherenextcharacterwillbeextracted*/
  31. unsignedcharRingBufRx[SCI_RX_BUF_SIZE];/*Ringbuffercharacterstorage(Rx)*/
  32. shortRingBufTxCtr;/*NumberofcharactersintheTxringbuffer*/
  33. OS_EVENT*RingBufTxSem;/*PointertoTxsemaphore*/
  34. unsignedchar*RingBufTxInPtr;/*Pointertowherenextcharacterwillbeinserted*/
  35. unsignedchar*RingBufTxOutPtr;/*Pointerfromwherenextcharacterwillbeextracted*/
  36. unsignedcharRingBufTx[SCI_TX_BUF_SIZE];/*Ringbuffercharacterstorage(Tx)*/
  37. }SCI_RING_BUF;

  38. /**
  39. *Toobtainacharacterfromthecommunicationschannel.
  40. *@paramport,portcanbeSCI0/SCI1
  41. *@paramto,istheamountoftime(inclockticks)thatthecallingfunctioniswillingto
  42. *waitforacharactertoarrive.Ifyouspecifyatimeoutof0,thefunctionwill
  43. *waitforeverforacharactertoarrive.
  44. *@paramerr,isapointertowhereanerrorcodewillbeplaced:
  45. **errissettoSCI_NO_ERRifacharacterhasbeenreceived
  46. **errissettoSCI_RX_TIMEOUTifatimeoutoccurred
  47. **errissettoSCI_BAD_CHifyouspecifyaninvalidchannelnumber
  48. *@returnThecharacterinthebuffer(orNULifatimeoutoccurred)
  49. */
  50. unsignedcharSCIGetCharB(unsignedcharch,unsignedshortto,unsignedchar*err);

    /**

  51. *Thisfunctioniscalledbyyourapplicationtosendacharacteronthecommunications
  52. *channel.Thefunctionwillwaitforthebuffertoemptyoutifthebufferisfull.
  53. *Thefunctionreturnstoyourapplicationifthebufferdoesntemptywithinthespecified
  54. *timeout.Atimeoutvalueof0meansthatthecallingfunctionwillwaitforeverforthe
  55. *buffertoemptyout.ThecharactertosendisfirstinsertedintotheTxbufferandwill
  56. *besentbytheTxISR.Ifthisisthefirstcharacterplacedintothebuffer,theTxISR
  57. *willbeenabled.
  58. *
  59. *@paramport,portcanbeSCI0/SCI1
  60. *@paramcisthecharactertosend.
  61. *@paramtoisthetimeout(inclockticks)towaitincasethebufferisfull.Ifyou
  62. *specifyatimeoutof0,thefunctionwillwaitforeverforthebuffertoempty.
  63. *@returnSCI_NO_ERRifthecharacterwasplacedintheTxbuffer
  64. *SCI_TX_TIMEOUTifthebufferdidntemptywithinthespecifiedtimeoutperiod
  65. *SCI_BAD_CHifyouspecifyaninvalidchannelnumber
  66. */
  67. unsignedcharSCIPutCharB(unsignedcharport,unsignedcharc,unsignedshortto);

    /**

  68. *Toinitializethecommunicationsmodule.
  69. *Youmustcallthisfunctionbeforecallinganyotherfunctions.
  70. */
  71. voidSCIBufferInit(void);

    /**

  72. *Toseeifanycharacterisavailablefromthecommunicationschannel.
  73. *
  74. *@paramport,portcanbeSCI0/SCI1
  75. *@returnIfatleastonecharacterisavailable,thefunctionreturns
  76. *FALSE(0)otherwise,thefunctionreturnsTRUE(1).
  77. */
  78. unsignedcharSCIBufferIsEmpty(unsignedcharport);

  79. /**
  80. *ToseeifanymorecharacterscanbeplacedintheTxbuffer.
  81. *Inotherwords,thisfunctionchecktoseeiftheTxbufferisfull.
  82. *
  83. *@paramport,portcanbeSCI0/SCI1
  84. *@returnIfthebufferisfull,thefunctionreturnsTRUE
  85. *otherwise,thefunctionreturnsFALSE.
  86. */
  87. unsignedcharSCIBufferIsFull(unsignedcharport);

    #endif


  1. /**

  2. *SCI(SerialCommunicationInterface)BufferedSerialI/O
  3. *@filesci_ucos.c
  4. *@authorLiYuan
  5. *@platformmc9s12XX
  6. *@date2012-7-22
  7. *@version1.0.1
  8. */

  9. #include"derivative.h"/*derivative-specificdefinitions*/
  10. #include
  11. #include"includes.H"
  12. #include"sci.h"
  13. #include"sci_rtos.h"

    /**

  14. *GLOBALVARIABLES
  15. */
  16. SCI_RING_BUFSCI0Buf;
  17. SCI_RING_BUFSCI1Buf;

  18. /**
  19. *Toobtainacharacterfromthecommunicationschannel.
  20. *@paramport,portcanbeSCI0/SCI1
  21. *@paramto,istheamountoftime(inclockticks)thatthecallingfunctioniswillingto
  22. *waitforacharactertoarrive.Ifyouspecifyatimeoutof0,thefunctionwill
  23. *waitforeverforacharactertoarrive.
  24. *@paramerr,isapointertowhereanerrorcodewillbeplaced:
  25. **errissettoSCI_NO_ERRifacharacterhasbeenreceived
  26. **errissettoSCI_RX_TIMEOUTifatimeoutoccurred
  27. **errissettoSCI_BAD_CHifyouspecifyaninvalidchannelnumber
  28. *@returnThecharacterinthebuffer(orNULifatimeoutoccurred)
  29. */
  30. unsignedcharSCIGetCharB(unsignedcharport,unsignedshortto,INT8U*err)
  31. {
  32. #ifOS_CRITICAL_METHOD==3u/*AllocatestorageforCPUstatusregister*/
  33. OS_CPU_SRcpu_sr=0u;
  34. #endif
  35. unsignedcharc;
  36. unsignedcharoserr;
  37. SCI_RING_BUF*pbuf;

    switch(port)

  38. {/*Obtainpointertocommunicationschannel*/
  39. caseSCI0:
  40. pbuf=&SCI0Buf;
  41. break;

    caseSCI1:

  42. pbuf=&SCI1Buf;
  43. break;

    default:

  44. *err=SCI_BAD_CH;
  45. return(0);
  46. }
  47. OSSemPend(pbuf->RingBufRxSem,to,&oserr);/*Waitforcharactertoarrive*/
  48. if(oserr==OS_TIMEOUT)
  49. {/*Seeifcharactersreceivedwithintimeout*/
  50. *err=SCI_RX_TIMEOUT;/*No,returnerrorcode*/
  51. return(NUL);
  52. }
  53. else
  54. {
  55. OS_ENTER_CRITICAL();
  56. pbuf->RingBufRxCtr--;/*Yes,decrementcharactercount*/
  57. c=*pbuf->RingBufRxOutPtr++;/*Getcharacterfrombuffer*/
  58. if(pbuf->RingBufRxOutPtr==&pbuf->RingBufRx[SCI_RX_BUF_SIZE]){/*WrapOUTpointer*/
  59. pbuf->RingBufRxOutPtr=&pbuf->RingBufRx[0];
  60. }
  61. OS_EXIT_CRITICAL();
  62. *err=SCI_NO_ERR;
  63. return(c);
  64. }
  65. }

    /**

  66. *Thisfunctioniscalledbyyourapplicationtosendacharacteronthecommunications
  67. *channel.Thefunctionwillwaitforthebuffertoemptyoutifthebufferisfull.
  68. *Thefunctionreturnstoyourapplicationifthebufferdoesntemptywithinthespecified
  69. *timeout.Atimeoutvalueof0meansthatthecallingfunctionwillwaitforeverforthe
  70. *buffertoemptyout.ThecharactertosendisfirstinsertedintotheTxbufferandwill
  71. *besentbytheTxISR.Ifthisisthefirstcharacterplacedintothebuffer,theTxISR
  72. *willbeenabled.
  73. *
  74. *@paramport,portcanbeSCI0/SCI1
  75. *@paramcisthecharactertosend.
  76. *@paramtoisthetimeout(inclockticks)towaitincasethebufferisfull.Ifyou
  77. *specifyatimeoutof0,thefunctionwillwaitforeverforthebuffertoempty.
  78. *@returnSCI_NO_ERRifthecharacterwasplacedintheTxbuffer
  79. *SCI_TX_TIMEOUTifthebufferdidntemptywithinthespecifiedtimeoutperiod
  80. *SCI_BAD_CHifyouspecifyaninvalidchannelnumber
  81. */
  82. unsignedcharSCIPutCharB(unsignedcharport,unsignedcharc,unsignedshortto)
  83. {
  84. #ifOS_CRITICAL_METHOD==3u/*AllocatestorageforCPUstatusregister*/
  85. OS_CPU_SRcpu_sr=0u;
  86. #endif

    SCI_RING_BUF*pbuf;

  87. unsignedcharoserr;
  88. switch(port)
  89. {/*Obtainpointertocommunicationschannel*/
  90. caseSCI0:
  91. pbuf=&SCI0Buf;
  92. break;

    caseSCI1:

  93. pbuf=&SCI1Buf;
  94. break;

    default:

  95. return(SCI_BAD_CH);
  96. }

    OSSemPend(pbuf->RingBufTxSem,to,&oserr);/*WaitforspaceinTxbuffer*/

  97. if(oserr==OS_TIMEOUT)
  98. {
  99. return(SCI_TX_TIMEOUT);/*Timedout,returnerrorcode*/
  100. }
  101. OS_ENTER_CRITICAL();
  102. pbuf->RingBufTxCtr++;/*No,incrementcharactercount*/
  103. *pbuf->RingBufTxInPtr++=c;/*Putcharacterintobuffer*/
  104. if(pbuf->RingBufTxInPtr==&pbuf->RingBufTx[SCI_TX_BUF_SIZE])
  105. {
  106. pbuf->RingBufTxInPtr=&pbuf->RingBufTx[0];/*WrapINpointer*/
  107. }
  108. if(pbuf->RingBufTxCtr==1)/*Seeifthisisthefirstcharacter*/
  109. {
  110. SCIEnableTxInt(port);/*Yes,EnableTxinterrupts*/
  111. }
  112. OS_EXIT_CRITICAL();
  113. return(SCI_NO_ERR);
  114. }

    /**

  115. *Toinitializethecommunicationsmodule.
  116. *Youmustcallthisfunctionbeforecallinganyotherfunctions.
  117. */
  118. voidSCIBufferInit(void)
  119. {
  120. SCI_RING_BUF*pbuf;

    pbuf=&SCI0Buf;/*InitializetheringbufferforSCI0*/

  121. pbuf->RingBufRxCtr=0;
  122. pbuf->RingBufRxInPtr=&pbuf->RingBufRx[0];
  123. pbuf->RingBufRxOutPtr=&pbuf->RingBufRx[0];
  124. pbuf->RingBufRxSem=OSSemCreate(0);
  125. pbuf->RingBufTxCtr=0;
  126. pbuf->RingBufTxInPtr=&pbuf->RingBufTx[0];
  127. pbuf->RingBufTxOutPtr=&pbuf->RingBufTx[0];
  128. pbuf->RingBufTxSem=OSSemCreate(SCI_TX_BUF_SIZE);

    pbuf=&SCI1Buf;/*InitializetheringbufferforSCI1*/

  129. pbuf->RingBufRxCtr=0;
  130. pbuf->RingBufRxInPtr=&pbuf->RingBufRx[0];
  131. pbuf->RingBufRxOutPtr=&pbuf->RingBufRx[0];
  132. pbuf->RingBufRxSem=OSSemCreate(0);
  133. pbuf->RingBufTxCtr=0;
  134. pbuf->RingBufTxInPtr=&pbuf->RingBufTx[0];
  135. pbuf->RingBufTxOutPtr=&pbuf->RingBufTx[0];
  136. pbuf->RingBufTxSem=OSSemCreate(SCI_TX_BUF_SIZE);
  137. }

    /**

  138. *Toseeifanycharacterisavailablefromthecommunicationschannel.
  139. *
  140. *@paramport,portcanbeSCI0/SCI1
  141. *@returnIfatleastonecharacterisavailable,thefunctionreturns
  142. *FALSE(0)otherwise,thefunctionreturnsTRUE(1).
  143. */
  144. unsignedcharSCIBufferIsEmpty(unsignedcharport)
  145. {

    #ifOS_CRITICAL_METHOD==3u/*AllocatestorageforCPUstatusregister*/

  146. OS_CPU_SRcpu_sr=0u;
  147. #endif
  148. unsignedcharempty;
  149. SCI_RING_BUF*pbuf;
  150. switch(port)
  151. {/*Obtainpointertocommunicationschannel*/
  152. caseSCI0:
  153. pbuf=&SCI0Buf;
  154. break;

    caseSCI1:

  155. pbuf=&SCI1Buf;
  156. break;
  157. default:
  158. return(0xff);
  159. break;
  160. }
  161. OS_ENTER_CRITICAL();
  162. if(pbuf->RingBufRxCtr>0)
  163. {/*Seeifbufferisempty*/
  164. empty=0;/*BufferisNOTempty*/
  165. }
  166. else
  167. {
  168. empty=1;/*Bufferisempty*/
  169. }
  170. OS_EXIT_CRITICAL();
  171. return(empty);

    }

    /**

  172. *ToseeifanymorecharacterscanbeplacedintheTxbuffer.
  173. *Inotherwords,thisfunctionchecktoseeiftheTxbufferisfull.
  174. *
  175. *@paramport,portcanbeSCI0/SCI1
  176. *@returnIfthebufferisfull,thefunctionreturnsTRUE
  177. *otherwise,thefunctionreturnsFALSE.
  178. */
  179. unsignedcharSCIBufferIsFull(unsignedcharport)
  180. {
  181. #ifOS_CRITICAL_METHOD==3u/*AllocatestorageforCPUstatusregister*/
  182. OS_CPU_SRcpu_sr=0u;
  183. #endif
  184. charfull;
  185. SCI_RING_BUF*pbuf;
  186. switch(port)
  187. {/*Obtainpointertocommunicationschannel*/
  188. caseSCI0:
  189. pbuf=&SCI0Buf;
  190. break;

    caseSCI1:

  191. pbuf=&SCI1Buf;
  192. break;

    default:

  193. return(255);
  194. }
  195. OS_ENTER_CRITICAL();
  196. if(pbuf->RingBufTxCtr
  197. full=0;/*BufferisNOTfull*/
  198. }else{
  199. full=1;/*Bufferisfull*/
  200. }
  201. OS_EXIT_CRITICAL();
  202. return(full);
  203. }

  204. //ThisfunctioniscalledbytheRxISRtoinsertacharacterintothereceiveringbuffer.
  205. staticvoidSCIPutRxChar(unsignedcharport,unsignedcharc)
  206. {

    SCI_RING_BUF*pbuf;

    switch(port)

  207. {/*Obtainpointertocommunicationschannel*/
  208. caseSCI0:
  209. pbuf=&SCI0Buf;
  210. break;

    caseSCI1:

  211. pbuf=&SCI1Buf;
  212. break;

    default:

  213. return;
  214. }
  215. if(pbuf->RingBufRxCtr
  216. pbuf->RingBufRxCtr++;/*No,incrementcharactercount*/
  217. *pbuf->RingBufRxInPtr++=c;/*Putcharacterintobuffer*/
  218. if(pbuf->RingBufRxInPtr==&pbuf->RingBufRx[SCI_RX_BUF_SIZE]){/*WrapINpointer*/
  219. pbuf->RingBufRxInPtr=&pbuf->RingBufRx[0];
  220. }
  221. (void)OSSemPost(pbuf->RingBufRxSem);/*Indicatethatcharacterwasreceived*/
  222. }
  223. }

  224. //ThisfunctioniscalledbytheTxISRtoextractthenextcharacterfromtheTxbuffer.
  225. //ThefunctionreturnsFALSEifthebufferisemptyafterthecharacterisextractedfrom
  226. //thebuffer.ThisisdonetosignaltheTxISRtodisableinterruptsbecausethisisthe
  227. //lastcharactertosend.
  228. staticunsignedcharSCIGetTxChar(unsignedcharport,unsignedchar*err)
  229. {
  230. unsignedcharc;
  231. SCI_RING_BUF*pbuf;

    switch(port)

  232. {/*Obtainpointertocommunicationschannel*/
  233. caseSCI0:
  234. pbuf=&SCI0Buf;
  235. break;

    caseSCI1:

  236. pbuf=&SCI1Buf;
  237. break;

    default:

  238. *err=SCI_BAD_CH;
  239. return(0);
  240. }
  241. if(pbuf->RingBufTxCtr>0){/*Seeifbufferisempty*/
  242. pbuf->RingBufTxCtr--;/*No,decrementcharactercount*/
  243. c=*pbuf->RingBufTxOutPtr++;/*Getcharacterfrombuffer*/
  244. if(pbuf->RingBufTxOutPtr==&pbuf->RingBufTx[SCI_TX_BUF_SIZE]){/*WrapOUTpointer*/
  245. pbuf->RingBufTxOutPtr=&pbuf->RingBufTx[0];
  246. }
  247. (void)OSSemPost(pbuf->RingBufTxSem);/*Indicatethatcharacterwillbesent*/
  248. *err=SCI_NO_ERR;
  249. return(c);/*Charactersarestillavailable*/
  250. }else{
  251. *err=SCI_TX_EMPTY;
  252. return(NUL);/*Bufferisempty*/
  253. }
  254. }

  255. voidSCI0_ISR_Handler(void)
  256. {
  257. charstatus;
  258. chardata;
  259. unsignedcharerr;
  260. status=SCI0SR1;

    if(status&0x0F)//0x1F=00011111,ifstatusisnotReceiveDataRegFullFlag

  261. {
  262. //Seeifwehavesomekindoferror
  263. //Clearinterrupt(donothingaboutit!)
  264. data=SCI0DRL;
  265. }
  266. elseif(status&0x20)//ReceiveDataRegFullFlag
  267. {
  268. data=SCI0DRL;
  269. SCIPutRxChar(SCI0,data);//Insertreceivedcharacterintobuffer
  270. }
  271. elseif(status&0x80)
  272. {
  273. data=SCIGetTxChar(SCI0,&err);//Getnextcharactertosend.
  274. if(err==SCI_TX_EMPTY)
  275. {//Dowehaveanymorecharacterstosend?
  276. //No,DisableTxinterrupts
  277. SCIDisTxInt(SCI0);
  278. }
  279. else
  280. {
  281. SCI0DRL=data;//Yes,Sendcharacter
  282. }
  283. }
  284. }

  285. voidSCI1_ISR_Handler(void)
  286. {
  287. charstatus;
  288. chardata;
  289. unsignedcharerr;
  290. status=SCI1SR1;

    if(status&0x0F)//0x1F=00011111,ifstatusisnotReceiveDataRegFullFlag

  291. {
  292. //Seeifwehavesomekindoferror
  293. //Clearinterrupt(donothingaboutit!)
  294. data=SCI1DRL;
  295. }
  296. elseif(status&0x20)//ReceiveDataRegFullFlag
  297. {
  298. data=SCI1DRL;
  299. SCIPutRxChar(SCI1,data);//Insertreceivedcharacterintobuffer
  300. }
  301. elseif(status&0x80)
  302. {
  303. data=SCIGetTxChar(SCI1,&err);//Getnextcharactertosend.
  304. if(err==SCI_TX_EMPTY)
  305. {//Dowehaveanymorecharacterstosend?
  306. //No,DisableTxinterrupts
  307. SCIDisTxInt(SCI1);
  308. }
  309. else
  310. {
  311. SCI1DRL=data;//Yes,Sendcharacter
  312. }
  313. }
  314. }

    #pragmaCODE_SEGNON_BANKED

  315. interruptVectorNumber_Vsci0voidSCI0_ISR(void)
  316. {

    #ifdefined(__BANKED__)||defined(__LARGE__)||defined(__PPAGE__)

  317. __asmldaaPPAGE;//3~,GetcurrentvalueofPPAGEregister
  318. __asmpsha;//2~,PushPPAGEregisterontocurrenttasksstack
  319. #endif
  320. __asmincOSIntNesting;//OSIntNesting++;

    //if(OSIntNesting==1)

  321. //{
  322. //OSTCBCur->OSTCBStkPtr=StackPointer;
  323. //}
  324. __asm
  325. {
  326. ldabOSIntNesting
  327. cmpb#$01
  328. bneSCI0ISR1

    ldxOSTCBCur

  329. sts0,x
  330. SCI0ISR1:
  331. }

    #ifdefined(__BANKED__)||defined(__LARGE__)||defined(__PPAGE__)

  332. __asmcallSCI0_ISR_Handler;
  333. __asmcallOSIntExit;
  334. #else
  335. __asmjsrSCI0_ISR_Handler;
  336. __asmjsrOSIntExit;
  337. #endif

    #ifdefined(__BANKED__)||defined(__LARGE__)||defined(__PPAGE__)

  338. __asmpula;//3~,GetvalueofPPAGEregister
  339. __asmstaaPPAGE;//3~,StoreintoCPUsPPAGEregister
  340. #endif

    }

    interruptVectorNumber_Vsci1voidSCI1_ISR(void)

  341. {

    #ifdefined(__BANKED__)||defined(__LARGE__)||defined(__PPAGE__)

  342. __asmldaaPPAGE;//3~,GetcurrentvalueofPPAGEregister
  343. __asmpsha;//2~,PushPPAGEregisterontocurrenttasksstack
  344. #endif
  345. __asmincOSIntNesting;//OSIntNesting++;

    //if(OSIntNesting==1)

  346. //{
  347. //OSTCBCur->OSTCBStkPtr=StackPointer;
  348. //}
  349. __asm
  350. {
  351. ldabOSIntNesting
  352. cmpb#$01
  353. bneSCI1ISR1

    ldxOSTCBCur

  354. sts0,x
  355. SCI1ISR1:
  356. }

    #ifdefined(__BANKED__)||defined(__LARGE__)||defined(__PPAGE__)

  357. __asmcallSCI1_ISR_Handler;
  358. __asmcallOSIntExit;
  359. #else
  360. __asmjsrSCI1_ISR_Handler;
  361. __asmjsrOSIntExit;
  362. #endif

    #ifdefined(__BANKED__)||defined(__LARGE__)||defined(__PPAGE__)

  363. __asmpula;//3~,GetvalueofPPAGEregister
  364. __asmstaaPPAGE;//3~,StoreintoCPUsPPAGEregister
  365. #endif

    }

下面給個(gè)簡(jiǎn)單的例子:

  1. #include/*commondefinesandmacros*/

  2. #include"derivative.h"/*derivative-specificdefinitions*/

    #include"INCLUDES.H"

  3. #include"crg.h"
  4. #include"sci.h"
  5. #include"sci_rtos.h"

    OS_STKAppStartTaskStk[64];

    staticvoidAppStartTask(void*pdata);

    voidmain(void)

  6. {
  7. /*putyourowncodehere*/
  8. OS_CPU_SRcpu_sr;

    CRGInit();

  9. CRGSetRTIFreqency(0x54);//200Hz

    EnableInterrupts;

  10. OS_ENTER_CRITICAL();
  11. SCIInit(SCI0);
  12. SCIInit(SCI1);
  13. OS_EXIT_CRITICAL();
  14. OSInit();
  15. SCISetIEBit(SCI0,SCI_RIE);
  16. SCISetIEBit(SCI1,SCI_RIE);
  17. SCIBufferInit();
  18. (void)OSTaskCreate(AppStartTask,(void*)0x4321,(void*)&AppStartTaskStk[63],0);
  19. (void)OSStart();
  20. for(;;)
  21. {
  22. _FEED_COP();/*feedsthedog*/
  23. }/*loopforever*/
  24. /*pleasemakesurethatyouneverleavemain*/
  25. }

    staticvoidAppStartTask(void*pdata)

  26. {
  27. INT8Uerr;
  28. charC;
  29. (void)pdata;
  30. for(;;)
  31. {
  32. C=SCIGetCharB(SCI1,0,&err);
  33. if(err==SCI_NO_ERR)
  34. (void)SCIPutCharB(SCI1,C,0);
  35. }
  36. }




關(guān)鍵詞: Freescale9S12系列單片

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉