/* metrowerks sample code */ #include #include #define GPIO_C_Base 0xF310 #define GPIOC_DR GPIO_C_Base+1 #define GPIOC_DDR GPIO_C_Base+2 #define GPIOC_PER GPIO_C_Base+3 #define SPI0_Base 0xF2A0 #define SPI0_SPSCR SPI0_Base+0 #define SPI0_SPDSR SPI0_Base+1 #define SPI0_SPDRR SPI0_Base+2 #define SPI0_SPDTR SPI0_Base+3 #define IPR4 0xF1A4 #define IPR5 0xF1A5 #define GPIOE_PER 0xF333 #define SIM_PCE 0xF35C #define SIZE 10 // prototypes void SPI_init(); void GPIO_init(); void set_GPIO(); void clear_GPIO(); void SPI_ISR(); //The example is developed under CW 56800/E version 8.1 and 56F8346EVM // The SPI is configured as master mode, //after running the code, user can see SPI signal from J14 //use GPIOC4 as the chip select enable pin for slave SPI device int main(void) { SPI_init(); GPIO_init(); asm(bfclr #$0300,SR); //interrupt enable asm(bfset #$0070,x:GPIOE_PER); //configure the GPIO_E4~7 as SPI0 port for(;;) { asm(nop); } } void SPI_init() { asm {// move.w #$C000,x:IPR4 move.w #$0003,x:IPR5 //using transmit interrupt nop //; Do nothing nop move.w #$000F,x:SPI0_SPDSR //;set data length to 16bit move.w #$3355,x:SPI0_SPDTR // move.w #$1320,x:SPI0_SPSCR //;writing control reg,using SPI receiver interrupt move.w #$1170,x:SPI0_SPSCR //;writing control reg,using SPI receiver interrupt bfset #$FFFF,x:SIM_PCE nop rts } } void GPIO_init() { *((unsigned int *)GPIOC_DDR) = 0x0010; //set GPIO_C4 as output mode *((unsigned int *)GPIOC_PER) = 0x0000; //clear GPIO_C4 *((unsigned int *)GPIOC_DR)= 0x0010; //set the GPIOC4 to high return; } void set_GPIO() { asm(bfset #$0010,x:GPIOC_DR); asm(nop); asm(rts); } void clear_GPIO() { asm(bfclr #$0010,x:GPIOC_DR); asm(nop); asm(rts); } void SPI_ISR() { asm { nop: move.w x:SPI0_SPDRR,x0 //;clear SPDF bit nop nop bfset #$0010,X:GPIOC_DR nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop bfclr #$0010,X:GPIOC_DR nop move.w #$3344,x:SPI0_SPDTR nop rti } }