历史上的今天

今天是:2024年08月30日(星期五)

正在发生

2019年08月30日 | S5PV210开发 -- 串口驱动开发

发布者:calmrs 来源: eefocus关键字:S5PV210  串口  驱动开发 手机看文章 扫描二维码
随时随地手机看文章

上篇文章讲的 UART,更多的是硬件相关的知识。接下来进入正题了,串口驱动开发。


一、阅读原理图

我们用的是 UART2 串口,则接收管脚 XuRXD2 复用 GPA1_0,发送管脚 XuTXD2 复用 GPA1_1


二、S5PV210 UART

 


(1)通用异步接收器和发送器的概述  (p-853)

S5PV210中的通用异步接收器和发送器(UART)提供四个独立的异步和串行输入/输出(I / O)端口。所有端口都以基于中断或基于DMA的方式运行模式。 UART产生一个中断或DMA请求来传送数据到CPU和UART。

UART支持高达3Mbps的比特率。每个UART通道包含两个FIFO来接收和传输数据:

ch0中的256个字节,ch1中的64个字节以及ch2和ch3中的16个字节。

UART包括可编程波特率,红外(IR)发送器/接收器,一个或两个停止位插入,5位,6位,7位或8位数据宽度和奇偶校验。每个UART包含一个波特率发生器,一个发送器,一个接收器和一个控制单元,如图1-1所示。

波特率发生器使用PCLK或SCLK_UART。发送器和接收器包含FIFO和数据移。要发送的数据被写入Tx FIFO,并被复制到发送移位器。数据是由发送数据引脚(TxDn)移出。接收到的数据从接收数据引脚(RxDn)移位,从移位器复制到Rx FIFO。

 

(2)通用异步接收器和发送器的关键特性


基于DMA或基于中断的操作的RxD0,TxD0,RxD1,TxD1,RxD2,TxD2,RxD3和TxD3

带有IrDA 1.0的UART Ch 0,1,2和3

具有256字节FIFO的UART Ch 0,具有64字节FIFO的Ch 1,具有16字节FIFO的Ch2和3

用于自动流量控制的UART Ch 0,1和2与nRTS0,nCTS0,nRTS1,nCTS1,nCTS2和nRTS2

支持握手发送/接收。


(3)UART描述

以下各节将介绍UART操作,如数据传输,数据接收,中断生成,波特率生成,环回模式,红外模式和自动流量控制。


《1》数据发送

传输的数据帧是可编程的。 它由一个起始位,五到八个数据位,一个可选的奇偶校验组成位和由行控制寄存器(ULCONn)指定的一到两个停止位。 变送器也可以产生一个强制串行输出为逻辑0状态一个帧传输时间的中断条件。 这个块传送当前发送字之后的中断信号被完全发送。 中断信号后传输时,发送器不断向Tx FIFO发送数据(Tx保持寄存器,如果是非FIFO模式)


《2》数据接收

与数据发送类似,用于接收的数据帧也是可编程的。 它由一个5位的起始位组成8个数据位,一个可选的奇偶校验位以及线路控制寄存器(ULCONn)中的一到两个停止位。 收件人检测溢出错误,奇偶校验错误,帧错误和中断情况,每个错误标志都会设置一个错误标志。

    溢出错误(Overrun error)表示新数据在旧数据读取之前覆盖旧数据。

    奇偶校验错误(Parity error)表示接收器检测到意外的奇偶校验条件。

    帧错误(Frame error)表示接收到的数据没有有效的停止位。

    中断条件(Break condition)表示RxDn输入保持逻辑0状态,以进行多个帧传输时间。

如果在3个字的时间内没有收到任何数据,则会发生接收超时情况(此时间间隔符合设置字长度位),FIFO模式下Rx FIFO不为空。


后面内容有点多...  就不一一翻译了。想了解更多,自己看。


三、UART 相关配置

(1)配置串口管脚

上面提到了,S5PV210 中的通用异步接收器和发送器(UART)提供四个独立的异步和串行输入/输出(I / O)端口。根据原理图可以看出,我们用的是 UART2 串口,则接收管脚 XuRXD2 复用 GPA1_0,发送管脚 XuTXD2 复用 GPA1_1


查看GPA1寄存器(p-135)


端口组GPA1控制寄存器有六个控制寄存器,分别是GPA1CON,GPA1DAT,GPA1PUD,GPA1DRV,GPA1CONPDN和端口组GPA1控制寄存器中的GPA1PUDPDN。


《1》GPA1CON 寄存器  (配置寄存器) 将其配置成UART2收/发模式

GPA1CON, R/W, Address = 0xE020_0020


GPA1CON[1] [7:4] 0100 = UART_AUDIO_TXD

GPA1CON[0] [3:0] 0100 = UART_AUDIO_RXD

设置:


GPA1CON 地址为 0xE020_0020,然后要将 GPA1CON[7:0] 进行位操作,使其变为0010 0010,即UART2收发模式。


位操作方法,参看:C语言再学习 -- 位操作


    GPA1CON &= ~(0xff<<0);  //清空bit 0-7


    GPA1CON |= 0x22;  //设置 0010 0010  接受 发送


《2》GPA1PUD 寄存器(上下拉电阻控制寄存器 )

GPA1PUD, R/W, Address = 0xE020_0028


GPA1PUD[n] [2n+1:2n] 00 = Pull-up/ down disabled


设置:


GPA1PUD 地址为 0xE020_0028,我们不需要上下拉,因此: 


GPA1PUD [1:0]  00 = Pull-up/ down disabled


GPA1PUD [3:2]  00 = Pull-up/ down disabled


位操作方法:


    GPA1PUD &= ~(0x0f<<0);//0000 禁止上拉下拉


(2)配置串口寄存器

在 p-864 有一个 REGISTER MAP,可以看一下。太长了只粘贴一部分。


S5PV10 UART 相关寄存器有如下几个,下面我们会一一讲解的:


《1》UART 行控制器 ULCONn 



UART模块中有四个UART行控制寄存器,分别是ULCON0,ULCON1,ULCON2和ULCON3


我们用的是 UART2,所以使用 


ULCON2, R/W, Address = 0xE290_0800


 

设置:


ULCON2 地址为 0xE290_0800


数据位宽度为 8bit,停止位 1位,无校验位,正常模式。


即设置数据格式寄存器 ULCON2 = 000 0011 = 0x03   


位操作方法:


ULCON2 = 0x03;


《2》UART 模式控制寄存器 UCONn

UART模块中有四个UART控制寄存器,分别是UCON0,UCON1,UCON2和UCON3


我们用的是 UART2,所以使用 


UCON2, R/W, Address = 0xE290_0804

设置:


UCON2 地址为 0xE290_0804


接收模式选择轮询,发送模式也选择轮询,正常发送暂停信号,回环模式为正常,时钟源选择 PCLK


即模式控制寄存器 UCON2 = 00 0101 = 0x05;


位操作方法:


UCON2 = 0x05;


需要知道的小知识点:


在收发模式里有中断、轮询、DMA这些有什么区别呢?


参看:后续补充!!


再者,时钟源选择里有 PCLK、SCLK_UART 这又是什么呢?


参看:后续补充!!


《3》UART FIFO 控制寄存器UFCONn

UART模块中有四个UART FIFO控制寄存器,分别是UFCON0,UFCON1,UFCON2和UFCON3


我们用的是 UART2,所以使用 


UFCON2, R/W, Address = 0xE290_0808


设置:


UFCON2 地址为 0xE290_0808

禁止 FIFO,即FIFO 控制寄存器 UFCON2 = 0x00;


位操作方法:


UFC0N2 = 0X00;


《4》UART 收/发 状态寄存器 UTRSTATn


UART模块中有四个UART Tx / Rx状态寄存器,分别是UTRSTAT0,UTRSTAT1,UTRSTAT2和UTRSTAT3


我们用的是 UART2,所以使用 


UTRSTAT2, R, Address = 0xE290_0810

设置:


UTRSTAT2 地址为 0xE290_0810 


接收缓冲区数据准备好,缓冲区为空;发送缓冲区寄存器为空。即 UTRSTAT2 = 10 = 0x02;


只有收发缓冲区为空,才能进行收发。所以首先要先判断 UART 收/发 状态寄存器 UTRSTATn


位操作方法:


UTRSTAT2 = 0x02;


《5》UART 发送缓冲寄存器(保持寄存器和FIFO寄存器)UTXHn

UART模块有四个UART发送缓冲寄存器,分别是UTXH0,UTXH1,UTXH2和UTXH3。


UTXHn包含传输数据的8位数据。


我们用的是 UART2,所以使用 


UTXH2, W, Address = 0xE290_0820


设置:


UTXH2 地址为 0xE290_0820


比如发送的数据:55,则 UTXH2 = 0101 0101 = 0x55;


 


发送移位器:发送缓冲寄存器中的数据并不是直接传送到输出管脚TXD2(GPA1_1),还必须先送到发送移位器(Transmit shifter),然后再由Transmit shifter通过移位操作,将数据一位一位的发送到TXD2管脚上。



《6》UART接收缓冲寄存器(保持寄存器和FIFO寄存器)URXHn


UART模块中有四个UART接收缓冲寄存器,分别是URXH0,URXH1,URXH2和URXH3。

URXHn包含接收数据的8位数据。


我们用的是 UART2,所以使用 


URXH2, R, Address = 0xE290_0824

设置:


URXH2 地址为 0xE290_0824


比如接收到的数据:55,则 URXH2 = 0101 0101 = 0x55;


接收移位器:从接收管脚RXD2上接收来的数据并不是直接放到接收缓冲寄存器,而是先一位一位的放到接收移位器中,当收满一个字节后,再放到接收缓冲寄存器中。

《7》UART 通道波特率分频寄存器 UBRDIVn


UART模块中有四个UART通道波特率分频寄存器,分别是UBRDIV0,UBRDIV1,UBRDIV2和UBRDIV3。


我们用的是 UART2,所以使用 


UBRDIV2, R/W, Address = 0xE290_0828

注意:当UART时钟源是PCLK时,UBRDIVn必须大于比0(UBRDIVn> 0),如果UBRDIV的值为0,则UART波特率不受UDIVSLOT值的影响。


设置:


UBRDIV2 地址为 0xE290_0828


《8》UART通道分割插槽寄存器 UDIVSLOTn

UART模块中有四个UART通道波特率分频寄存器,分别是UDIVSLOT0,UDIVSLOT1,UDIVSLOT2和UDIVSLOT3。


我们用的是 UART2,所以使用 


UDIVSLOT2, R/W, Address = 0xE290_082C


================================================


需要知道的小知识点:


波特率,在UART里面是一个很重要的概念。


参看:串口通信 -- 百度百科


数据传输率

数据传输率是指单位时间内传输的信息量,可用比特率和波特率来表示。


⑴比特率:比特率是指每秒传输的二进制位数,用bps(bit/s)表示。


⑵波特率:波特率是指每秒传输的符号数,若每个符号所含的信息量为1比特,则波特率等于比特率。在计算机中,一个符号的含义为高低电平,它们分别代表逻辑“1”和逻辑“0”,所以每个符号所含的信息量刚好为1比特,因此在计算机通信中,常将比特率称为波特率,即:


1波特(B)= 1比特(bit)= 1位/秒(1bps) 例如:电传打字机最快传输率为每秒10个字符/秒,每个字符包含11个二进制位,则数据传输率为:10Baud。11位/字符×10个字符/秒=110位/秒=110bps。计算机中常用的波特率是:110、300、600、1200、2400、4800、9600、19200、28800、33600,目前最高可达56Kbps.


⑶位时间Td


位时间是指传送一个二进制位所需时间,用Td 表示。Td = 1/波特率 = 1/B


例如:B=110波特/秒 , 则Td = 1/110 ≈ 0.0091s



发送时钟和接收时钟

在串行通信中,二进制数据以数字信号的信号形式出现,不论是发送还是接收,都必须有时钟信号对传送的数据进行定位。在TTL标准表示的二进制数中,传输线上高电平表示二进制1,低电平表示二进制0,且每一位持续时间是固定的,由发送时钟和接收时钟的频率决定。


⑴ 发送时钟


发送数据时,先将要发送的数据送入移位寄存器,然后在发送时钟的控制下,将该并行数据逐位移位输出。通常是在发送时钟的下降沿将移位寄存器中的数据串行输出,每个数据位的时间间隔由发送时钟的周期来划分。


⑵ 接收时钟


在接收串行数据时,接收时钟的上升沿对接收数据采样,进行数据位检测,并将其移入接收器的移位寄存器中,最后组成并行数据输出。


⑶ 波特率因子


接收时钟和发送时钟与波特率有如下关系:F = n × B 这里F 是发送时钟或接收时钟的频率; B 是数据传输的波特率; n 称为波特率因子。设发送或接收时钟的周期为Tc,频率为F的位传输时间为Td,则: Tc = 1/F , Td = 1/B 得到: Tc = Td /n 在实际串行通信中,波特率因子可以设定。在异步传送时,n = 1,16,64,实际常采用n = 16,即发送或接收时钟的频率要比数据传送的波特率高n倍。在同步通信时,波特率因子n必须等于1。


================================================


 


UART波特率配置:

UART模块中有四个UART波特率除数寄存器,分别是UBRDIV0,UBRDIV1,UBRDIV2和UBRDIV3。

存储在波特率除数寄存器(UBRDIVn)中的值:


DIV_VAL = UBRDIVn + (num of 1's in UDIVSLOTn)/16

 


PLCK:DIV_VAL = (PCLK / (bps x 16)) 

或者

SLCK_UART:DIV_VAL = (SCLK_UART / (bps x 16)) 


简单来说:


内部系统时钟源   PCLK

外部时钟源          SCLK_UART


 


其中,除数应该是从1到(216-1)。

使用 UDIVSLOT,可以更准确地生成波特率。

例如,如果波特率是 115200 bps,SCLK_UART 是 40 MHz,则 UBRDIVn 和 UDIVSLOTn 是:


DIV_VAL = (40000000 / (115200 x 16)) -1

= 21.7 -1

= 20.7


 


UBRDIVn = 20(DIV_VAL的整数部分)

(UDIVSLOTn中1的个数)/ 16 = 0.7  (21.7 小数点后为 0.7)

那么(UDIVSLOTn中的1的个数)= 11 (取整数部分)

所以,UDIVSLOTn 可以是16'b   1110_1110_1110_1010或 16'b 0111_0111_0111_0101 等


建议按照下表所述选择UDIVSLOTn,即 UDIVSLOTn = 0xDDD5 


回到我们自己的开发板上来:


我们在 《2》UART 模式控制寄存器 UCONn 中有提到 PCLK、SCLK_UART,其中的我们选择的是 PCLK。


 PCLK:DIV_VAL1) = (PCLK / (bps x 16) ) 


=============================================


其中 PCLK 的值是怎么得到的呢?


查看芯片手册 CLOCK DOMAINS (p-353) 


S5PV210由三个时钟域组成,即主系统(MSYS),显示系统(DSYS)和外设系统(PSYS),如图3-1所示。

•MSYS域包括Cortex A8处理器,DRAM内存控制器(DMC0和DMC1),3D内部SRAM(IRAM和IROM),INTC和配置接口(SPERI)。 Cortex A8仅支持同步模式,因此它必须与200MHz AXI总线同步运行。

•DSYS域包含显示相关模块,包括FIMC,FIMD,JPEG和多媒体IP(所有其他模块)在X,L和T块中提到的IP),如图3-1所示。

•PSYS域用于安全性,I / O外围设备和低功耗音频播放。

•每个总线系统分别工作在200 MHz(最大),166 MHz和133 MHz。 有异步总线桥(BRG)在两个不同的域之间。

在这里,得出 PCLK_PSYS 为 66 MHz。


=============================================


如果波特率是 115200 bps,PCLK 是 66 MHz,则 UBRDIV2 和 UDIVSLOT2 是:


 


DIV_VAL = (66000000 / (115200 x 16)) -1

= 35.8 -1

= 34


 


UBRDIV2 = 34(DIV_VAL的整数部分)

(UDIVSLOTn中1的个数)/ 16 = 0.8  (35.8  小数点后为 0.8)

那么(UDIVSLOTn中的1的个数)= 13  (四舍五入)


按照上表所述选择UDIVSLOT2,即 UDIVSLOT2 = 0xDFDD


(3)总结

《1》GPA1CON 寄存器  (配置寄存器) 将其配置成UART2收/发模式

GPA1CON 地址为 0xE020_0020


GPA1CON &= ~(0xff<<0);    //清空bit 0-7


GPA1CON |= 0x22;    //设置 0010 0010  接受 发送


《2》GPA1PUD 寄存器(上下拉电阻控制寄存器 )

GPA1PUD 地址为 0xE020_0028


GPA1PUD &= ~(0x0f<<0);  //0000 禁止上拉下拉


《3》UART 行控制器 ULCONn (数据位宽度为 8bit,停止位 1位,无校验位,正常模式)

ULCON2 地址为 0xE290_0800


ULCON2 = 0x03;


《4》UART 模式控制寄存器 UCONn(接收/发送模式选择轮询,正常发送暂停信号,回环模式为正常,时钟源选择 PCLK)

UCON2 地址为 0xE290_0804


UCON2 = 0x05;


《5》UART FIFO 控制寄存器UFCONn(禁止 FIFO)

UFCON2 地址为 0xE290_0808


UFC0N2 = 0X00;


《6》UART 收/发 状态寄存器 UTRSTATn(接收缓冲区数据准备好,缓冲区为空;发送缓冲区寄存器为空)

UTRSTAT2 地址为 0xE290_0810 


UTRSTAT2 = 0x02;


《7》UART 发送缓冲寄存器(保持寄存器和FIFO寄存器)UTXHn

UTXH2 地址为 0xE290_0820


char c = 'A';


UTXH2 = C;


《8》UART接收缓冲寄存器(保持寄存器和FIFO寄存器)URXHn

URXH2 地址为 0xE290_0824


char d;

d = URXH2 & 0xFF;


《9》UART 通道波特率分频寄存器 UBRDIVn(设置波特率为 115200)

UBRDIV2 地址为 0xE290_0828


UBRDIV2 = 34;


《10》UART通道分割插槽寄存器 UDIVSLOTn

UDIVSLOT2 地址为 0xE290_082C


UDIVSLOT2 = 0xDFDD;


四、编写驱动程序

 


此处用到关键字 volatile,参看:C语言再学习 -- 关键字volatile


和预处理器 #define,参看:C语言再学习 -- C 预处理器


对比:S5PV210开发 -- GPIO


(1)头文件 uart.h


#ifndef __UART_H__

#define __UART_H__

#define GPA1CON *((volatile unsigned int *)0xE0200020)

#define GPA1PUD *((volatile unsigned int *)0xE0200028)

#define ULCON2 *((volatile unsigned int *)0xE2900800)

#define UCON2 *((volatile unsigned int *)0xE2900804)

#define UFCON2 *((volatile unsigned int *)0xE2900808)

#define UTRSTAT2 *((volatile unsigned int *)0xE2900810)

#define UTXH2 *((volatile unsigned int *)0xE2900820)

#define URXH2 *((volatile unsigned int *)0xE2900824)

#define UBRDIV2 *((volatile unsigned int *)0xE2900828)

#define UDIVSLOT2 *((volatile unsigned int *)0xE290082C)

 

#define PCLK 66000000//66MHz

 

extern void uart0_init(void);

extern void uart_test(void);

extern void uart_putc(char );

extern void uart_puts(char *);

extern char uart_getc(void);

extern void uart_gets(char *, int);

 

#endif

(2)uart.c


#include "uart.h"

void uart2_init(void)

{

/*配置GPA1_0 GPA1_1管脚为uart功能*/

        //配置串口管脚

GPA1CON &= ~(0xff<<0);

GPA1CON |= 0x22;

        //禁止两个管脚内部上拉下拉电阻

GPA1PUD &= ~(0x0f<<0);

//配置串口寄存器

/*8N1 115200 轮询*/

ULCON2 = 0x03;

UCON2 = 0x05;

UFCON2 = 0x00;

UBRDIV2 = PCLK/(115200*16) - 1;

/*reference P879*/

UDIVSLOT2 = 0xDFDD;

}

 

void uart_putc(char c)

{

/*判断UTXH2中是否为空

* UTRSTAT2 bit2 1,空

                 0,非空

*/

while(!(UTRSTAT2 & 0x02)) ;

UTXH2 = c;

if(c == 'n')

{

uart_putc('r');

}

}

void uart_puts(char *s)

{

while(*s)

[1] [2]
关键字:S5PV210  串口  驱动开发 引用地址:S5PV210开发 -- 串口驱动开发

上一篇:S5PV210开发 -- UART 详解
下一篇:S5PV210开发 -- TTL和CMOS电平

推荐阅读

据报道,迈阿密闹市区酒店YotelPad(尚未完工的30层高多功能综合开发项目)将引入3个机器人管家,以便为住户和客人提供服务。这些机器人长得不像人类,但它们被编程来执行通常由人类来完成的任务,比如送餐服务、播放音乐,甚至是与客人交谈。总部位于新加坡的Techmetics公司制造了这些机器人。该公司夸口称,它的机器人还被100多家赌场和医院“雇佣”。在...
都说学习嵌入式的基础是 C语言+数据结构+一款CPU体系结构。其中对于我来说第一掌握了C语言、第二熟悉UNIX操作系统和数据结构与算法,第三有针对TI和海思板卡的软硬件开发经验,然后熟悉图像和流媒体技术等。所以接下来的总结会根据培训时的进度分 ARM、系统移植、驱动开发 这三部分来讲。了解完硬件设计篇、开发基础篇、系统移植篇,会优先搭建 Andro...
近日科技「狂人」马斯克旗下脑机接口公司 Neuralink 举办发布会,发布会上首次公开可植入脑部的 Neuralink 设备和操作植入手术的机器人,并现场用小猪展示这项技术。现场展示了一头植入 Neuralink 设备的猪,名为 Gertrude。它在两个月前被植入 Neuralink 设备,目前状态良好。该项目旨在通过植入设备解决如瘫痪、抑郁、毒瘾等脑部和脊椎损伤问题...
广告摘要声明广告8月23日,2021 中国国际智能产业博览会(以下简称智博会)在重庆盛大开幕。华数机器人自主研发的新品JH615/JH620大中空手腕机器人在2021线上智博会重磅发布。华数机器人凭借多年的技术经验积累,直击制造业痛点,研发出覆盖焊接、打磨去毛刺、搬运等多个应用领域的“三合一”机器人,全面满足制造业多种需求,显着降低备货压力,便于企业...

史海拾趣

问答坊 | AI 解惑

紧急求助关于遥控器的!拜谢各位!

请教各位大侠知道怎么设计一个遥控器电路图不? 有那几个步骤,介绍点什么书籍啊! 在下万分感谢…

查看全部问答∨

专业英语--电力电子方面

Absorber Circuit 吸收电路 AC/AC Frequency Converter 交交变频电路 AC power control 交流电力控制 AC Power Controller 交流调功电路 AC Power Electronic Switch 交流电力电子开关 Ac Voltage Controller ...…

查看全部问答∨

一个听起来比较炫的玩意——夜间彩色画面的摄像机

随着人们生活水平的提高,甲方客户也看厌了黑白画面的摄像机,夜间彩色的需求随之而起,因此夜间彩色的摄像机成为各个设备制造商研究发展的方向,现在实现夜间彩色画面的摄像机主要有以下几种: A.利用原来的摄像机处理技术加上白光灯,从而实现 ...…

查看全部问答∨

keil的调试问题

使用keil调试程序,一全速执行,就弹出C:\\Documents and Settings\\Administrator\\桌面 这是为啥呀…

查看全部问答∨

【高分求问,十万火急】谁研究过将ADS1.2编译的库和arm-elf-gcc编译的库混编(互相调用)的问题???

如题,最近被要求研究ADS1.2和arm-elf-gcc 两种编译器编译的库能否链接在一起工作和调试的问题; 也就是EABI的问题,我研究了一会,似乎gcc编译的库是EABI2.0 而ads编译的库EABI的版本号是0啊!! 哪位大侠研究过这个问题吗? 任何正确的提示、 ...…

查看全部问答∨

温度传感器的材质有哪些?

温度传感器的材质有哪些? 对于腐蚀类的大家会选什么材料?…

查看全部问答∨

L298能驱动额定电流为1.5A的57步进电机吗?

芯片L298最大电压为50V,电流2A,峰值为4A。如图,A\\B\\C\\D端用51单片机输入信号端,A1\\B1\\C1\\D1为输出端,也就是接步进电机的,用这个驱动器驱动只有零点几安的小四相步进电机没有问题,我想驱动一下大点的电机,比如57步进电机,3A的可能不 ...…

查看全部问答∨

可编程蓄电池快充电控制芯片bq2000

做了个对讲机电池充电器,用的TI的推荐设计。为什么充电到最后,总是红绿灯交替闪烁。一直处于涓流充电状态呢  …

查看全部问答∨

PID算法问题

用AD采样后,有一个数字量,现在要用PID…

查看全部问答∨

不知道怎样初始化xx2799,从而可以用g2553读取键值,实现相应功能,求大神帮忙

不知道怎么弄基于msp430g2553来检测xx2799按键的程序,知道x2799有按键按下,key引脚拉低,键值存到寄存器reg_keyvaluey里,但不知道怎样初始化xx2799,从而可以用g2553读取键值,实现相应功能…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved