打印
[菜农群课笔记]

菜农QQ群课:《uart 零耗时》

[复制链接]
5543|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
859419016|  楼主 | 2011-1-15 00:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
UART, TE, dc, TI, se
本帖最后由 hotpower 于 2011-3-20 02:50 编辑

群课:《uart 零耗时》
菜农Cortex-M0技术交流群:12047788



雁塔菜农(1270688699) 22:29:31
等会再想标题吧
雁塔菜农(1270688699) 22:29:34
开始
Hot才子(4409043) 22:29:52
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/U(T)~N%25P9@AN%7D%60JK~)EL961.gif,蛋腚 蛋腚
雁塔菜农(1270688699) 22:29:54
首先要搞明白什么是“零耗时”
神(471661781) 22:30:02

agllero(859419016) 22:30:10
不墨迹
agllero(859419016) 22:30:17
不折腾
雁塔菜农(1270688699)
神(471661781) 22:31:03
菜农哥~给力啊~
雁塔菜农(1270688699) 22:31:08
它是不用传统的while()等待UART发送的结束
神(471661781) 22:31:22

雁塔菜农(1270688699) 22:31:31
如何才能做到呢???
依心爱婷(122607939) 22:31:42
中断
A廷(81231489) 22:31:47
刚上Q正赶上听课
雁塔菜农(1270688699) 22:32:07
可能大家在N年前已经听过菜农的“零耗时键盘”了
李冬发(632653918) 22:32:37
俺的差不多都是0耗时的了。
雁塔菜农(1270688699) 22:32:52
那么昨天是I2C零耗时的课,今天是UART零耗时的课
李冬发(632653918) 22:32:52
那个键盘,那串口,那个IO
熊熊(191144254) 22:33:01
0.0
雁塔菜农(1270688699) 22:33:13
再过几天就是1-Wire的零耗时课
神(471661781) 22:33:20

神(471661781) 22:33:29
有精编版么
agllero(859419016) 22:33:33
1-Wire是啥
雁塔菜农(1270688699) 22:33:35
再就是SPI零耗时的课
A廷(81231489) 22:33:41
昨天的课,有记录没?
雁塔菜农(1270688699) 22:33:45
单总线
心境(493076678) 22:33:54
DS18B20
雁塔菜农(1270688699) 22:33:58
DS28B20
A廷(81231489) 22:34:09
重点uart和i2c,spi,这三个用的最多
神(471661781) 22:34:11
额2?
雁塔菜农(1270688699) 22:34:15
DS2410,DS1990A,DS.....
agllero(859419016) 22:34:24
[img]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/)~QA%ZD`05ZB]U[4_B3N7C4.gif[/img]
雁塔菜农(1270688699) 22:34:49
一切皆有零耗时的可能
神(471661781) 22:34:51
给力啊菜农哥
心境(493076678) 22:35:04
DS28B20是DS18B20的升级版吗
雁塔菜农(1270688699) 22:35:22
哈哈~~~写错了
神(471661781) 22:35:22
上课的话是不是还要点
雁塔菜农(1270688699) 22:35:57
不多
神(471661781) 22:36:03
是的
李冬发(632653918) 22:36:02
28xx
神(471661781) 22:36:11
24XX
李冬发(632653918) 22:35:51
[img]file:///D:/Program%20Files/Tencent/TM2009/Users/859419016/Image/8wy]dgp4}0b)mir}p[m)4jg.gif[/img]
神(471661781) 22:36:25
哈哈哈哈哈
神(471661781) 22:36:34
菜农给力啊
心境(493076678) 22:36:39
给力。。
雁塔菜农(1270688699) 22:36:42
俺这次的助学开发板上就有DS18B20的零耗时硬件电路
神(471661781) 22:36:56
呵呵
雁塔菜农(1270688699) 22:36:57
必须有硬件支持
神(471661781) 22:37:01
额??
神(471661781) 22:37:09
[img]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/HRCA4]0][EJS0@KU~F7@DLI.gif[/img]
心境(493076678) 22:37:10
零耗时概念还不清楚。。。
雁塔菜农(1270688699) 22:37:13
现在只说uart
A廷(81231489) 22:37:19
有没有图,硬件要怎么支持?
To believe(61915491) 22:37:18
很玄乎
心境(493076678) 22:37:24
有点
mcu234(109812091) 22:37:31
准备坦克
神(471661781) 22:37:32
nonono是很邪乎~~~
mcu234(109812091) 22:37:37
准备听课
雁塔菜农(1270688699) 22:37:50
先发个PIC24的例程
To believe(61915491) 22:37:48
能不能挣点文档看看

雁塔菜农(1270688699) 22:37:52
#include "uart.h"
volatile char TxBuffers[256];
volatile char RxBuffers[256];

volatile unsigned char TxWriteCount;
volatile unsigned char TxReadCount;
volatile unsigned char RxWriteCount;
volatile unsigned char RxReadCount;

/*------------------------------------------------------------------------
    蓝牙串口1初始化程序
-------------------------------------------------------------------------*/
void UartInit(void)
{
RPINR18bits.U1RXR = 18;//RX1 RP18
RPOR14bits.RP28R = 3;//TX1    RP28
U1MODE = 0;
// U1MODEbits.STSEL   = 0;//1-stop bit
// U1MODEbits.PDSEL   = 0;//No Parity, 8-data bits
// U1MODEbits.ABAUD   = 0;//Autobaud Disabled
U1STA = 0;
// U1STAbits.UTXISEL0 = 0; // Interrupt after one Tx character is transmitted
// U1STAbits.UTXISEL1 = 0;                             
// U1STAbits.URXISEL  = 0; // Interrupt after one RX character is received
U1BRG = BRGVAL1;//BAUD Rate Setting for 19200
U1MODEbits.WAKE    = 1;//启动位时唤醒使能位
U1MODEbits.UARTEN  = 1;// Enable UART
U1STAbits.UTXEN    = 1;// Enable UART Tx
/*------------------------------------------------------------------------
    定义蓝牙串口1中断优先级位110)
-------------------------------------------------------------------------*/
IPC2bits.U1RXIP0 = 0;
IPC2bits.U1RXIP1 = 1;
IPC2bits.U1RXIP2 = 1;
IEC0bits.U1RXIE = 1;
IFS0bits.U1RXIF = 0;//清除RX1中断标志
IEC0bits.U1TXIE = 1;
IFS0bits.U1TXIF = 0;//清除TX1中断标志
}

void UartSendBuffer(char buff[], unsigned char len)
{
unsigned char i;
for (i = 0; i < len; i ++)
{
TxBuffers[TxWriteCount ++] = buff;
}
IFS0bits.U1TXIF = 1;//UART1进入发送状态
}

void UartSendCommand0(void)
{
static char SendCommandString[] = "0123456789ABCDEF";
UartSendBuffer(SendCommandString, sizeof(SendCommandString));//发送MP3串口数据命令
}

雁塔菜农(1270688699) 22:38:28
这是uart的初始化和发送部分
雁塔菜农(1270688699) 22:38:50
#include "main.h"

#ifndef __UART_H
#define __UART_H

#define BAUDRATE1 19200//MP3               
#define BRGVAL1   ((FCY/BAUDRATE1)/16)-1

#define BAUDRATE2 19200//GPS               
#define BRGVAL2   ((FCY/BAUDRATE2)/16)-1


void UartInit(void);
void UartSendBuffer(char buff[], unsigned char len);
void UartSendCommand0(void);

extern volatile char TxBuffers[256];
extern volatile char RxBuffers[256];

extern volatile unsigned char TxWriteCount;
extern volatile unsigned char TxReadCount;
extern volatile unsigned char RxWriteCount;
extern volatile unsigned char RxReadCount;

#endif//__UART_H

雁塔菜农(1270688699) 22:39:01
这是头文件
雁塔菜农(1270688699) 22:39:41
/*------------------------------------------------------------------------
                   蓝牙串口1接收中断服务程序
-------------------------------------------------------------------------*/
void __attribute__((interrupt, no_auto_psv)) _U1RXInterrupt( void )
{
//static unsigned char cData = 0, cPosition = 0, cCheckSum = 0;
//static unsigned int cLength = 0;
unsigned int ch;
if (IFS0bits.U1RXIF)
{
      IFS0bits.U1RXIF = 0;//清除RX1中断标志
if (IEC0bits.U1RXIE)//MP3串口1接收中断已被允许
{
ch = U1RXREG;//读取串口MP3数据
RxBuffers[RxReadCount ++] = ch;
}
}
}

/*------------------------------------------------------------------------
                   蓝牙串口1发送中断服务程序
-------------------------------------------------------------------------*/
void __attribute__((interrupt, no_auto_psv)) _U1TXInterrupt( void )
{
if (IFS0bits.U1TXIF)
{
  IFS0bits.U1TXIF = 0;//清除TX1中断标志
if (IEC0bits.U1TXIE)//MP3串口1发送中断已被允许
{
if (TxWriteCount != TxReadCount)
{
U1TXREG = TxBuffers[TxReadCount ++];//读出数据并发送出去
}
}
}
}


雁塔菜农(1270688699) 22:40:00
这是收发的中断服务程序
雁塔菜农(1270688699) 22:40:15
三部分程序发送完毕
神(471661781) 22:40:21
明白了
雁塔菜农(1270688699) 22:40:32
俺主要讲讲如何实现
To believe(61915491) 22:40:33
恩,慢慢看,pll怎么设定?请教,例如:我要内置22m,pll到50m,怎么设定啊,谢谢!!

神(471661781) 22:40:38
关键是利用中断
雁塔菜农(1270688699) 22:40:55
网上实际有俺AVR和ARM7的实现的源码
A廷(81231489) 22:40:57
这么说零耗时,也要硬件支持
雁塔菜农(1270688699) 22:41:18
主要是硬件中断
李冬发(632653918) 22:41:24
“0耗时”是相对于查询来说的。
熊熊(191144254) 22:41:33
貌似零耗时就是硬件+中断
雁塔菜农(1270688699) 22:41:47
OS为何可行???主要由节拍中断
To believe(61915491) 22:41:56
我更喜欢查询
雁塔菜农(1270688699) 22:42:00
可以这么认为

相关帖子

沙发
hotpower| | 2011-1-15 00:51 | 只看该作者
哈哈,惯例:裤子一条

使用特权

评论回复
板凳
李冬发| | 2011-1-15 01:00 | 只看该作者
怎么自己给自己加裤子的呢

使用特权

评论回复
地板
hotpower| | 2011-1-15 01:02 | 只看该作者
哈哈,是记录官。

俺是版主,有权更改他的内容~~~

使用特权

评论回复
5
hotpower| | 2011-1-15 01:23 | 只看该作者

使用特权

评论回复
6
hotpower| | 2011-1-15 05:06 | 只看该作者
迷糊开始

使用特权

评论回复
7
MegaChip| | 2011-1-15 09:40 | 只看该作者
既然公开了,能否整理成个PDF或其他文本文件,QQ发言看的迷糊。
呵呵。
顶。

使用特权

评论回复
8
fangfly| | 2011-1-15 10:10 | 只看该作者
什么是零耗时?
volatile 用法
什么是“滚筒洗衣机”
手动触发发送中断

好像就这么几个点,菜农有空整理成文档吧

使用特权

评论回复
9
6019赵文| | 2011-1-15 12:25 | 只看该作者
我怎么总是看不懂呢?菜鸟啊

使用特权

评论回复
10
lou270019401| | 2011-1-15 12:35 | 只看该作者
什么意思是啊

使用特权

评论回复
11
无冕之王| | 2011-1-15 15:56 | 只看该作者
菜农得先普及一下什么是“零耗时”,有啥重要意义:lol

使用特权

评论回复
12
xsgy123| | 2011-1-15 18:02 | 只看该作者
能再整理整理就好了

使用特权

评论回复
13
黑发尤物| | 2011-1-15 23:27 | 只看该作者
对,看着有点乱

使用特权

评论回复
14
hsbjb| | 2011-1-16 12:17 | 只看该作者
不太明白零耗时这个概念

使用特权

评论回复
15
imjacob| | 2011-1-16 20:15 | 只看该作者
《uart 零耗时 》这个名字起的真是太 夸张,我估计意思就是 实时 。用中断实现,而不是查询。
菜农的**风格怎么那么怪?我感觉,你这样写,懂的人看了后还是懂,不懂的人看了后还是不懂

使用特权

评论回复
16
hotpower| | 2011-1-17 14:08 | 只看该作者
没夸张呀,它实现了软件dma,不操心就不耗时……

使用特权

评论回复
17
oumeng| | 2011-7-18 08:09 | 只看该作者
学习学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

30

帖子

1

粉丝