新手,苦思很久了,就是解决不了关于CodeWarriorV6,.2中关于SCI串口调试的问题

2019-03-26 08:09发布

正在学习在mc9s08dz32的板子上移植操作系统。现在是能跑起来了,身边没有板子,想要利用SCI进行串口的模拟调试,在CODEWARRIORV6.2的版本中好像不再支持HCS08了,于是自己写了SCI的驱动,代码如下: void TERMIO_Init(void)
{
  /* SCI1C1: LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */
  SCI1C1=0x00;               /* Configure the SCI */
  /* SCI1C3: R8=0,T8=0,TXDIR=0,TXINV=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0 */
  SCI1C3=0x00;               /* Disable error interrupts */
  /* SCI1S2: LBKDIF=0,RXEDGIF=0,??=0,RXINV=0,RWUID=0,BRK13=0,LBKDE=0,RAF=0 */
  SCI1S2=0x00;               
  /* SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */
  SCI1C2=0x00;               /* Disable all interrupts */
  SCI1BDH = 0x00;                      /* Set high divisor register (enable device) */
  SCI1BDL = 0x4E;                      /* Set low divisor register (enable device) */
  SCI1C2_TE = 0x01;                     /* Enable transmitter */
  SCI1C2_RE = 0x01;                     /* Enable receiver */
 
} byte TERMIO_GetChar(byte *Chr)
{
  byte Result = ERR_OK;                /* Return error code */
  byte StatReg = SCI1S1;               /* Read status register */   if (StatReg & (SCI1S1_OR_MASK|SCI1S1_NF_MASK|SCI1S1_FE_MASK|SCI1S1_PF_MASK)) { /* Is any error set? */
    Result = ERR_COMMON;               /* If yes then set common error value */
  } else if (!(StatReg & SCI1S1_RDRF_MASK)) { /* Is the reciver empty and no error is set? */
    return ERR_RXEMPTY;                /* If yes then error */
  } else {                             /* Intentionally left empty due to compatibility with MISRA rule 60*/
  }
  *Chr = SCI1D;                        /* Read data from the receiver */
  return Result;                       /* Return error code */
} byte TERMIO_PutChar(byte Chr)
{
  if (!SCI1S1_TDRE) {                  /* Is the transmitter empty? */
    return ERR_TXFULL;                 /* If no then error */
  }
  SCI1D = (byte)Chr;                   /* Store char to the transmitter register */
  return ERR_OK;                       /* OK */
} 可是在程序的调用中,借助SCDO命令显示的数据不是很正确,显示的位置也不是执行完输出语句就显示的,我是个新手,所以很多地方还不是很明白,哪位高手给点指点,这种做法是不是正确,该怎么做没有板子的情况下的程序调试呀,谢谢了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
bluehacker
1楼-- · 2019-03-26 12:48
 精彩回答 2  元偷偷看……
TripleA
2楼-- · 2019-03-26 16:16
这是我曾经做过的一个产品里用485通讯的SCI驱动代码。献丑下,互相学习啊。

/*
*******************************************************************************
*                                                                                                                                                                                       
*   Copyright (c) 2008                                                                                                                                                 
*                                                                                                                                                                                       
*******************************************************************************
*
*   文件名: sci.h
*
*   应  用:
*
*   描  述:
*
*                       
*   编  程: YXF
*
*   日  期: 2008-08-12
*
*   版  本: 1.0.0
*
*******************************************************************************
*
*   编译器: CodeWarrior IDE version 5.9.0.2404
*
*           Metrowerks ANSI-C/C++ Compiler V-5.0.14.7285
*
*   控制器: MC9S08AW16CFGE
*
*******************************************************************************
*
*   记  录:
*                       
*
*
*
*
*
*
*******************************************************************************
*/
#ifndef  _SCI_H_
#define  _SCI_H_

/*
*******************************************************************************
*                                 SCI0定义
*******************************************************************************
*/
#define SCI1_BAUD       9600

#define SCI1_BR         BUSCLK/16/SCI1_BAUD

/*
*******************************************************************************
*                                 SCI1定义
*******************************************************************************
*/
#define SCI2_BAUD       9600

#define SCI2_BR         BUSCLK/16/SCI2_BAUD

#define RS485_RD        PTCD_PTCD4
#define SET             1
#define CLR             0

/*
*******************************************************************************
*                                 函数原型
*******************************************************************************
*/
void InitSC2(void);
void SCI2Transmit(U08 *data, U08 length);




#endif
/*
*******************************************************************************
*                                 END
*******************************************************************************
*/

/*
*******************************************************************************
*                                                                                                                                                                                       
*   Copyright (c) 2008                                                                                                                                                
*                                                                                                                                                                                       
*******************************************************************************
*
*   文件名: sci.c
*
*   应  用:
*
*   描  述:
*
*                       
*   编  程: YXF
*
*   日  期: 2008-12-04
*
*   版  本: 1.0.0
*
*******************************************************************************
*
*   编译器: CodeWarrior IDE version 5.9.0.2404
*
*           Metrowerks ANSI-C/C++ Compiler V-5.0.14.7285
*
*   控制器: MC9S08AW16CFGE
*
*******************************************************************************
*
*   记  录:
*
*
*
*
*
*
*
*******************************************************************************
*/
/*
*******************************************************************************
*                                包含头文件
*******************************************************************************
*/
#include "main.h"
#include "sci.h"

/*
*******************************************************************************
* 函 数 名  :  void InitSC2(void)
* 功    能  :  SCI2初始化
* 描    述  :  N/A
* 入口参数  :  N/A
* 返 回 值  :  N/A
* 设    计  :  YXF         
* 日    期  :  2008-12-04
* 修    改  :
*******************************************************************************
*/
void InitSC2(void)
{
    SCI2BD = SCI2_BR;   // 设置波特率
   
  SCI2C1 = 0x00;      // 开始位+8位数据位+停止位,无奇偶校验
   
  // 允许发送和接收,接收中断使能
  SCI2C2 = (SCI2C2_RIE_MASK | SCI2C2_TE_MASK | SCI2C2_RE_MASK);
}

/*
*******************************************************************************
* 函 数 名  :  void SCI2Transmit(U08 *data, U08 length)
* 功    能  :  SCI2发送函数
* 描    述  :  N/A
* 入口参数  :  U08 *data, 数据地址指针
*                     :  U08 length,数据长度(字节)
* 返 回 值  :  N/A
* 设    计  :  YXF         
* 日    期  :  2008-12-04
* 修    改  :
*******************************************************************************
*/
void SCI2Transmit(U08 *data, U08 length)
{
    VU08 c;
   
    RS485_RD = SET;
   
    for(; length>0; length--)
    {
        while(SCI2S1_TDRE != 1); // 等待发送数据寄存器清空
        c = SCI2S1;
        
        SCI2D = *(data++);
        c = SCI2D;
    }
   
    while(SCI2S1_TC != 1); // 等待发送器空闲
   
    RS485_RD = CLR;
}

/*
*******************************************************************************
* 函 数 名     :  void interrupt SC2RecIsr(void)
* 功    能     :  SCI2接收中断服务函数
* 描    述     :  N/A
* 入口参数     :  N/A
* 返 回 值     :  N/A
* 设    计     :  YXF         
* 日    期     :  2008-12-08
* 修    改     :
*******************************************************************************
*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt SC2RecIsr(void)
{
    VU08 c;
   
    c = SCI2S1;
    c = SCI2D;
   
    DataProcess(c);
}



/*
*******************************************************************************
*                                 END
*******************************************************************************
*/

一周热门 更多>