历史上的今天
返回首页

历史上的今天

今天是:2024年11月04日(星期一)

正在发生

2021年11月04日 | 一起学mini2440裸机开发(十二)--mini2440的串口中断实验

2021-11-04 来源:eefocus

本实验实现的功能是:利用串口中断功能,通过串口调试工具接收到字符后再显示。


下图为我的工程文档

main.c文件


#include"isrservice.h"

#include"uart.h"

#include"led.h"

#include"interrupt.h"


int main()

{   

    Uart0_Init(115200);     //初始化并设置波特率为115 200

    Uart0_Interrupt_Init();  //Uart0中断初始化

    Led_Init();                   //Led初始化

    while(1)                      //循环,等到中断发生

    {

        ;

    }     

}


led.h文件


#ifndef __LED_H__

#define __LED_H__


#include

#define Led1_On()  {GPBDAT&=(~(1<<5));}

#define Led1_Off()  {GPBDAT|=(1<<5);}

#define Led2_On()  {GPBDAT&=(~(1<<6));}

#define Led2_Off()  {GPBDAT|=(1<<6);}

#define Led3_On()  {GPBDAT&=(~(1<<7));}

#define Led3_Off()  {GPBDAT|=(1<<7);}

#define Led4_On()  {GPBDAT&=(~(1<<8));}

#define Led4_Off()  {GPBDAT|=(1<<8);}

/****************************************************

* 函数名称:void Led_Init(void)

* 全局变量:无

* 参数说明:无

* 返 回 值;无

* 功    能:设置GPN5-8为输出功能,初始化4个LED灯灭

*****************************************************/

void Led_Init(void);


#endif


led.c文件


/****************************************************

* 我的mini2440开发板上4个LED灯对应的GPIO口

* LED1---GPB5    LED2---GPB6

* LED3---GPB7    LED4---GPB8

*****************************************************/


#include


/****************************************************

* 函数名称:void Led_Init(void)

* 全局变量:无

* 参数说明:无

* 返 回 值;无

* 功    能:设置GPB5-8为输出功能,初始化4个LED灯灭

*****************************************************/

void Led_Init(void)

{

  GPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16));

  GPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16));    //设置GPB5-8口为输出功能

  GPBUP&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));          //上拉电阻使能

  GPBDAT|=(1<<5)|(1<<6)|(1<<7)|(1<<8);            //令GPBDAT5-8均为高电平,即令4个led灯全灭

}


uart.h文件


#ifndef __UART_H__

#define __UART_H__


/***********************************************

*函数名称:void Uart0_Init(unsigned int baudrate)

*参数说明:baudrate:波特率

*返 回 值:无

*全局变量: 无

*功    能:对UART0进行初始化                         

************************************************/

void Uart0_Init(unsigned int baudrate);


#endif


uart.c文件


#include

#include

#include"uart.h"


#define PCLK   50000000

#define UART_BRD     (int)((PCLK/(baudrate*16))-1)


/***********************************************

*函数名称:void Uart0_Init(unsigned int baudrate)

*参数说明:baudrate:波特率

*返 回 值:无

*全局变量: 无

*功    能:对UART0进行初始化                         

************************************************/

void Uart0_Init(unsigned int baudrate)

{

 GPHCON&=~((3<<4)|(3<<6));  //GPH2--TXD0;GPH3--RXD0

 GPHCON|=((2<<4)|(2<<6));    //设置GPH2、GPH3为TXD0、RXD0功能

 GPHUP=0x00;                 //上拉电阻使能

 ULCON0|=0x03;              //设置数据发送格式:8个数据位,1个停止位,无校验位

 UCON0=0x05;                //发送模式和接收模式都使用查询模式

 UBRDIV0=UART_BRD;         //设置波特率,其中波特率作为一个参数传递到该初始化函数

 URXH0=0;                        //将URXH0清零

}


interrupt.h文件


#ifndef __INTERRUPT_H__

#define __INTERRUPT_H__


/****************************************************

* 函数名称:void Uart0_Interrupt_Init(void)

* 全局变量:无

* 参数说明:无

* 返 回 值;无

* 功    能:将UART0中断屏蔽位设为无效

*****************************************************/

void Uart0_Interrupt_Init(void);


#endif


interrupt.c文件


#include

#include"interrupt.h"



/****************************************************

* 函数名称:void Uart0_Interrupt_Init(void)

* 全局变量:无

* 参数说明:无

* 返 回 值;无

* 功    能:将UART0中断屏蔽位设为无效

*****************************************************/

void Uart0_Interrupt_Init(void)

 INTMSK&=~(1<<28);     //Uart0中断带有子中断,所以需要将

                                       //Uart0总中断屏蔽位置为无效,然后将发送

                                        //中断和接收中断屏蔽位置设为无效,

 INTSUBMSK&=~((1<<0)|(1<<1));   //这样程序才能顺利地响应发送中断和接收

      

}      


isrservice.h文件


#ifndef __ISRSERVICE_H__

#define __ISRSERVICE_H__


/****************************************************

* 函数名称:void __irq IRQ_Handler(void)

* 全局变量:无

* 参数说明:无

* 返 回 值;无

* 功    能:Uart0中断服务函数,必须加__irq

*****************************************************/

void __irq IRQ_Handler(void);


#endif


isrservice.c文件


#include

#include"isrservice.h"

#include"led.h"


extern unsigned int flag; //声明外部变量flag,该变量是在main.c文件中定义的

        //当1s到来时,中断响应函数将该变量值取反,在主

        //程序中通过检测该变量的值来实现不同的操作


/****************************************************

* 函数名称:void __irq IRQ_Handler(void)

* 全局变量:无

* 参数说明:无

* 返 回 值;无

* 功    能:Uart0中断服务函数,必须加__irq

*****************************************************/

void __irq IRQ_Handler(void)  //注意这个函数名字要和S3C2440.s处的跳转标号相同   

{

 unsigned char buf;

 if(SUBSRCPND&(1<<0))     //接收中断

 {

  buf=URXH0;  //将接收到的字符存放在buf中


  Led1_On();

  SUBSRCPND|=1<<0; //清除接收中断

  SRCPND|=1<<28;

  INTPND|=1<<28;

  UTXH0=buf;         //PC机将接收的字符通过串口调试工具显示在屏幕上     

 }

 if(SUBSRCPND&(1<<1)) //发送中断

 {

  Led2_On();

  SUBSRCPND|=1<<1; //清除发送中断

  SRCPND|=1<<28;

  INTPND|=1<<28;

 }

}

推荐阅读

史海拾趣

HARTING公司的发展小趣事

Hanghsing Enterprise Co., Ltd. 的五个发展故事

故事一:初创与起步

Hanghsing Enterprise Co., Ltd.(以下简称“Hanghsing”)成立于台湾,起初是一家专注于精密零部件制造的小型公司。公司位于No. 1, Lane 39, Seuwe St., Tali City, Taichung Hsien, Taiwan 412,凭借对品质的不懈追求和对市场的敏锐洞察,Hanghsing逐渐在行业内崭露头角。公司初期主要生产Valve Shafts、Nuts、Screws等精密不锈钢部件,这些产品广泛应用于电子、机械等多个领域。通过不断优化生产工艺和质量控制体系,Hanghsing逐渐建立了良好的市场口碑。

故事二:技术突破与产品升级

随着电子行业的快速发展,Hanghsing意识到技术创新的重要性。公司加大了对研发的投入,引进了一批高素质的技术人才,致力于新产品的开发和现有产品的升级。经过不懈努力,Hanghsing成功推出了一系列高精度、高可靠性的电子产品零部件,如Sleeve Barrels、Toggles和Mandrels等。这些产品不仅满足了市场对高品质零部件的需求,还进一步巩固了公司在电子行业供应链中的地位。

故事三:市场拓展与国际合作

随着产品质量的不断提升和市场份额的逐步扩大,Hanghsing开始将目光投向国际市场。公司积极参加各类国际展会,与全球知名电子企业建立合作关系,将产品销往世界各地。同时,Hanghsing还注重与国际技术标准的接轨,确保产品符合国际市场的严格要求。通过不断的市场拓展和国际合作,Hanghsing在国际上的知名度和影响力得到了显著提升。

故事四:产业升级与多元化发展

面对电子行业的快速发展和市场竞争的日益激烈,Hanghsing积极寻求产业升级和多元化发展的路径。公司开始涉足电子元器件的制造和研发领域,通过引进先进的生产设备和工艺技术,不断提升产品的附加值和市场竞争力。同时,Hanghsing还积极拓展上下游产业链,与原材料供应商和终端客户建立紧密的合作关系,形成了完整的产业生态体系。

故事五:绿色生产与可持续发展

在追求经济效益的同时,Hanghsing始终不忘履行社会责任。公司积极响应国家环保政策,致力于绿色生产和可持续发展。通过引进环保设备和工艺技术,减少生产过程中的污染物排放和资源消耗。同时,Hanghsing还加强了对员工的环保教育和培训,提高员工的环保意识和责任感。这些举措不仅有助于提升公司的社会形象和市场竞争力,还为推动电子行业的绿色发展做出了积极贡献。

GWP Group公司的发展小趣事

针对晶体二极管单相全波电阻负载整流电路,网友可能提出多个问题,以下是一些可能的问题及其详细回答:

1. 什么是晶体二极管单相全波电阻负载整流电路?

回答:晶体二极管单相全波电阻负载整流电路是一种将交流电(AC)转换为直流电(DC)的电路,它利用了晶体二极管的单向导电特性。这种电路通过四个二极管(通常构成桥式整流器)实现全波整流,即同时利用交流电的正负半周进行整流,从而提高整流效率。负载电阻则用于消耗整流后的直流电。

2. 该电路的工作原理是什么?

回答:晶体二极管单相全波电阻负载整流电路的工作原理基于二极管的单向导电性。在交流电的正半周,二极管D1和D3导通,D2和D4截止,电流通过D1、负载电阻和D3形成回路,负载上得到上正下负的电压。在交流电的负半周,情况相反,D2和D4导通,D1和D3截止,电流方向不变,同样通过负载电阻,从而在负载上持续得到方向不变的直流电压。

3. 为什么需要四个二极管而不是两个?

回答:使用四个二极管构成桥式整流器可以充分利用交流电的正负两个半周,实现全波整流。如果只使用两个二极管,则只能实现半波整流,即只利用交流电的一个半周进行整流,整流效率较低。桥式整流电路通过巧妙地连接四个二极管,使得在每个半周内都有电流通过负载,从而提高了整流效率。

4. 如何提高该电路的整流效率?

回答:提高晶体二极管单相全波电阻负载整流电路的整流效率可以从以下几个方面入手:

  • 选择合适的变压器:根据整流电路的输入电压和输出电压要求,选择合适的变压器,以保证整流电路的稳定性和效率。
  • 优化整流器设计:通过选择合适的二极管和优化整流器的布局,可以提高整流器的整流效率和稳定性。
  • 增加滤波电路:在整流器的输出端增加滤波电路(如电容和电感),可以滤除整流后的脉动直流电中的交流成分,得到更加平滑的直流电,从而提高整流效率。

5. 该电路有哪些应用?

回答:晶体二极管单相全波电阻负载整流电路具有广泛的应用,包括但不限于以下几个方面:

  • 电源适配器:将交流电转换为直流电,为各种电子设备提供稳定的电源。
  • 充电器:用于为电池充电,将交流电转换为适合电池充电的直流电。
  • 电源模块:作为电源模块的一部分,为各种电子设备提供稳定的直流电源。
  • 工业控制:在工业控制领域,为各种控制设备提供稳定的直流电源。

6. 该电路是否存在局限性?

回答:尽管晶体二极管单相全波电阻负载整流电路具有许多优点,但也存在一些局限性。例如,整流后的直流电仍存在一定的脉动成分,需要通过滤波电路进一步处理;此外,整流过程中会产生一定的能量损失,包括二极管的正向导通压降和滤波电路中的能量损耗等。因此,在实际应用中需要根据具体需求选择合适的整流电路和滤波方案。

Electronic公司的发展小趣事

小米,作为一家年轻的科技公司,在电子行业的发展中展现了惊人的成长速度。小米凭借出色的产品设计和创新的营销策略,迅速在手机市场获得了巨大成功。随着业务的不断拓展,小米还涉足了智能家居、物联网和互联网金融等领域,形成了完整的生态布局。小米通过提供高性价比的产品和优质的服务,赢得了大量年轻用户的喜爱和支持。

Array Microsystems Inc公司的发展小趣事

在取得初步成功的基础上,Array Microsystems Inc深知技术创新是企业持续发展的核心动力。因此,公司加大了对研发的投入力度,不断推出新的阵列传感器产品和技术。这些新产品不仅具有更高的性能和更低的成本,还满足了市场不断变化的需求。通过持续的创新和研发,Array Microsystems Inc在电子行业中保持了领先地位。

Directed Energy Inc公司的发展小趣事

在电子行业中,创新是企业持续发展的关键。Directed Energy Inc始终将创新作为企业的核心竞争力之一,不断投入研发资源,推动技术创新和产品升级。公司拥有一支高素质的研发团队,他们紧跟行业发展趋势,不断探索新的技术和应用,为公司的发展注入了源源不断的动力。这种持续的创新精神使得Directed Energy Inc在电子行业中始终保持领先地位。

First Sensor公司的发展小趣事

为了进一步扩大市场份额,Directed Energy Inc积极寻求与全球范围内的合作伙伴建立合作关系。通过与知名电子产品制造商、分销商和解决方案提供商的合作,公司成功将其产品推向了全球各地。这些合作伙伴不仅为Directed Energy Inc带来了更多的商业机会,还帮助公司更好地了解不同市场的需求和趋势,从而不断调整和优化产品策略。

问答坊 | AI 解惑

基于电流跟踪控制的高压钠灯电子镇流器研制

摘要:针对高压钠灯工作特点以及工作在高频状态下的缺陷,采用电流跟踪技术,设计了一种低频高压钠灯电子镇流器,并设计了可靠的逻辑控制启动电路。最后,给出实验结果。 关键词:高压钠灯;电子镇流器;闭环;电流跟踪   0    引 ...…

查看全部问答>

TSOP封装技术与SOP封装的区别?

在Protel中利用向导创建贴片元件时,你会发现SOP的管脚焊盘默认的是50milX100mil(毫英寸),而TSOP的参数书册给出的是18milX33mil,所以,我想问下是否TSOP(T-Type II)是SOP封装的浓缩型,尺寸有了压缩? 很多SDRAM(比如电脑上的内存条用的芯 ...…

查看全部问答>

keil注册问题

下了个keil3,但是怎么也注册不了,试了几个注册机。怀疑是注册步骤出错了,求详细注册步骤 感谢!!!…

查看全部问答>

刷卡支付功能的手机的相关技术

可以给我讲讲有关刷卡支付功能的手机的关键开发技术吗?…

查看全部问答>

有谁用uclinux进行过嵌入式开发,请帮下忙!

我用的是ylp2440的开发板,其cpu是s3c2410,买的时候带来的是linux2.6.12的内核,以及arm-linux-gcc的交叉编译工具。现在我想让这个板子跑uclinux的系统,那样怎么弄?是不是把uclinux移植到板子上,然后找个交叉编译工具,在linux的虚拟机上编程? ...…

查看全部问答>

请问哪款传感器可以检测水果乙烯浓度

请问哪款传感器可以用来搭配单片机,实现检测水果散发的乙烯浓度的功能,哪位做过的请推荐一款,价格最好在500元左右的,谢谢…

查看全部问答>

基于WINCE 5.0操作平台,在VC2005 开发MFC智能设备应用软件

在VS2005开发平台下,开发的软件直接通过Microsoft ActiveSync 同步软件下载到2440开发扳上可以运行(通过开发环境) ;单独生成Release版本的,脱离开发环境下载到开发板上就不能运行了.    而使用eVC开发的应用程序就不存在这个问题. &nbs ...…

查看全部问答>

问一个107+DP83848初始化的问题

请问一下调试过的朋友, STM32F107+DP83848做网络通讯, 在初始化的时候,是不是必须插网线?…

查看全部问答>