Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdint.h>
- #include <nios2_control.h>
- #define TIMER ((volatile uint32_t *)0x5000)
- #define INPUT ((volatile uint32_t *)0x6a00)
- #define OUTPUT ((volatile uint32_t *)0x7e00)
- #define JTAG_UART ((volatile uint32_t *)0xa800)
- #define TIMER_INT (1 << 0)
- #define F_CPU (50000000)
- #define TIMER_CYCLES ((int)(0.5 * F_CPU))
- void Init(void) {
- OUTPUT[0] = INPUT[0] & 0xff00 | 0x0f;
- TIMER[0] = 0; /* clear extraneous interrupt */
- TIMER[2] = TIMER_CYCLES & 0xffff;
- TIMER[3] = TIMER_CYCLES >> 16;
- TIMER[1] = 0b0111;
- NIOS2_WRITE_IENABLE(TIMER_INT);
- NIOS2_WRITE_STATUS(1);
- }
- void PrintChar(unsigned int ch) {
- while((JTAG_UART[1] & 0xffff0000) == 0) {}
- JTAG_UART[0] = ch & 0xff;
- }
- void PrintHexDigit(unsigned int n) {
- unsigned int use;
- if (n < 10)
- use = n + '0';
- else
- use = n - 10 + 'A';
- PrintChar(use);
- }
- void UpdateLEDs(void) {
- OUTPUT[0] ^= 0xff;
- }
- int timercount = 0, timerflag = 0;
- void interrupt_handler(void) {
- uint32_t ipending = NIOS2_READ_IPENDING();
- if(ipending & TIMER_INT) {
- UpdateLEDs();
- if(++timercount >= 10 * 2) {
- timercount = 0;
- timerflag = 1;
- }
- }
- }
- int main(void) {
- Init();
- while(1) {
- if(INPUT[0] & 0x80) {
- uint32_t data = INPUT[0] & 0x7f;
- while(INPUT[0] & 0x80) {}
- data >>= 3;
- PrintHexDigit(data);
- PrintChar(0x0d);
- }
- if(timerflag) {
- timerflag = 0;
- OUTPUT[0] = INPUT[0] & 0xff00 | OUTPUT[0] & 0xff;
- }
- }
- /*
- some compilers will get unhappy
- if there is no return
- */
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement