Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parYOUSSEF ARKAM Modifié depuis plus de 7 années
1
UBC104 Embedded Systems Review: Interrupts & Timers
2
UBC 104 Embedded Systems 2 Block Diagram
3
UBC 104 Embedded Systems 3 Interrupts Definition of ‘Interrupt’ Event that disrupts the normal execution of a program and causes the execution of special instructions
4
UBC 104 Embedded Systems 4 Interrupt Handling Code that deals with interrupts: Interrupt Handler or Interrupt Service Routines (ISRs) Possible code: void ISR(void) interrupt 1 { ++interruptcnt; } Interrupt number
5
UBC 104 Embedded Systems 5 Interrupt Overheads Interrupt arrives Complete current instruction Save essential register information Vector to ISR Save additional register information Execute body of ISR Restore other register information Return from interrupt and restore essential registers Resume task Interrupt Latency Interrupt Termination
6
UBC 104 Embedded Systems 6 SFR Map – Timer
7
UBC 104 Embedded Systems 7 Timer Code void TimerInit(void) { T2CON=0x04;// Load Timer 2 control register TH2=0xFC; // Load Timer 2 high byte RCAP2H=0xFC;// Load Timer 2 reload capt. reg. high byte TL2=0x18;// Load Timer 2 low byte RCAP2L=0x18;// Load Timer 2 reload capt. reg. low byte ET2 = 1; // Enable interrupt TR2 = 1;// Start Timer 2 running } void handleTimer2 (void) interrupt 5 { /* execute interrupt code */ } Initialization Start of Timer Interrupt Service Routine
8
UBC 104 Embedded Systems 8 Calculation of Register Settings Oscillator = 24 MHz Timer clock= (24 / 12) MHz = 2 MHz Timer cycle = = 500ns Delay count = delay time / cycle time 1 ms / 500 ns = 2000 Base number= 2 13 -2000 = 8192-2000 = 6192 = 0x1830 2 MHz 1
9
UBC 104 Embedded Systems 9 Summary: Interrupts & Timers Interrupts: Event that disrupts the normal execution of a program and causes the execution of special instructions Interrupt Latency: Time from event to execution of service routine Interrupt Response Time: Interrupt latency + Time for service routine Interrupt Termination: Time taken after interrupt service routine Timer: Counter that causes interrupt at overflow
10
UBC104 Embedded Systems RS232 Communication
11
UBC 104 Embedded Systems 11 Overview Basics of serial communications RS232 details 8051-support for serial communication
12
UBC 104 Embedded Systems 12 SFR Map – UART Registers
13
UBC 104 Embedded Systems 13 UART Registers
14
UBC 104 Embedded Systems 14 Serial Interface Basics Also called Universal Asynchronus Receiver/ Transmitter (UART) or after the I standards: RS232 (-C) or EIA232
15
UBC 104 Embedded Systems 15 Serial Interface Basics also called Universal Asynchronus Receiver/ Transmitter (UART) or the relevant standards: RS232 (-C) or EIA232 2 Receive Data 3 Transmit Data 5 Signal Ground
16
UBC 104 Embedded Systems 16 Typical 3-wire Interface 3 2 2 3 5 5
17
UBC 104 Embedded Systems 17 uController Pin-Out
18
UBC 104 Embedded Systems 18 RS232 Signals Signals between +25V and -25V; some say ±15V usually +12V to -12V
19
UBC 104 Embedded Systems 19 RS232 Signals Signals between +25V and -25V; some say ±15V usually +12V to -12V Logic ‘1’ Logic ‘0’
20
UBC 104 Embedded Systems 20 RS232 Signals Signals between +25V and -25V; some say ±15V usually +12V to -12V
21
UBC 104 Embedded Systems 21 RS232 Signals Signals between +25V and -25V; some say ±15V usually +12V to -12V 8051 runs on 3V or 5V
22
UBC 104 Embedded Systems 22 RS232 Signals Signals between +25V and -25V; some say ±15V usually +12V to -12V 8051 runs on 3V or 5V Driver chip translates between voltages
23
UBC 104 Embedded Systems 23 Valid Signals
24
UBC 104 Embedded Systems 24 Valid Signals Figure courtesy of http://www.camiresearch.com
25
UBC 104 Embedded Systems 25 MCBx51 Board TX0 RX0 2 3
26
UBC 104 Embedded Systems 26 Basic 3-Wire Connection of Machines TXD GND RXD
27
UBC 104 Embedded Systems 27 Basic 3-Wire Connection of Machines What goes over these wires? TXD GND RXD
28
UBC 104 Embedded Systems 28 RS-232 Frame Every RS-232 consists of: 1 start bit 8 data bits 1 stop bit (optional 1 parity bit)
29
UBC 104 Embedded Systems 29 RS-232 Frame StartD0D1D2D3D4D5D6D7Stop Every RS-232 consists of: 1 start bit 8 data bits 1 stop bit (optional 1 parity bit)
30
UBC 104 Embedded Systems 30 RS-232 Frame StartD0D1D2D3D4D5D6D7Stop Every RS-232 consists of: 1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = 0110 0001
31
UBC 104 Embedded Systems 31 RS-232 Frame StartD0D1D2D3D4D5D6D7Stop 1 1 Every RS-232 consists of: 1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = 0110 0001 1 0
32
UBC 104 Embedded Systems 32 RS-232 Frame StartD0D1D2D3D4D5D6D7Stop 1 1 1 1 0 Every RS-232 consists of: 1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = 0110 0001 1 0
33
UBC 104 Embedded Systems 33 RS-232 Frame StartD0D1D2D3D4D5D6D7Stop 1 1 1 1 0 1 0 0 0 0 1 1 0 Every RS-232 consists of: 1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = 0110 0001 1 0
34
UBC 104 Embedded Systems 34 RS-232 Frame StartD0D1D2D3D4D5D6D7Stop 1 1 1 1 0 1 0 0 0 0 1 1 0 0 Every RS-232 consists of: 1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = 0110 0001 1 0
35
UBC 104 Embedded Systems 35 RS-232 Frame StartD0D1D2D3D4D5D6D7Stop 1 1 1 1 0 1 0 0 0 0 1 1 0 0 1 1 Every RS-232 consists of: 1 start bit 8 data bits 1 stop bit (optional 1 parity bit) ‘a’= 0x61 = 0110 0001 1 0
36
UBC 104 Embedded Systems 36 Signal Timing 1 1 1 1 0 1 0 0 0 0 1 1 0 0 1 1 1 1 StartD0D1D2D3D4D5D6D7Stop ?
37
UBC 104 Embedded Systems 37 Signal Timing (continued) 1 1 1 1 0 1 0 0 0 0 1 1 0 0 1 1 1 1 StartD0D1D2D3D4D5D6D7Stop ? bit period
38
UBC 104 Embedded Systems 38 Baud Rate Baud specifies the inverse of the bit-period e.g. 9600 Baud = a bit-period of 1/9600 second = 104.2 microseconds Typicall data rates: 75, 110, 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 33600, 56000, 115000 and (rarely) 330000 baud.
39
UBC 104 Embedded Systems 39 Serial I/O with bare hands #define BIT_PERIOD 1042 sendByte(unsigned char content) { unsigned char mask; mask= 1; P3.1= 0; // Start bit wait (BIT_PERIOD); for (i= 0; i<8; i++) {// Send content P3.1= (content&mask) ? 1 : 0; wait (BIT_PERIOD); mask<= 1; } P3.1= 0;// Stop bit wait (BIT_PERIOD); P3.1= 1; }
40
UBC 104 Embedded Systems 40 Serial I/O with bare hands #define BIT_PERIOD 1042 sendByte(unsigned char content) { unsigned char mask; mask= 1; P3.1= 0; // Start bit wait (BIT_PERIOD); for (i= 0; i<8; i++) {// Send content P3.1= (content&mask) ? 1 : 0; wait (BIT_PERIOD); mask<= 1; } P3.1= 0;// Stop bit wait (BIT_PERIOD); P3.1= 1; }
41
UBC 104 Embedded Systems 41 Serial I/O with bare hands #define BIT_PERIOD 1042 sendByte(unsigned char content) { unsigned char mask; mask= 1; P3.1= 0; // Start bit wait (BIT_PERIOD); for (i= 0; i<8; i++) {// Send content P3.1= (content&mask) ? 1 : 0; wait (BIT_PERIOD); mask<= 1; } P3.1= 0;// Stop bit wait (BIT_PERIOD); P3.1= 1; } You do not need to do this!!!
42
UBC 104 Embedded Systems 42 UART modes Mode 0: 8 data bits (LSB first) are transmitted/received at a fixed baud rate of 1/12 of the oscillator frequency. (synchronus mode)
43
UBC 104 Embedded Systems 43 UART modes Mode 0: 8 data bits (LSB first) are transmitted/received at a fixed baud rate of 1/12 of the oscillator frequency. (synchronus mode) Mode 1: 10 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), and a stop bit (1) at a variable baud rate.
44
UBC 104 Embedded Systems 44 UART modes Mode 0: 8 data bits (LSB first) are transmitted/received at a fixed baud rate of 1/12 of the oscillator frequency. (synchronus mode) Mode 1: 10 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), and a stop bit (1) at a variable baud rate. Mode 2: 11 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), a programmable 9th data bit, and a stop bit (1). On transmit, the 9th data bit (TB8 in SCON) can be assigned the value of 0 or 1 (for example, the parity bit (P, in the PSW) could be moved into TB8). On receive, the 9th data bit goes into RB8 in Special Function register SCON. The baud rate is programmable to either 1/32 or 1/64 the oscillator frequency. Mode 3: Mode 3 is the same as Mode 2 in all respects except the baud rate is variable.
45
UBC 104 Embedded Systems 45 UART modes Mode 0: 8 data bits (LSB first) are transmitted/received at a fixed baud rate of 1/12 of the oscillator frequency. (synchronus mode) Mode 1: 10 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), and a stop bit (1) at a variable baud rate. Mode 2: 11 bits are transmitted (through TXD) or received (through RXD): a start bit (0), 8 data bits (LSB first), a programmable 9th data bit, and a stop bit (1). On transmit, the 9th data bit (TB8 in SCON) can be assigned the value of 0 or 1 (for example, the parity bit (P, in the PSW) could be moved into TB8). On receive, the 9th data bit goes into RB8 in Special Function register SCON. The baud rate is programmable to either 1/32 or 1/64 the oscillator frequency. Mode 3: Mode 3 is the same as Mode 2 in all respects except the baud rate is variable. Mode 0 Baud Rate = 12 Oscillator Frequency Mode 2 Baud Rate = 2 SMOD1 x 64 Oscillator Frequency Mode 1/3 Baud Rate = 2 SMOD1 x 32 Timer Overflow Rate
46
UBC 104 Embedded Systems 46 SMOD1 SMOD1: Double Baud rate SMOD0: Enables framing error detection
47
UBC 104 Embedded Systems 47 Framing Error Detection
48
UBC 104 Embedded Systems 48 Timer 1 http://www.keil.com/c51/baudrate.asp Mode 1/3 Baud Rate = 2 SMOD1 x 32 Timer Overflow Rate Mode 1/3 Baud Rate = 12 x [256 – TH1] Oscillator Frequency 2 SMOD1 x 32 Baud Rate [256 – TH1] = Oscillator Frequency 2 SMOD1 x 3212 x Baud Rate TH1 = 256 – Oscillator Frequency 2 SMOD1 x 3212 x
49
UBC 104 Embedded Systems 49 Timer 1 Commonly Used BAUD Rates
50
UBC 104 Embedded Systems 50 SCON Documentation
51
UBC 104 Embedded Systems 51 SCON & SBUF SCON controls the functionality of the UART device: SM0&SM1= Determine the mode SM2= Multiprocessor Flag REN= Receive Enable Flag TB8/RB8= Transmit/Receive Parity Flag TI/RI = Transmit/Receive Interrupt Flag SBUF is the transmit&receive buffer
52
UBC 104 Embedded Systems 52 SBUF SBUF is actually two separate registers: a transmit buffer and a receive buffer register: When data is moved to SBUF, it goes to the transmit buffer where it is held for serial transmission; moving a byte to SBUF initiates the transmission. When data is moved from SBUF, it comes from the receive buffer.
53
UBC 104 Embedded Systems 53 SBUF and TI/RI 8 data SBUF 8 TI Stop bit Start bit Send 8-bit data Transmitter Buffer is empty 10 bit parallel to serial conversion Serial data transmit TRANSMITTER HALF 8 data bits start bit stop bit Tx bit 8 data SBUF 8 RI Start bit Stop bit Receive 8-bit data Receive data is available 10 bit serial to parallel conversion Serial data receive RECEIVER HALF 8 data bits stopstart Rx
54
UBC 104 Embedded Systems 54 SBUF and Parity Bit in TB8/RB8
55
UBC 104 Embedded Systems 55 Timer 1 Example 1.Set T1 for Mode 2 2.Load TH1 with the initial value 3.Set SCON for Mode 1 4.Start Timer1 5.Clear TI 6.Load SBUF with the byte to be transferred 7.Wait until TI becomes 1 8.Go back to Step5 for next byte TCON= 0x20; TH1= 0xF5; SCON|= 0x50; TR1= 1; TI= 0; do { SBUF= byte[i]; while (!TI); } while(more_bytes);
56
UBC 104 Embedded Systems 56 Timer 1 Example (continued) 1.Set T1 for Mode 2 2.Load TH1 with the initial value 3.Set SCON for Mode 1 4.Start Timer1 5.Clear RI 6.Wait for byte to be received 7.Copy received byte out of SBUF 8.Return received byte TCON= 0x20; TH1= 0xF5; SCON|= 0x50; TR1= 1; RI= 0; while (!RI); result= SBUF; return SBUF;
57
UBC 104 Embedded Systems 57 Possible Configurations
58
UBC 104 Embedded Systems 58 T2CON Documentation
59
UBC 104 Embedded Systems 59 Timer 2 Commonly Used BAUD Rates
60
UBC 104 Embedded Systems 60 Timer 2 Calculation Mode 1/3 Baud Rate = 32 x [65536 – (RCAP2H, RCAP2L)] Oscillator Frequency Baud Rate (RCAP2H,RCAP2L) = 65535 – Oscillator Frequency 32 x
61
UBC 104 Embedded Systems 61 Timer2 Example 1.Set T1 for Mode 2 2.Load RCAP high/low with the initial value 3.Set SCON for Mode 1 4.Start Timer1 5.Clear TI 6.Load SBUF with the byte to be transferred 7.Wait until TI becomes 1 8.Go back to Step5 for next byte T2CON|= 0x30; RCAP2H = 0xFF; RCAP2L = 0xB2; SCON|= 0x50; TR2= 1; TI= 0; do { SBUF= byte[i]; while (!TI); } while(more_bytes);
62
UBC 104 Embedded Systems 62 Internal Baud-Rate Generator
63
UBC 104 Embedded Systems 63 BDRCON
64
UBC 104 Embedded Systems 64 Using BRL to Transmit 1.Set T1 for Mode 2 2.Load TH1 with the initial value 3.Set SCON for Mode 1 4.Start Timer1 5.Clear TI 6.Load SBUF with the byte to be transferred 7.Wait until TI becomes 1 8.Go back to Step5 for next byte BDRCON= 0x0E; BRL= 0xF5; SCON|= 0x50; BDRCON|= 0x10; TI= 0; do { SBUF= byte[i]; while (!TI); } while(more_bytes);
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.