| Line 6... | Line 6... | 
      
        | //      Writer:                         Moti Litochevski 
 | //      Writer:                         Moti Litochevski 
 | 
      
        | //
 | //
 | 
      
        | //      Description:
 | //      Description:
 | 
      
        | //              This file contains a simple program written in Small-C that sends a string to 
 | //              This file contains a simple program written in Small-C that sends a string to 
 | 
      
        | //              the UART and then switches to echo received bytes. 
 | //              the UART and then switches to echo received bytes. 
 | 
      
        |   | //              This example also include a simple interrupt example which will work with the 
 | 
      
        |   | //              verilog testbench. the testbench 
 | 
      
        | //
 | //
 | 
      
        | //      Revision History:
 | //      Revision History:
 | 
      
        | //
 | //
 | 
      
        | //      Rev <revnumber>                 <Date>                  <owner> 
 | //      Rev <revnumber>                 <Date>                  <owner> 
 | 
      
        | //              <comment>
 | //              <comment>
 | 
      
        | //---------------------------------------------------------------------------------------
 | //---------------------------------------------------------------------------------------
 | 
      
        |  
 |  
 | 
      
        |   | // define interrupt vectors 
 | 
      
        |   | // note that this file must be edited to enable interrupt used 
 | 
      
        |   | #include intr_vec.h 
 | 
      
        |   | // insert c80 assmbly library to the output file 
 | 
      
        | #include ..\tools\c80\c80.lib
 | #include ..\tools\c80\c80.lib
 | 
      
        |  
 |  
 | 
      
        | // UART IO registers 
 | // UART IO registers 
 | 
      
        | port (128) UDATA;               // uart data register used for both transmit and receive 
 | port (128) UDATA;               // uart data register used for both transmit and receive 
 | 
      
        | port (129) UBAUDL;              // low byte of baud rate register 
 | port (129) UBAUDL;              // low byte of baud rate register 
 | 
      
        | port (130) UBAUDH;              // low byte of baud rate register 
 | port (130) UBAUDH;              // low byte of baud rate register 
 | 
      
        | port (131) USTAT;               // uart status register 
 | port (131) USTAT;               // uart status register 
 | 
      
        | // digital IO ports registers 
 | // digital IO ports registers 
 | 
      
        | port (132) P1REG;       // output port1 - used as first attenuator control 
 | port (132) P1DATA;      // port 1 data register 
 | 
      
        | port (133) P2REG;               // output port2 - used as low digit LCD 
 | port (133) P1DIR;               // port 1 direction register control 
 | 
      
        | port (134) P3REG;               // output port3 - used as high digit LCD 
 | port (134) P2DATA;              // port 2 data register 
 | 
      
        | port (135) P4REG;               // output port4 
 | port (135) P2DIR;               // port 2 direction register control 
 | 
      
        |   | // interrupt controller register 
 | 
      
        |   | port (136) INTRENA;             // interrupts enable register 
 | 
      
        | // simulation end register 
 | // simulation end register 
 | 
      
        | // writing any value to this port will end the verilog simulation when using tb_l80soc 
 | // writing any value to this port will end the verilog simulation when using tb_l80soc 
 | 
      
        | // test bench. 
 | // test bench. 
 | 
      
        | port (255) SIMEND;
 | port (255) SIMEND;
 | 
      
        |  
 |  
 | 
      
        | Line 111... | Line 119... | 
      
        |                 sendbyte('A'+q-10);
 |                 sendbyte('A'+q-10);
 | 
      
        |         else
 |         else
 | 
      
        |                 sendbyte('0'+q);
 |                 sendbyte('0'+q);
 | 
      
        | }
 | }
 | 
      
        |  
 |  
 | 
      
        |   | // external interrupt 0 service routine 
 | 
      
        |   | int0_isr()
 | 
      
        |   | {
 | 
      
        |   |         printstr("Interrupt 0 was asserted."); nl();
 | 
      
        |   | }
 | 
      
        |   |  
 | 
      
        | // program main routine 
 | // program main routine 
 | 
      
        | main()
 | main()
 | 
      
        | {
 | {
 | 
      
        |         // configure UART baud rate - set to 9600 for 30MHz clock 
 |         // configure UART baud rate - set to 9600 for 30MHz clock 
 | 
      
        |         // BAUD = round(<clock>/<baud rate>/16) = round(30e6/9600/16) = 195 
 |         // BAUD = round(<clock>/<baud rate>/16) = round(30e6/9600/16) = 195 
 | 
      
        |         UBAUDL = 195;
 | //MOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTI
 | 
      
        |   | //MOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTI
 | 
      
        |   | //      UBAUDL = 195;
 | 
      
        |   |         UBAUDL = 1;
 | 
      
        |   | //MOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTI
 | 
      
        |   | //MOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTIMOTI
 | 
      
        |         UBAUDH = 0;
 |         UBAUDH = 0;
 | 
      
        |  
 |  
 | 
      
        |   |         // configure both ports to output and digital outputs as zeros 
 | 
      
        |   |         P1DATA = 0x00;
 | 
      
        |   |         P1DIR = 0xff;
 | 
      
        |   |         P2DATA = 0x00;
 | 
      
        |   |         P2DIR = 0xff;
 | 
      
        |   |         // enable interrupt 0 only 
 | 
      
        |   |         INTRENA = 0x01;
 | 
      
        |   |         // enable CPU interrupt 
 | 
      
        |   | #asm 
 | 
      
        |   |         ei
 | 
      
        |   | #endasm
 | 
      
        |   |  
 | 
      
        |         // print message 
 |         // print message 
 | 
      
        |         printstr("Hello World!!!"); nl();
 |         printstr("Hello World!!!"); nl();
 | 
      
        |         printstr("Dec value: "); printdec(tstary[1]); nl();
 |         printstr("Dec value: "); printdec(tstary[1]); nl();
 | 
      
        |         printstr("Hex value: 0x"); printhex(tstary[0]); nl();
 |         printstr("Hex value: 0x"); printhex(tstary[0]); nl();
 | 
      
        |         printstr("Echoing received bytes: "); nl();
 |   | 
      
        |  
 |  
 | 
      
        |   |         // assert bit 0 of port 1 to test external interrupt 0 
 | 
      
        |   |         P1DATA = 0x01;
 | 
      
        |   |  
 | 
      
        |   |         printstr("Echoing received bytes: "); nl();
 | 
      
        |         // loop forever 
 |         // loop forever 
 | 
      
        |         while (1) {
 |         while (1) {
 | 
      
        |                 // check if a new byte was received 
 |                 // check if a new byte was received 
 | 
      
        |                 if (getbyte())
 |                 if (getbyte())
 | 
      
        |                         // echo the received byte to the UART 
 |                         // echo the received byte to the UART 
 | 
      
        |                         sendbyte(rxbyte);
 |                         sendbyte(rxbyte);
 | 
      
        |         }
 |         }
 | 
      
        | }
 | }
 | 
      
        |  
 |   | 
      
        | //---------------------------------------------------------------------------------------
 | //---------------------------------------------------------------------------------------
 | 
      
        | //                                              Th.. Th.. Th.. Thats all folks !!!
 | //                                              Th.. Th.. Th.. Thats all folks !!!
 | 
      
        | //---------------------------------------------------------------------------------------
 | //---------------------------------------------------------------------------------------
 | 
      
        |  
 |  
 | 
      
        |  
 |  
 | 
      
        |  No newline at end of file
 |  No newline at end of file
 |