Using SPI to talk to the MRF89X radio module (on an MRF89XAM9A board).

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 // SPI to the MRF89X.
00004 SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk
00005 DigitalOut cs_fifo(PTC12);
00006 DigitalOut cs_conf(PTC17);
00007 DigitalIn mrf_reset(PTA16); // Hi-Z
00008 DigitalIn mrf_irq0(PTC16);
00009 DigitalIn mrf_irq1(PTC13);
00010 
00011 // RGB LED.
00012 PwmOut rled(LED_RED);
00013 PwmOut gled(LED_GREEN);
00014 PwmOut bled(LED_BLUE);
00015 
00016 Serial pc(USBTX, USBRX);
00017 
00018 // Local copy of MTF89X register contents.
00019 unsigned char regs[32];
00020 unsigned char regs2[32];
00021 
00022 int main() {
00023     // Deselect chip select.
00024     cs_fifo = 1;
00025     cs_conf = 1;
00026 
00027     // RGB: Red
00028     rled = 0.5;
00029     gled = 1;
00030     bled = 1;
00031     
00032     // Setup the spi for 8 bit data mode 0.
00033     spi.format(8, 0);
00034     spi.frequency(1000000);
00035 
00036     // RGB: Orange
00037     rled = 0.5;
00038     gled = 0.5;
00039     bled = 1;
00040 
00041     // Read the MRF registers.    
00042     const unsigned char start = 0x00; // Bit 0
00043     const unsigned char read = 0x40; // Bit 1
00044     const unsigned char stop = 0x00; // Bit t
00045     cs_conf = 0;
00046     for (unsigned char addr = 0; addr < 32; addr++) {
00047       spi.write(start | read | (addr << 1) | stop);
00048       regs[addr] = spi.write(0);
00049     }
00050     cs_conf = 1;
00051     wait_ms(10);
00052     cs_conf = 0;
00053     for (unsigned char addr = 0; addr < 32; addr++) {
00054       spi.write(start | read | (addr << 1) | stop);
00055       regs2[addr] = spi.write(0);
00056     }
00057     cs_conf = 1;
00058 
00059     for (unsigned char addr = 0; addr < 32; addr++) {
00060       pc.printf("%02X A %02X B %02X\r\n", addr, regs[addr], regs2[addr]);
00061     }
00062 
00063     // RGB: green.
00064     rled = 1;
00065     gled = 1;
00066     bled = 1;
00067     while(1) {
00068         gled = 0.5;
00069         wait(0.2);
00070         gled = 1;
00071         wait(0.2);
00072     }
00073 }