| #include "n5_drv.h" |
| #include "n5_int.h" |
| |
| unsigned int A[100]; |
| |
| void IRQ() { |
| gpio_write(0x0099); |
| } |
| |
| int fact(int n){ |
| int f = 1; |
| for(int i=2; i<=n; i++) |
| f = f * i; |
| return f; |
| } |
| |
| int strlen(char *s){ |
| int i=0; |
| while (*s){ |
| i++; |
| } |
| return i; |
| } |
| |
| void M23LC_write_byte(int n, unsigned int addr, unsigned int data){ |
| spi_start(n); |
| spi_write(n, 0x2); |
| spi_write(n, addr >> 8); // Address high byte |
| spi_write(n, addr & 0xFF); // Address low byte |
| spi_write(n, data); |
| spi_end(n); |
| } |
| |
| unsigned char M23LC_read_byte(int n, unsigned short addr){ |
| spi_start(n); |
| spi_write(n, 0x3); |
| spi_write(n, addr >> 8); // Address high byte |
| spi_write(n, addr & 0xFF); // Address low byte |
| spi_write(n, 0); // just write a dummy data to get the data out |
| spi_end(n); |
| return spi_read(n); |
| } |
| |
| #define DELAY(n) for(int i=0; i<n; i++) |
| |
| int main(){ |
| // Initialization |
| uart_init (0, 0); |
| gpio_set_dir(0xFF00); |
| |
| spi_init(0, 0,0,40); |
| |
| // Start the test |
| uart_puts (0, "Hello World!\n", 13); |
| |
| // I2C testing |
| uart_puts (0, "I2C Test: ", 10); |
| i2c_init(0, 16000); |
| i2c_start(0, 0xA0); // slave address = 1010_000, R/W_b=0 (write) |
| i2c_sendByte(0x0); |
| i2c_sendByte(0x0); |
| i2c_sendByte(0x55); |
| i2c_stop(); |
| DELAY(20); |
| i2c_start(0, 0xA0); // slave address = 1010_000, R/W_b=0 (write) |
| i2c_sendByte(0x0); |
| i2c_sendByte(0x0); |
| i2c_start(0, 0xA1); // slave address = 1010_000, R/W_b=1 (read) |
| int i2c_data = i2c_readByte(); |
| gpio_write(i2c_data); |
| if(i2c_data == 0x55) |
| uart_puts(0,"Passed!\n", 8); |
| else |
| uart_puts(0,"Failed!\n", 8); |
| i2c_stop(); |
| |
| // GPIO |
| uart_puts (0, "GPIO Test: ", 11); |
| int gpio_val = 0x15; // Wrapper has a lower number of GPIOs |
| gpio_write(gpio_val); |
| DELAY(50); |
| int gpio_data = gpio_read(); |
| if((gpio_data >> 8) == gpio_val) |
| uart_puts(0,"Passed!\n", 8); |
| else |
| uart_puts(0,"Failed!\n", 8); |
| |
| // SPI |
| uart_puts (0, "SPI Test: ", 10); |
| M23LC_write_byte(0, 0, 0xA5); |
| unsigned int spi_data = M23LC_read_byte(0, 0); |
| DELAY(10); |
| if(spi_data==0xA5) |
| uart_puts(0,"Passed!\n", 8); |
| else |
| uart_puts(0,"Failed!\n", 8); |
| |
| // Timer |
| uart_puts (0, "TMR Test: ", 10); |
| tmr_init(0, 800, 10); |
| tmr_enable(0); |
| tmr_wait(0); |
| tmr_disable(0); |
| if(tmr_read(0) == 0) |
| uart_puts(0,"Passed!\n", 8); |
| else |
| uart_puts(0,"Failed!\n", 8); |
| |
| // WDT |
| uart_puts (0, "WDT Test: ", 10); |
| wdt_init(0); |
| wdt_enable(0); |
| wdt_load(0, 50); |
| while(wdt_read(0) != 0); |
| wdt_disable(0); |
| if (wdt_read(0) == 0) |
| uart_puts(0,"Passed!\n", 8); |
| else |
| uart_puts(0,"Failed!\n", 8); |
| |
| // PWM |
| pwm_init(0, 250, 99, 5); |
| pwm_enable(0); |
| DELAY(30); |
| pwm_disable(0); |
| |
| // Some Delay |
| DELAY(50); |
| |
| // Done! |
| uart_puts(0, "Done!\n\n", 7); |
| return 0; |
| } |