Transcript Slide 1

Lab 2
energy consumption,
wireless chat
Thomas Watteyne
EE290Q – Spring 2010
http://wsn.eecs.berkeley.edu/290Q
2
Simple Tx/Rx
Init MSP430 (clock,
leds, button)
Init CC2500 (pins,
SPI, registers)
Start CC2500 oscill.
(IDLE state)
Length (1B)
Executed when
packet received
(“meta” interrupt
declaration)
copy to cc2500
TXFIFO and send
txrx_simple
#include "mrfi.h"
int main(void)
{
BSP_Init();
P1REN |= 0x04;
P1IE |= 0x04;
MRFI_Init();
CC2500 to RX state
MRFI_WakeUp();
MRFI_RxOn();
__bis_SR_register(GIE+LPM4_bits);
low power mode,
}
Source
(4B)
Destination (4B) Payload (Length-8 bytes long)
waiting for
void MRFI_RxCompleteISR()
{
interrupts
P1OUT ^= 0x02;
Executed when
}
button pushed
#pragma vector=PORT1_VECTOR
__interrupt void Port_1 (void)
{
clear button interrupt flag
P1IFG &= ~0x04;
declare packet w. max length
mrfiPacket_t packet;
packet.frame[0]=8+20;
declare useful length
MRFI_Transmit(&packet, MRFI_TX_TYPE_FORCED);
P1OUT ^= 0x01;
}
3
Change Channel
txrx_simple
#include "mrfi.h"
int main(void)
#include "radios/family1/mrfi_spi.h"
{
BSP_Init();
P1REN |= 0x04;
P1IE |= 0x04;
MRFI_Init();
mrfiSpiWriteReg(CHANNR,0x10);
MRFI_WakeUp();
MRFI_RxOn();
__bis_SR_register(GIE+LPM4_bits);
}
void MRFI_RxCompleteISR()
{
P1OUT ^= 0x02;
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1 (void)
Removing this line
{
cause continuous
P1IFG &= ~0x04;
transmissions
mrfiPacket_t packet;
packet.frame[0]=8+20;
MRFI_Transmit(&packet, MRFI_TX_TYPE_FORCED);
P1OUT ^= 0x01;
}
4
Continuous Transmission
5
Change Transmission Power
txrx_simple
#include "mrfi.h"
int main(void)
#include "radios/family1/mrfi_spi.h"
{
BSP_Init();
P1REN |= 0x04;
P1IE |= 0x04;
MRFI_Init();
mrfiSpiWriteReg(PATABLE,0xFF);
MRFI_WakeUp();
MRFI_RxOn();
__bis_SR_register(GIE+LPM4_bits);
}
void MRFI_RxCompleteISR()
{
P1OUT ^= 0x02;
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1 (void)
{
P1IFG &= ~0x04;
mrfiPacket_t packet;
packet.frame[0]=8+20;
MRFI_Transmit(&packet, MRFI_TX_TYPE_FORCED);
P1OUT ^= 0x01;
}
6
Impact of Transmission Power
setting
power
current
0X84
-24dBm
16.1mA
0x55
-16dBm
16.5mA
0x97
-10dBm
18.3mA
0xA9
-4dBm
22.6mA
0xFE
0dBm
27.6mA
0xFF
1dBm
27.9mA
7
Wireless Chat [1/3]
Enable UART
txrx_chat
#include "radios/family1/mrfi_spi.h"
#include "mrfi.h"
uint8_t index_output = 9;
mrfiPacket_t packetToSend;
int main(void)
{
BSP_Init();
MRFI_Init();
P3SEL |= 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 = UCSSEL_2; // SMCLK
UCA0BR0 = 0x41; // 9600 from 8Mhz
UCA0BR1 = 0x3;
UCA0MCTL = UCBRS_2;
UCA0CTL1 &= ~UCSWRST; // Initialize USCI state machine
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
MRFI_WakeUp();
MRFI_RxOn();
index_output=0;
__bis_SR_register(GIE+LPM4_bits);
}
8
Wireless Chat [2/3]
when received a
packet
Copy RXFIFO
into “packet”
newline
(for PuTTY)
txrx_chat
void MRFI_RxCompleteISR()
{
uint8_t i;
P1OUT ^= 0x02;
mrfiPacket_t packet;
MRFI_Receive(&packet);
char output[] = {"
"};
for (i=9;i<29;i++) {
output[i-9]=packet.frame[i];
if (packet.frame[i]=='\r') {
output[i-9]='\n';
output[i-8]='\r';
}
}
TXString(output, (sizeof output));
}
write over serial port
9
Wireless Chat [3/3]
when received
one character
over serial port
copy to TXFIFO,
trigger Tx
re-initialize
txrx_chat
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
copy serial input
{
buffer to “rx”
char rx = UCA0RXBUF;
Append to the
uint8_t i;
packet being
packetToSend.frame[index_output]=rx;
constructed
index_output++;
if (rx=='\r' || index_output==29) {
newline or
packetToSend.frame[0]=28;
packet full
MRFI_Transmit(&packetToSend, MRFI_TX_TYPE_FORCED);
index_output = 9;
for(i=9;i<29;i++) {
packetToSend.frame[i]=' ';
}
P1OUT ^= 0x01;
}
P1OUT ^= 0x02;
echo over serial port
TXString(&rx, 1);
}