00001
00002
00003
00004 #include "piccolo_all.h"
00005 #include "piccolo_spi.h"
00006 #include "delays.h"
00007
00008
00030 #define MCP23S17ADDR 0x40 //MCP23S17 címe, ha mindegyik címvezérlő láb földre van kötve
00031 #define IODIRA_CIME 0x00 //Az A port adatáramlási irányát beállító regiszter címe
00032 #define IODIRB_CIME 0x01 //A B port adatáramlási irányát beállító regiszter címe
00033 #define OLATA_CIME 0x14 //Az A port kimenő adatregiszterének címe
00034 #define OLATB_CIME 0x15 //A B port kimenő adatregiszterének címe
00035
00036
00037 #define SLAVE_ENABLE() mLED_4 = 0 //Slave kiválasztása
00038 #define SLAVE_DISABLE() mLED_4 = 1 //Slave eszköz letiltása
00039
00040
00041 #define MCP23S17_write(reg,data) {SLAVE_ENABLE(); \
00042 spi_io(MCP23S17ADDR); \
00043 spi_io(reg); \
00044 spi_io(data); \
00045 SLAVE_DISABLE(); }
00046
00051 void delay_ms(unsigned int d) {
00052 unsigned int i;
00053 for(i=0; i<d; i++) {
00054 Delay1KTCYx(12);
00055 }
00056 }
00057
00058 void main (void) {
00059 uint8 a_dat=0,b_dat=0x55;
00060 DISABLE_ALL_ANALOG();
00061 mInitAllLEDs();
00062 SLAVE_DISABLE();
00063
00064 spi_init(CKP_ACTIVE_HIGH |
00065 MASTER_FOSC_16,
00066 SPI_CKE_ON |
00067 SPI_SMP_END);
00068 MCP23S17_write(IODIRA_CIME,0);
00069 MCP23S17_write(IODIRB_CIME,0);
00070 MCP23S17_write(OLATA_CIME,a_dat);
00071 MCP23S17_write(OLATB_CIME,b_dat);
00072 while (1) {
00073 a_dat = ~a_dat;
00074 b_dat = ~b_dat;
00075 mLED_1_Toggle();
00076 mLED_2_Toggle();
00077 MCP23S17_write(OLATA_CIME,a_dat);
00078 MCP23S17_write(OLATB_CIME,b_dat);
00079 delay_ms(250);
00080 a_dat = ~a_dat;
00081 mLED_1_Toggle();
00082 MCP23S17_write(OLATA_CIME,a_dat);
00083 delay_ms(250);
00084 }
00085 }