历史上的今天
返回首页

历史上的今天

今天是:2024年11月27日(星期三)

正在发生

2019年11月27日 | 串口控制FL2440(S3C2440)的LED

2019-11-27 来源:eefocus

开发板:FL2440


芯片:S3C2440


功能:程序运行时点亮一个LED,然后利用PC机通过串口发送一个数,开发板读到这个数后点亮另外一个LED。最基本的串口控制。


代码:


Init.s


AREA |DATA|,CODE,READONLY 

ENTRY 

ldr r13, =0x1000 

IMPORT WuqiMain 

b WuqiMain 

END

 

include.h


 1 #define rUTRSTAT0   (*(volatile unsigned *)0x50000010)    //UART 0 Tx/Rx status

 2 #define rULCON0     (*(volatile unsigned *)0x50000000)    //UART 0 Line control

 3 #define rUCON0      (*(volatile unsigned *)0x50000004)    //UART 0 Control

 4 #define rUFCON0     (*(volatile unsigned *)0x50000008)    //UART 0 FIFO control

 5 #define rUBRDIV0    (*(volatile unsigned *)0x50000028)    //UART 0 Baud rate divisor

 6 #define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)

 7 #define RdURXH0()   (*(volatile unsigned char *)0x50000027)

 8 #define rURXH0          (*(volatile unsigned *)0X50000024)

 9 #define rUTXH0  (*(volatile unsigned *)0X50000020)

10 #define rURXH0  (*(volatile unsigned *)0X50000024)

11 

12 #define GPBCON (*(volatile unsigned *)0x56000010) 

13 #define GPBDAT (*(volatile unsigned *)0x56000014) 

14 #define GPBUP (*(volatile unsigned *)0x56000018)

15 

16 #define uchar unsigned char

17 #define uint unsigned int

18 #define U32 unsigned int

19 #define U16 unsigned short

20 #define S32 int

21 #define S16 short int

22 #define U8  unsigned char

23 #define    S8  char

24 

25 #define TRUE 1

26 #define FALSE 0

27 

28 #define OK 1

29 #define FAIL 0

30 

31 #define    ESC_KEY        0x1b


uart.h


 1 #include "include.h"

 2 #include

 3 

 4 

 5 

 6 void Uart_Init(int baud)

 7 {

 8     int i;

 9     rUFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable

10   

11  

12 //UART0

13     rULCON0 &=0XFFFFFF00;

14     rULCON0 |=0X03;           //1位起始位,8位数据位

15     rUCON0  =0X0805;          //串口时钟PCLK,查询方式

16     rUBRDIV0 =0X1A;

17     for(i=0;i<100;i++);

18 }

19 

20 

21     

22 //=====================================================================

23 void Uart_SendByte(int data)

24 {

25    

26         if(data=='n')

27         {

28             while(!(rUTRSTAT0 & 0x2));

29            // Delay(1);                 //because the slow response of hyper_terminal 

30             WrUTXH0('r');

31         }

32         while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.

33       //  Delay(1);

34         WrUTXH0(data);

35   

36    

37 }               

38 

39 //====================================================================

40 void Uart_SendString(S8 *pt)

41 {

42     while(*pt)

43         Uart_SendByte(*pt++);

44 }

45 

46 //=====================================================================

47 //If you don't use vsprintf(), the code size is reduced very much.

48 void Uart_Printf(S8 *fmt,...)

49 {

50     va_list ap;

51     S8 str[255];

52 

53     va_start(ap,fmt);

54        vsprintf(str,fmt,ap);

55     Uart_SendString(str);

56     va_end(ap);

57 }

58 

59 //=====================================================================

60 

61 /*

62 char Uart_GetKey(void)

63 {

64     

65         if(rUTRSTAT0 & 0x1)    //Receive data ready

66         return rURXH0 ;

67         else

68             return 0;

69  

70 }

71 */

 

main.c


#include"include.h"

#include "uart.h"


void Delay(int count)

{

    unsigned int i;                

    while (--count != 0)        

    {

        for (i=0; i<255; i++);        // ";" 表示空语句,CPU空转。

    }                   

}


void WuqiMain(void)

{

    char buf;

    

    GPBUP = 0x00; 

    GPBCON &= ~(1<<13);

    GPBCON |= (1<<12);

    GPBCON &= ~(1<<21);    

    GPBCON |= (1<<20);

    

    while(1)

    {

        GPBDAT &= ~(1<<6);

        GPBDAT &= 0xffe;

        

        if(rUTRSTAT0 & 0X01)  //接收是否完毕 =1结束

        {

            buf=rURXH0;       //读取数据

            while(!(rUTRSTAT0 & 0X04));//是否允许发送 =1允许

            rUTXH0=buf;

        }            

        if(buf=='1')

        {

            GPBDAT &= ~(1<<10);

            

        }    


    }

}

 

测试一下,vc6,file——new——projects——win32consoleApplication——a simple application


 1 #include "stdafx.h"

 2 #include

 3 #include

 4 

 5 

 6 int main(int argc, char* argv[])

 7 {

 8     char lpBuf[]="1";

 9     FILE * pFile=fopen("COM1","w");

10     if(pFile==NULL)

11     {

12         return 1;

13     }

14     fwrite(lpBuf,sizeof(char),strlen(lpBuf),pFile);

15     fclose(pFile);

16     return 0;


运行后开发板两个LED亮,也可用串口调试助手发送“1”来测试。

推荐阅读

史海拾趣

敦泰(FOCALTECH)公司的发展小趣事
调节冰箱温度时,应根据季节和存放食物的需求进行调整。一般来说,冷藏室的温度应设置在2-8℃之间,冷冻室的温度应设置在-18℃以下。可以通过冰箱上的温度调节按钮或触摸屏进行设置。同时,注意避免将温度设置过低或过高,以免影响食物的保鲜效果和冰箱的能耗。
Alan Industries Inc公司的发展小趣事

为了进一步提升竞争力,Alan Industries Inc.积极寻求与其他企业的战略合作。公司与多家知名供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和成本控制。同时,公司还通过并购和投资等方式,整合了产业链上下游资源,形成了完整的产业生态圈。这些战略举措使得公司在市场竞争中更具优势,实现了快速发展。

Avalon Photonics公司的发展小趣事

Avalon Photonics的创立源于一次技术突破。创始人Dr. Smith在光子学领域有着深厚的学术背景,他成功研发出了一种新型的光子探测器,具有极高的灵敏度和稳定性。这一创新技术迅速引起了业界的关注。Dr. Smith看到了商业化的潜力,于是决定成立Avalon Photonics,将这项技术转化为实际产品。初创期的Avalon面临着资金短缺和市场认知度低的挑战,但凭借着技术优势和团队的努力,逐渐在市场上站稳脚跟。

ConnectBlue公司的发展小趣事

ConnectBlue公司成立于2000年,当时正值无线通信技术快速发展的时期。公司创始人凭借对无线技术的深刻理解和市场需求的敏锐洞察,决定专注于无线系统的研发和生产。起初,公司面临资金紧张和技术难题,但创始团队凭借坚韧不拔的精神,克服了一个又一个困难,成功开发出了一系列具有竞争力的无线模块产品。

Digital Equipment Corp公司的发展小趣事

DEC始终致力于技术创新和产品研发。在20世纪70年代和80年代,DEC推出了一系列具有划时代意义的计算机产品,如PDP系列计算机和VAX系列计算机。这些产品在技术上处于领先地位,受到了市场和客户的广泛认可。此外,DEC还通过国际扩张策略,将其业务拓展到了全球范围内,进一步巩固了其市场地位。

Hirose Electric公司的发展小趣事

2001年,惠普公司与康柏公司宣布合并,DEC作为康柏的一部分也随之并入惠普。这次合并进一步扩大了DEC的业务范围和市场影响力。在合并后,DEC的计算机产品和技术被整合到惠普的产品线中,同时DEC的品牌也逐渐淡出市场。然而,DEC在计算机行业中的贡献和影响力仍然被广泛认可,其技术遗产和创新精神在惠普及其他科技公司中得到了传承和发展。

问答坊 | AI 解惑

伟福6000版本

这是下载的伟福软件,与大家分享。…

查看全部问答>

了解逻辑分析仪(1)

逻辑分析仪是利用时钟从测试设备上采集和显示数字信号的仪器,最主要作用在于时序判定。由于逻辑分析仪不像示波器那样有许多电压等级,通常只显示两个电压(逻辑1和0),因此设定了参考电压后,逻辑分析仪将被测信号通过比较器进行判定,高于参考电 ...…

查看全部问答>

哪为大侠帮小弟讲解下这个复位电路啊

资料好难找呀,哪位大侠帮帮小弟,帮我讲解下这个电路的原理,万分感谢…

查看全部问答>

MSP430系列单片机接口技术及系统设计实例

MSP 430系列单片机接口技术及系统设计实例.rar…

查看全部问答>

TMS320C6713地址空间问题求教

TMS320C6713 芯片只有20根地址线EA[21:2],问题1:怎么手册(sprs186l.pdf)上说能够“512M-Byte Total Addressable ExternalMemory Space”?问题2:在第16页的“ TMS320C6713 Memory Map Summary” 提到的地址,例如:    ---------- ...…

查看全部问答>

请问如何,控制步进电机的步数(例如一次走50步,或是走90度) C语言

#include        #define OUTPUT P1 unsigned char steps=1; unsigned char times=10; int j=0; char excite[]={0x01,0x02,0x04,0x08}; void step_rst(void); void delay50ms(int); main() {     ...…

查看全部问答>

讨论干扰的问题

最近在写论文。有如下问题大家来讨论: 估算系统精度时,AD转换的误差可否估算? AD转换误差除了参考电压的误差和量化误差外,还要考虑些什么因素?…

查看全部问答>

通过何种方式可以轻松实现计算机-继电器(或者PLC)简单的通讯控制

需要实现简单1/0通讯,计算机得到继电器开关信号,同时通过判断返回一个开关信号到继电器。 是否需要串口通讯?和其他更简单办法?请不吝赐教。 …

查看全部问答>

请问这样的错误如何解决?KeiL C51

*/linking... *** ERROR L107: ADDRESS SPACE OVERFLOW   SPACE:   HCONST   SEGMENT: ?FC?OVTFONT_4_CE_D7   LENGTH: 0076F8H    *** ERROR L120: CONTENT BELONGS TO ERRONEOUS SEGMEN ...…

查看全部问答>

PIC16F1937驱动LCD,怎么也不亮

PIC16F1937驱动LCD,怎么也不亮,这是我的程序初始化LCD的代码,当然那些I/O口的也设置了,我像随便点亮下,他就是不亮了,很久没有玩汇编代码了,搞了好久,搞不对!LCD_RET         BANKSEL   LCDPS&nbs ...…

查看全部问答>