历史上的今天
返回首页

历史上的今天

今天是:2025年07月26日(星期六)

正在发生

2021年07月26日 | MC9S12XEP100 SCI(UART)驱动程序2 - 基于uCOS-II

2021-07-26 来源:eefocus

首先先发一个自己封装的MC9S12XEP100的SCI模块(也就是UART模块)的驱动。这些代码参考了 Li Yuan http://blog.csdn.net/liyuanbhu/article/details/7764851 的代码,整个代码风格是按照uCOS-II操作系统源码的风格来写的,在此表示感谢。


目前还不是特别完整完善,但基本使用是没有问题了。


在上一章中已经发了硬件驱动部分,这里发下基于uCOS-II嵌入式操作系统的驱动部分以及顺便说下怎么用。


首先要记得到上一章中把两个文件存了,顺便还要把.h文件中的


SCI_UCOS_MODULE_ENABLE 后面改为 TRUE 以开启RTOS(嵌入式操作系统)驱动部分。


目前这个版本已经支持所有8个SCI口了。

首先是按照uCOS-II操作系统的要求写的中断服务程序。


;********************************************************************************************************

;                                               uC/OS-II

;                                         The Real-Time Kernel

;

;                         (c) Copyright 2002, Jean J. Labrosse, Weston, FL

;                                          All Rights Reserved

;

;

;                                       PAGED S12X Specific code

;                                            (CODEWARRIOR)

;

; File         : SCI_uCos.s

; By           : Lin Shijun(http://blog.csdn.net/lin_strong)

;

; Notes        : THIS FILE *MUST* BE LINKED INTO NON_BANKED MEMORY! 这个文件必须放在非分页内存中

;                    modified according to uC/OS-II's example.  依据uC/OS-II的模版修改。

;********************************************************************************************************


NON_BANKED:       section



;********************************************************************************************************

;                                           I/O PORT ADDRESSES   I/O口地址

;********************************************************************************************************


PPAGE:            equ    $0015         ; Addres of PPAGE register (assuming MC9S12XEP100 part)

RPAGE:            equ    $0016         ; Addres of RPAGE register (assuming MC9S12XEP100 part)

EPAGE:            equ    $0017         ; Addres of EPAGE register (assuming MC9S12XEP100 part)

GPAGE:            equ    $0010         ; Addres of GPAGE register (assuming MC9S12XEP100 part)



;********************************************************************************************************

;                                          PUBLIC DECLARATIONS   公开声明

;********************************************************************************************************


    xdef   SCI0_RxTxISR

    xdef   SCI1_RxTxISR

    xdef   SCI2_RxTxISR

    xdef   SCI3_RxTxISR

    xdef   SCI4_RxTxISR

    xdef   SCI5_RxTxISR

    xdef   SCI6_RxTxISR

    xdef   SCI7_RxTxISR


;********************************************************************************************************

;                                         EXTERNAL DECLARATIONS  外部声明

;********************************************************************************************************


    xref   OSIntExit

    xref   OSIntNesting

    xref   OSTCBCur


    xref   SCI0_ISR_Handler

    xref   SCI1_ISR_Handler

    xref   SCI2_ISR_Handler

    xref   SCI3_ISR_Handler

    xref   SCI4_ISR_Handler

    xref   SCI5_ISR_Handler

    xref   SCI6_ISR_Handler

    xref   SCI7_ISR_Handler



;********************************************************************************************************

;                                           SCI RxTx ISR

;

; Description : This routine is the uC/Probe RxTx interrupt service routine

;

; Arguments   : none

;

; Notes       : 1) All USER interrupts should be modeled EXACTLY like this where the only

;                  line to be modified is the call to your ISR_Handler and perhaps the call to

;                  the label name SCI0_ISR_Handler.

;********************************************************************************************************


SCI0_RxTxISR:

    ldaa   GPAGE                       ; Get current value of GPAGE register

    psha                               ; Push GPAGE register onto current task's stack


    ldaa   EPAGE                       ; Get current value of EPAGE register

    psha                               ; Push EPAGE register onto current task's stack


    ldaa   RPAGE                       ; Get current value of RPAGE register

    psha                               ; Push RPAGE register onto current task's stack


    ldaa   PPAGE                       ; Get current value of PPAGE register

    psha                               ; Push PPAGE register onto current task's stack


    inc    OSIntNesting                ; Notify uC/OS-II about ISR


    ldab   OSIntNesting                ; if (OSIntNesting == 1) {

    cmpb   #$01

    bne    SCI0_RxTxISR1


    ldy    OSTCBCur                    ;     OSTCBCur->OSTCBStkPtr = Stack Pointer

    sts    0,y                         ; }


SCI0_RxTxISR1:

    call   SCI0_ISR_Handler  ; Call TxRx ISR handler. (See SCI_uCos.c)


;   cli                               ; Optionally enable interrupts to allow interrupt nesting


    call   OSIntExit                  ; Notify uC/OS-II about end of ISR, a context switch may occur from within OSIntExit().


    pula                               ; Get value of PPAGE register

    staa   PPAGE                       ; Store into CPU's PPAGE register


    pula                               ; Get value of RPAGE register

    staa   RPAGE                       ; Store into CPU's RPAGE register


    pula                               ; Get value of EPAGE register

    staa   EPAGE                       ; Store into CPU's EPAGE register


    pula                               ; Get value of GPAGE register

    staa   GPAGE                       ; Store into CPU's GPAGE register


    rti                               ; Return from interrupt to interrupted task.


SCI1_RxTxISR:

    ldaa   GPAGE                       ; Get current value of GPAGE register

    psha                               ; Push GPAGE register onto current task's stack


    ldaa   EPAGE                       ; Get current value of EPAGE register

    psha                               ; Push EPAGE register onto current task's stack

推荐阅读

史海拾趣

Fortiming Corporation公司的发展小趣事

背景:2001年9月5日,Fortiming Corporation在内华达州正式成立(来源:企查查)。在成立之初,公司就明确了自己的市场定位——专注于提供高质量的石英晶振、晶体振荡器等频率控制产品。

发展:面对当时竞争激烈的电子行业,Fortiming凭借其对技术的深刻理解和对市场需求的敏锐洞察,迅速在石英晶振领域站稳脚跟。公司不仅注重产品研发,还积极引进先进生产设备,提升产品质量和生产效率。

Electro Adapter Inc公司的发展小趣事

随着公司产品的日益成熟,EA公司开始寻求更广阔的市场空间。公司不仅在国内市场加大推广力度,还积极开拓国际市场。在海外市场,EA公司面临着文化差异、法规差异等挑战,但公司通过深入的市场调研和精准的市场定位,成功地将产品推向了欧洲、北美等发达国家和地区。同时,EA公司还加强了品牌宣传,通过参加国际展会、赞助行业活动等方式,提高了品牌知名度和影响力。

CIPS公司的发展小趣事

随着CIPS系统的不断发展壮大,其在行业内的地位和影响力也逐渐提升。多家银行和金融机构因积极运用CIPS标准收发器推动跨境人民币业务发展而荣获奖项,这是对CIPS系统及其运营机构的高度认可。这些荣誉和奖项不仅彰显了CIPS在行业内的领先地位,也为其未来的发展奠定了坚实基础。

HellermannTyton公司的发展小趣事

进入21世纪后,Heimann Optoelectronics Gmbh意识到全球化合作的重要性。公司积极寻求与国际知名企业的合作机会,与美国一家领先的半导体制造商共同研发了新一代的光电集成芯片。这一合作不仅提升了产品的技术水平和市场竞争力,还借助合作伙伴的全球销售网络,将Heimann的产品迅速推向国际市场。同时,公司也在亚洲设立了研发中心和生产基地,进一步提升了生产效率和供应链管理能力。

Frequency Devices公司的发展小趣事

面对快速变化的市场需求,Frequency Devices公司展现出了敏锐的市场洞察力。在21世纪初,随着无线通信技术的快速发展,对高频电子元件的需求急剧增加。公司及时调整产品策略,加大了对无线通信领域高频产品的研发投入,并成功推出了一系列适用于手机、基站等通信设备的高频滤波器、功率放大器等关键元件。这些产品不仅满足了市场需求,还进一步巩固了公司在行业内的市场地位。

B&F Fastener Supply公司的发展小趣事

凭借优质的产品和服务,B&F Fastener Supply公司逐渐赢得了大型电子厂商的青睐。多家知名电子企业选择与B&F建立长期合作关系,将其作为紧固件和电子元器件的主要供应商。这不仅为B&F带来了稳定的订单和收入来源,还进一步提升了公司在电子行业的地位和影响力。

问答坊 | AI 解惑

请高手请指教或转开发,有套无线遥控设备实现不了

本人有一套无线控制设备一时难以实现,请有经验的厂家或个人给于帮助.具体功能请见下面WORD文档.XX机配套遥控器使用说明书.doc,遥控产品功能要求.doc.非常感谢!!!w有代开发者请与本人联系. …

查看全部问答>

嵌入式C语言程序设计 使用MCS-51

《嵌入式C语言程序设计 使用MCS-51》光盘,内容不错。…

查看全部问答>

ds18b20 中文资料

ds18b20  中文资料…

查看全部问答>

如何改变WINCe系统的分辨率

如何改变WINCe系统的分辨率,是否可以通过注册表来修改呢?发现弹出窗口太大了!…

查看全部问答>

运放LM324输出加二极管

LM324作为比较器使用。请问二极管D1是什么作用?…

查看全部问答>

STM8S103K3的问题

请问大家使用STM8S103K3时有遇到以下问题吗? 使用STVD4.1.3+Cosmic 芯片:STM8S103K3 MCU select不管是选择STM8S103F3还是STM8S103K3都可以连接成功 但是与STM8S103F3不一样的I/O无法控制,如PD0/PB0/PB1/PB2等,其他I/O 口很正常.请问有谁 ...…

查看全部问答>

请教:重新安装 msp430 调试软件 iar (限时版)

请教:因为之前安装限时版的430调试软件,时间到期之后,重新安装 iar embeded workbench evaluation for msp430 4.21 是否可以继续使用? 可有哪位兄台曾经这么做过?…

查看全部问答>

PGA112中的Ra怎么选?

本帖最后由 dontium 于 2015-1-23 13:13 编辑 大家好: 我最近在用TI的PGA112,有两路信号需要送到pga112。两路信号都是双极的,大约都是+/-100mv的信号,正在参考pga112技术手册图 77中Ch0的接法连接,就是两路信号分别通过两个CA,连到Ch0和Ch1. ...…

查看全部问答>