本帖最后由 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
可以这么认为 |