next up previous contents

[ENGN3213 Home]

Parallel Port

In an embedded system a microprocessor is used to control parts of a system, and this may involve sending and receiving logic signals via a parallel port. The MCF5206 parallel ports are explained in detail in the documentation; however, the registers for controlling Port A are as follows:

Register Address  
MBARx 0x1000 0000 module base address
PADDR MBARx + 0x01C5 Port A data dir. reg., 8 bit, r/w
PADAT MBARx +0x01C9 Port A data reg., 8 bit, r/w

Read: DDR=0, write DDR=1

Let's look at an example of how to use Port A for TTL logic i/o. Download the assembly program porta1s.s:

/*    porta1s.s
      test of port a parallel i/o
*/
	
      .text
      .even
      .global     main
main:
      move.b      #0xff,%d1          /* set port A */
      move.b	  %d1,PADDR          /* for output */
      move.b      #0b10101011,%d1
      move.b      %d1,PADAT          /* write something to port A*/
      rts

MBARx      =      0x10000000     /* Module Base Address value */
PADDR      =      MBARx+0x01C5   /* Port A Data Direction Register, ;8-bit, R/W */				    	
PADAT      =      MBARx+0x01C9   /* Port A Data Register, 8-bit, R/W */

Examine this code carefully, and notice:

Exercise.

1.
Make the necessary hardware connections, including ground. Refer to the Appendix 18.5 describing the SBC cable pins.

2.
Assemble and link the program.

3.
Load the program porta1s.x into the SBC.

4.
Run the code:
go 10000

5.
Use an osilloscope to measure the voltages at each port location. Check for correctness.

A C version is available in the file

porta1c.c:

/* porta1c.c
   test of sbc port a */


#define  MBARx   0x10000000         /* Module Base Address value */
#define  PADDR  (* (char *)  (MBARx+0x01C5))  
           /* Port A Data Direction Register, ;8-bit, R/W */	
#define  PADAT  (* (char *)  (MBARx+0x01C9))  
          /* Port A Data Register, 8-bit, R/W */

int   main() {
  
   PADDR = 0xff;          /* set port A for output */
   PADAT = 0xaa;          /* output something */

   return  0;
}


next up previous contents

[ENGN3213 Home]

ANU Engineering - ENGN3213