home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / documents / chipdata / 6522-VIA.txt < prev    next >
Encoding:
Text File  |  1997-03-23  |  72.7 KB  |  1,316 lines

  1. tHIS   DOCUMENT  COVERS  ALL  PROGRAMMING  INFORMATION  ABOUT  rOCKWELL  r6522
  2. vERSATILE  iNTERFACE  aDAPTER  (via)  CHIP  USED  IN  MANY  cOMMODORE DEVICES.
  3. fIGURES  AND  TABLES  IN  THIS  FILE  WERE  DRAWN  WITH  +,  -,  {$7c} CHARACTERS.
  4. fOR CLEAR DESCRIPTION, SOME OF THE FIGURES ARE BIT WIDER THAN 80 CHARACTERS.
  5.  
  6. tHIS FILE WAS CREATED FROM SCANNINGS BY fRANK kONTROS <JENO@KONTR.UZHGOROD.UA>
  7. mANY THANKS FOR CORRECTIONS TO wOLFGANG lORENZ <PC64@COMPUSERVE.COM>
  8.  
  9. iF  YOU  HAVE  ANY  QUESTIONS, COMMENTS OR SUGGESTIONS CONCERNING THIS FILE OR
  10. 6522 CHIP, PLEASE CONTACT ME (fRANK).
  11.  
  12.  
  13. ------------------------------------------------------------------------------
  14.                                       r6522
  15.                                versatile interface
  16.                                      adapter
  17. ------------------------------------------------------------------------------
  18.  
  19.  
  20. description
  21.  
  22. tHE  r6522  vERSATILE  iNTERFACE  aDAPTER (via) IS A VERY FLEXIBLE i/o CONTROL
  23. DEVICE.  iN  ADDITION,  THIS  DEVICE  CONTAINS  A PAIR OF VERY POWERFUL 16-BIT
  24. INTERVAL  TIMERS,  A  SERIAL-TO-PARALLEL/PARALLEL-TO-SERIAL SHIFT REGISTER AND
  25. INPUT  DATA  LATCHING ON THE PERIPHERAL PORTS. eXPANDED HANDSHAKING CAPABILITY
  26. ALLOWS  CONTROL  OF  BIDIRECTIONAL  DATA  TRANSFERS  BETWEEN via'S IN MULTIPLE
  27. PROCESSOR SYSTEMS.
  28.  
  29. cONTROL   OF  PERIPHERAL  DEVICES  IS  HANDLED  PRIMARILY  THROUGH  TWO  8-BIT
  30. BIDIRECTIONAL  PORTS.  eACH  LINE  CAN  BE PROGRAMMED AS EITHER AN INPUT OR AN
  31. OUTPUT.  sEVERAL  PERIPHERAL  i/o  LINES  CAN  BE CONTROLLED DIRECTLY FROM THE
  32. INTERVAL  TIMERS  FOR  GENERATING  PROGRAMMABLE  FREQUENCY SQUARE WAVES OR FOR
  33. COUNTING  EXTERNALLY  GENERATED  PULSES.  tO  FACILITATE  CONTROL  OF THE MANY
  34. POWERFUL  FEATURES  OF  THIS  CHIP,  AN  INTERRUPT FLAG REGISTER, AN INTERRUPT
  35. ENABLE REGISTER AND A PAIR OF FUNCTION CONTROL REGISTERS ARE PROVIDED.
  36.  
  37.  
  38. features
  39.  
  40. O tWO 8-BIT BIDIRECTIONAL i/o PORTS
  41. O tWO 16-BIT PROGRAMMABLE TIMER/COUNTERS
  42. O sERIAL DATA PORT
  43. O ttl COMPATIBLE
  44. O cmos COMPATIBLE PERIPHERAL CONTROL LINES
  45. O eXPANDED "HANDSHAKE" CAPABILITY ALLOWS POSITIVE CONTROL
  46.   DATA TRANSFERS BETWEEN PROCESSOR AND PERIPHERAL DEVICES
  47. O lATCHED OUTPUT AND INPUT REGISTERS
  48. O 1 mhZ AND 2 mHZ OPERATION
  49. O sINGLE +5v POWER SUPPLY
  50.  
  51.  
  52.   ordering information                                +---------------+
  53.                                                  vSS ={$7c}  1         40 {$7c}= ca1
  54.                                                  pa0 ={$7c}  2         39 {$7c}= ca2
  55.    pART nUMBER:                                  pa1 ={$7c}  3         38 {$7c}= rs0
  56.    r6522 _ _ _                                   pa2 ={$7c}  4         37 {$7c}= rs1
  57.          {$7c} {$7c} {$7c}                                   pa3 ={$7c}  5         36 {$7c}= rs2
  58.          {$7c} {$7c} {$7c}                                   pa4 ={$7c}  6         35 {$7c}= rs3
  59.          {$7c} {$7c} {$7c}                                   pa5 ={$7c}  7         34 {$7c}= res
  60.          {$7c} {$7c} {$7c}                                   pa6 ={$7c}  8         33 {$7c}= d0
  61.          {$7c} {$7c} {$7c}                                   pa7 ={$7c}  9         32 {$7c}= d1
  62.          {$7c} {$7c} +------ tEMPERATURE rANGE           pb0 ={$7c} 10         31 {$7c}= d2
  63.          {$7c} {$7c}         bLANK = 40{$f8}c TO +70{$f8}c       pb1 ={$7c} 11         30 {$7c}= d3
  64.          {$7c} {$7c}             e = 40{$f8}c TO +85{$f8}c       pb2 ={$7c} 12         29 {$7c}= d4
  65.          {$7c} {$7c}                                     pb3 ={$7c} 13         28 {$7c}= d5
  66.          {$7c} {$7c}                                     pb4 ={$7c} 14         27 {$7c}= d6
  67.          {$7c} +-------- pACKAGE                     pb5 ={$7c} 15         26 {$7c}= d7
  68.          {$7c}               c = cERAMIC             pb6 ={$7c} 16         25 {$7c}= 02
  69.          {$7c}               p = pLASTIC             pb7 ={$7c} 17         24 {$7c}= cs1
  70.          {$7c}                                       cb1 ={$7c} 18         23 {$7c}= cs2
  71.          {$7c}                                       cb2 ={$7c} 19         22 {$7c}= r/w
  72.          +---------- fREQUENCY                   vCC ={$7c} 20         21 {$7c}= irq
  73.                      nO lETTER = 1 mhZ                +---------------+
  74.                              a = 2 mhZ             r6522 pIN cONFIGURATION
  75.  
  76.  
  77. interface signals
  78.  
  79.                                +---------------+
  80.           /                    {$7c}               {$7c}                     \
  81.          {$7c}           /-------\ {$7c}               {$7c} /-------\            {$7c}
  82.    m b   {$7c}    d0-d7 <    8    >{$7c}               {$7c}<   (8)   > pa0-pa7   {$7c}
  83.    i u   {$7c}           \-------/ {$7c}               {$7c} \-------/            {$7c}
  84.    c s   {$7c}                     {$7c}               {$7c}                      {$7c}   p i
  85.    r     {$7c}       02 ---------->{$7c}               {$7c}<---------- ca1       {$7c}   e n
  86.  r o i   {$7c}        _            {$7c}               {$7c}                      {$7c}   r t
  87.  6 p n   {$7c}      r/w ---------->{$7c}     r6522     {$7c}<---------> ca2       {$7c}   i e
  88.  5 r t  <       ___       2    {$7c}      via      {$7c}                       >  p r
  89.  0 o e   {$7c}  cs1,cs2 -----/---->{$7c}               {$7c}<---------> cb1       {$7c}   h f
  90.  0 c r   {$7c}                4    {$7c}               {$7c}                      {$7c}   e a
  91.    e f   {$7c}  rs0-rs3 -----/---->{$7c}               {$7c}<---------> cb2       {$7c}   r c
  92.    s a   {$7c}      ___            {$7c}               {$7c}                      {$7c}   a e
  93.    s c   {$7c}      res ---------->{$7c}               {$7c} /-------\            {$7c}   l
  94.    o e   {$7c}      ___            {$7c}               {$7c}<   (8)   > pb0-pb7   {$7c}
  95.    r     {$7c}      irq ---------->{$7c}               {$7c} \-------/            {$7c}
  96.           \                    {$7c}               {$7c}                     /
  97.                                +---------------+
  98.  
  99.                      fIGURE 1. r6522 via INTERFACE sIGNALS
  100.  
  101.        ___
  102. reset (res)
  103.                 ___
  104. a  LOW  RESET  (res)  INPUT  CLEARS  ALL  r6522  INTERNAL REGISTERS TO LOGIC 0
  105. (EXCEPT  t1  AND  t2  LATCHES  AND  COUNTERS  AND  THE  sHIFT  rEGISTER). tHIS
  106. PLACES  ALL  PERIPHERAL  INTERFACE  LINES  IN  THE  INPUT  STATE, DISABLES THE
  107. TIMERS, SHIFT REGISTER, ETC. AND DISABLES INTERRUPTING FROM THE CHIP.
  108.  
  109. input clock (phase 2)
  110.  
  111. tHE  INPUT  CLOCK  IS  THE  SYSTEM  02  CLOCK  AND TRIGGERS ALL DATA TRANSFERS
  112. BETWEEN PROCESSOR BUS AND THE r6522.
  113.               _
  114. read/write (r/w)
  115.  
  116. tHE DIRECTION OF THE DATA TRANSFERS BETWEEN THE r6522 AND THE SYSTEM PROCESSOR
  117. IS CONTROLLED BY THE r/w LINE IN CONJUNCTION WITH THE cs1 AND cs2 INPUTS. wHEN
  118. r/w IS LOW (WRITE OPERATION),  AND THE r6522 IS SELECTED,  DATA IS TRANSFERRED
  119. FROM  THE  PROCESSOR  BUS  INTO THE SELECTED r6522 REGISTER.  wHEN r/w IS HIGH
  120. (READ  OPERATION),  AND  THE  r6522 IS SELECTED,  DATA IS TRANSFERRED FROM THE
  121. SELECTED r6522 REGISTER TO THE PROCESSOR BUS.
  122.  
  123. data bus (d0-d7)
  124.  
  125. tHE  EIGHT  BIDIRECTIONAL  DATA  BUS LINES TRANSFER DATA BETWEEN THE r6522 AND
  126. THE  SYSTEM  PROCESSOR  BUS.  dURING READ CYCLES, THE CONTENTS OF THE SELECTED
  127. r6522  REGISTER  ARE  PLACED ON THE DATA BUS LINES. dURING WRITE CYCLES, THESE
  128. LINES  ARE  HIGH-IMPEDANCE  INPUTS  AND DATA IS TRANSFERRED FROM THE PROCESSOR
  129. BUS  INTO  THE  SELECTED  REGISTER.  wHEN  THE r6522 IS NOT SELECTED, THE DATA
  130. BUS LINES ARE HIGH IMPEDANCE.
  131.                    ___
  132. chip selects (cs1, cs2)
  133.  
  134. tHE  TWO  CHIP SELECT INPUTS ARE NORMALLY CONNECTED TO PROCESSOR ADDRESS LINES
  135. EITHER  DIRECTLY OR THROUGH DECODING.  tHE SELECTED r6522 REGISTER IS ACCESSED
  136. WHEN cs1 IS HIGH AND cs2 IS LOW.
  137.  
  138. register selects (rs0-rs3)
  139.  
  140. tHE  CODING  OF  THE FOUR rEGISTER sELECT INPUTS SELECT ONE OF THE 16 INTERNAL
  141. REGISTERS OF THE r6522, AS SHOWN IN tABLE 1.
  142.  
  143.  
  144.                        tABLE 1. r6522 rEGISTER aDDRESSING
  145.  
  146. +----+---------------+---------+---------------------------------------------+
  147. {$7c}rEG.{$7c}   rs cODING   {$7c}rEGISTER {$7c}            rEGISTER/dESCRIPTION             {$7c}
  148. {$7c} #  +---+---+---+---+ dESIG.  +----------------------+----------------------+
  149. {$7c}    {$7c}rs3{$7c}rs2{$7c}rs1{$7c}rs0{$7c}         {$7c} wRITE (r/w = l)      {$7c} rEAD (r/w = h)       {$7c}
  150. +----+---+---+---+---+---------+----------------------+----------------------+
  151. {$7c}  0 {$7c} 0 {$7c} 0 {$7c} 0 {$7c} 0 {$7c} orb/irb {$7c} oUTPUT rEGISTER b    {$7c} iNPUT rEGISTER b     {$7c}
  152. +----+---+---+---+---+---------+----------------------+----------------------+
  153. {$7c}  1 {$7c} 0 {$7c} 0 {$7c} 0 {$7c} 1 {$7c} ora/ira {$7c} oUTPUT rEGISTER a    {$7c} iNPUT rEGISTER a     {$7c}
  154. +----+---+---+---+---+---------+----------------------+----------------------+
  155. {$7c}  2 {$7c} 0 {$7c} 0 {$7c} 1 {$7c} 0 {$7c}  ddrb   {$7c} dATA dIRECTION rEGISTER b                   {$7c}
  156. +----+---+---+---+---+---------+---------------------------------------------+
  157. {$7c}  3 {$7c} 0 {$7c} 0 {$7c} 1 {$7c} 1 {$7c}  ddra   {$7c} dATA dIRECTION rEGISTER a                   {$7c}
  158. +----+---+---+---+---+---------+----------------------+----------------------+
  159. {$7c}  4 {$7c} 0 {$7c} 1 {$7c} 0 {$7c} 0 {$7c}  t1c-l  {$7c} t1 lOW-oRDER lATCHES {$7c} t1 lOW-oRDER cOUNTER {$7c}
  160. +----+---+---+---+---+---------+----------------------+----------------------+
  161. {$7c}  5 {$7c} 0 {$7c} 1 {$7c} 0 {$7c} 1 {$7c}  t1c-h  {$7c} t1 hIGH-oRDER cOUNTER{$7c} t1 hIGH-oRDER cOUNTER{$7c}
  162. +----+---+---+---+---+---------+---------------------------------------------+
  163. {$7c}  6 {$7c} 0 {$7c} 1 {$7c} 1 {$7c} 0 {$7c}  t1l-l  {$7c} t1 lOW-oRDER lATCHES                        {$7c}
  164. +----+---+---+---+---+---------+---------------------------------------------+
  165. {$7c}  7 {$7c} 0 {$7c} 1 {$7c} 1 {$7c} 1 {$7c}  t1l-h  {$7c} t1 hIGH-oRDER lATCHES                       {$7c}
  166. +----+---+---+---+---+---------+----------------------+----------------------+
  167. {$7c}  8 {$7c} 1 {$7c} 0 {$7c} 0 {$7c} 0 {$7c}  t2c-l  {$7c} t2 lOW-oRDER lATCHES {$7c} t2 lOW-oRDER cOUNTER {$7c}
  168. +----+---+---+---+---+---------+----------------------+----------------------+
  169. {$7c}  9 {$7c} 1 {$7c} 0 {$7c} 0 {$7c} 1 {$7c}  t2c-h  {$7c} t2 hIGH-oRDER cOUNTER                       {$7c}
  170. +----+---+---+---+---+---------+---------------------------------------------+
  171. {$7c} 10 {$7c} 1 {$7c} 0 {$7c} 1 {$7c} 0 {$7c}  sr     {$7c} sHIFT rEGISTER                              {$7c}
  172. +----+---+---+---+---+---------+---------------------------------------------+
  173. {$7c} 11 {$7c} 1 {$7c} 0 {$7c} 1 {$7c} 1 {$7c}  acr    {$7c} aUXILIARY cONTROL rEGISTER                  {$7c}
  174. +----+---+---+---+---+---------+---------------------------------------------+
  175. {$7c} 12 {$7c} 1 {$7c} 1 {$7c} 0 {$7c} 0 {$7c}  pcr    {$7c} pERIPHERAL cONTROL rEGISTER                 {$7c}
  176. +----+---+---+---+---+---------+---------------------------------------------+
  177. {$7c} 13 {$7c} 1 {$7c} 1 {$7c} 0 {$7c} 1 {$7c}  ifr    {$7c} iNTERRUPT fLAG rEGISTER                     {$7c}
  178. +----+---+---+---+---+---------+---------------------------------------------+
  179. {$7c} 14 {$7c} 1 {$7c} 1 {$7c} 1 {$7c} 0 {$7c}  ier    {$7c} iNTERRUPT eNABLE rEGISTER                   {$7c}
  180. +----+---+---+---+---+---------+----------------------+----------------------+
  181. {$7c} 15 {$7c} 1 {$7c} 1 {$7c} 1 {$7c} 1 {$7c} ora/ira {$7c} oUTPUT rEGISTER a*   {$7c} iNPUT rEGISTER a*    {$7c}
  182. +----+---+---+---+---+---------+----------------------+----------------------+
  183. {$7c} note: * sAME AS rEGISTER 1 EXCEPT NO HANDSHAKE.                            {$7c}
  184. +----------------------------------------------------------------------------+
  185.  
  186.                    ___
  187. interrupt request (irq)
  188.  
  189. tHE  iNTERRUPT  rEQUEST OUTPUT GOES LOW WHENEVER AN INTERNAL INTERRUPT FLAG IS
  190. SET  AND  THE CORRESPONDING INTERRUPT ENABLE BIT IS A LOGIC 1.  tHIS OUTPUT IS
  191. OPEN-DRAIN  TO  ALLOW THE INTERRUPT REQUEST SIGNAL TO BE WIRE-or'ED WITH OTHER
  192. EQUIVALENT SIGNALS IN THE SYSTEM.
  193.  
  194. peripheral port a (pa0-pa7)
  195.  
  196. pORT  a  CONSISTS  OF  EIGHT LINES WHICH CAN BE INDIVIDUALLY PROGRAMMED TO ACT
  197. AS  INPUTS  OR  OUTPUTS  UNDER  CONTROL  OF  A  dATA dIRECTION rEGISTER a. tHE
  198. POLARITY  OF  OUTPUT  PINS  IS CONTROLLED BY AN oUTPUT rEGISTER AND INPUT DATA
  199. MAY  BE  LATCHED  INTO AN INTERNAL REGISTER UNDER CONTROL OF THE ca1 LINE. aLL
  200. OF  THESE  MODES  OF  OPERATION ARE CONTROLLED BY THE SYSTEM PROCESSOR THROUGH
  201. THE  INTERNAL  CONTROL  REGISTERS.  tHESE  LINES  REPRESENTS  ONE STANDARD ttl
  202. LOAD  IN  THE  INPUT  MODE  AND WILL DRIVE ONE STANDARD ttl LOAD IN THE OUTPUT
  203. MODE. fIGURE 2 ILLUSTRATES THE OUTPUT CIRCUIT.
  204.  
  205.  
  206.                                             +5v
  207.                                              O
  208.                                              {$7c}
  209.                                               >
  210.                                              <
  211.                                               >
  212.                                              <
  213.                                              {$7c}
  214.                                              *-----*---> pa0-pa7,
  215.                                              {$7c}     {$7c}     ca2
  216.                              +-----+      +--+     {$7c}
  217.              i/o control ----+     {$7c}     {$7c}{$7c}        {$7c}
  218.                              {$7c} nor {$7c}O----+{$7c}        {$7c}
  219.              output data ----+     {$7c}     {$7c}{$7c}        {$7c}
  220.                              +-----+      +--+     {$7c}
  221.                                            __{$7c}__   {$7c}
  222.                                             ---    {$7c}
  223.                                              {$7e}     {$7c}
  224.               input data <-------------------------+
  225.  
  226.                        fIGURE 2. pORT a oUTPUT cIRCUIT
  227.  
  228.  
  229. port a control lines (ca1,ca2)
  230.  
  231. tHE  TWO  pORT  a  CONTROL  LINES  ACT  AS  INTERRUPT  INPUTS  OR AS HANDSHAKE
  232. OUTPUTS.  eACH  LINE  CONTROLS AN INTERNAL INTERRUPT FLAG WITH A CORRESPONDING
  233. INTERRUPT  ENABLE  BIT.  iN  ADDITION,  ca1  CONTROLS  THE LATCHING OF DATA ON
  234. pORT  a  INPUT  LINES. ca1 IS A HIGH-IMPEDANCE INPUT ONLY WHILE ca2 REPRESENTS
  235. ONE  STANDARD  ttl  LOAD  IN  THE  INPUT MODE. ca2 WILL DRIVE ONE STANDARD ttl
  236. LOAD IN THE OUTPUT MODE.
  237.  
  238. port b (pb0-pb7)
  239.  
  240. pERIPHERAL   pORT   b   CONSISTS  OF  EIGHT  BI-DIRECTIONAL  LINES  WHICH  ARE
  241. CONTROLLED  BY  AN  OUTPUT  REGISTER AND A DATA DIRECTION REGISTER IN MUCH THE
  242. SAME  MANNER  AS  THE  pORT  a.  iN  ADDITION,  THE POLARITY OF THE pb7 OUTPUT
  243. SIGNAL  CAN  BE  CONTROLLED  BY  ONE  OF  THE INTERVAL TIMERS WHILE THE SECOND
  244. TIMER  CAN  BE  PROGRAMMED  TO  COUNT  PULSES  ON  THE  pb6  PIN. pORT b LINES
  245. REPRESENT  ONE  STANDARD  ttl  LOAD  IN  THE  INPUT  MODE  AND  WILL DRIVE ONE
  246. STANDARD  ttl  LOAD  IN  THE  OUTPUT  MODE.  iN  ADDITION, THEY ARE CAPABLE OF
  247. SOURCING  1.0  Ma  AT  1.5  vDC  IN  THE  OUTPUT  MODE TO ALLOW THE OUTPUTS TO
  248. DIRECTLY  DRIVE  dARLINGTON  TRANSISTOR  CIRCUITS.  fIGURE  3  IS  THE CIRCUIT
  249. SCHEMATIC.
  250.  
  251.                                                 +5v
  252.                                                  O
  253.                                                  {$7c}
  254.                                                  *------+
  255.                                                  {$7c}      {$7c}
  256.           input                  +-----+      +--+       >
  257.          output -------------*---+     {$7c}     {$7c}{$7c}         <
  258.         control        {$7c}\    {$7c}   {$7c} nor {$7c}O----+{$7c}          >
  259.                    +--O{$7c} >---+---+     {$7c}     {$7c}{$7c}         <
  260.                    {$7c}   {$7c}/    {$7c}   +-----+      +--+      {$7c}
  261.                    {$7c}         {$7c}                   {$7c}      {$7c}
  262.                    {$7c}         {$7c}                   *------*---> pb0-pb7,
  263.                    {$7c}         {$7c}                   {$7c}      {$7c}     cb1,cb2
  264.                    {$7c}         {$7c}   +-----+      +--+      {$7c}
  265.                    {$7c}         +---+     {$7c}     {$7c}{$7c}         {$7c}
  266.          output    {$7c}             {$7c} nor {$7c}O----+{$7c}         {$7c}
  267.            data ---*-------------+     {$7c}     {$7c}{$7c}         {$7c}
  268.                                  +-----+      +--+      {$7c}
  269.                                                __{$7c}__    {$7c}
  270.                                                 ---     {$7c}
  271.                                                  {$7e}      {$7c}
  272.      input data <---------------------------------------+
  273.  
  274.                        fIGURE 3. pORT b oUTPUT cIRCUIT
  275.  
  276.  
  277. port b control lines (cb1,cb2)
  278.  
  279. tHE  pORT  b  CONTROL  LINES  ACT AS INTERRUPT INPUTS OR AS HANDSHAKE OUTPUTS.
  280. aS   WITH   ca1   AND  ca2,  EACH  LINE  CONTROLS  AN  INTERRUPT  FLAG  WITH A
  281. CORRESPONDING  INTERRUPT  ENABLE  BIT.  iN  ADDITION,  THESE  LINES  ACT  AS A
  282. SERIAL  PORT  UNDER  CONTROL  OF THE sHIFT rEGISTER. tHESE LINES REPRESENT ONE
  283. STANDARD  ttl  LOAD  IN THE INPUT MODE AND WILL DRIVE ONE STANDARD ttl LOAD IN
  284. THE  OUTPUT  MODE.  cb2  CAN  ALSO  DRIVE  A  dARLINGTON  TRANSISTOR  CIRCUIT;
  285. HOWEVER, cb1 CANNOT.
  286.  
  287.  
  288. functional description
  289.  
  290. tHE INTERNAL ORGANIZATION OF THE r6522 via IS ILLUSTRATED IN fIGURE 4.
  291.  
  292.  
  293.                          interrupt                                         ___
  294.                           control     +----------------------------------> irq
  295.                        +------------+ {$7c}      +-----------+    +-------+
  296.                        {$7c}   flags    {$7c} {$7c}      {$7c}input latch{$7c}    {$7c}       {$7c}
  297.                        {$7c}   (ifr)    {$7c} {$7c}      {$7c}   (ira)   {$7c}    {$7c}       {$7c}     p
  298.                    +--\+------------+ {$7c}      +-----------+    {$7c}       {$7c}     o
  299.                    {$7c} +/{$7c}   enable   +-+  +--\{$7c}  output   {$7c}/--\{$7c}buffers{$7c}/--\ r
  300.          +-------+ {$7c} {$7c} {$7c}   (ier)    {$7c}    {$7c} +/{$7c}   (ora)   {$7c}\--/{$7c} (pa)  {$7c}\--/ t
  301.          {$7c}       {$7c} {$7c} {$7c} +------------+    {$7c} {$7c} +-----------+    {$7c}       {$7c}
  302. data /--\{$7c}  data +-+ +-------------------+ {$7c} {$7c} data dir  {$7c}    {$7c}       {$7c}     a
  303. bus  \--/{$7c}  bus  +-+ +-------------------+ {$7c} {$7c}  (ddra)   {$7c}    {$7c}       {$7c}
  304.          {$7c}buffers{$7c} {$7c} {$7c} +------------+    {$7c} {$7c} +-----------+    +-------+
  305.          {$7c}       {$7c} {$7c} {$7c} {$7c} peripheral {$7c}    {$7c} {$7c}port a register
  306.          +-------+ {$7c} {$7c} {$7c}   (pcr)    {$7c}    {$7c} {$7c}
  307.                    {$7c} +\+------------+    {$7c} {$7c} +-----------+<--------------- ca1
  308.                    {$7c} +/{$7c} auxiliary  {$7c}    {$7c} +\{$7c}  port a   {$7c}<--------------> ca2
  309.                    {$7c} {$7c} {$7c}   (acr)    {$7c}    {$7c} +/+-----------+
  310.                    {$7c} {$7c} +------------+    {$7c} {$7c} {$7c}  port b   {$7c}<--------+
  311.                    {$7c} {$7c}    function       {$7c} {$7c} +-----------+<------+ {$7c}
  312.                    {$7c} {$7c}    control        {$7c} {$7c}   handshake         {$7c} {$7c}
  313.                    {$7c} {$7c} +-------+-------+ {$7c} {$7c}    control          {$7c} {$7c}
  314. ___      +-------+ {$7c} {$7c} {$7c} latch {$7c} latch {$7c} {$7c} {$7c} +-----------+       {$7c} {$7c}
  315. res ---->{$7c}       {$7c} {$7c} {$7c} {$7c}(t1l-h){$7c}(t1l-l){$7c} {$7c} +\{$7c} shift reg {$7c}<------+-*-----> cb1
  316.   _      {$7c}       {$7c} {$7c} +\+-------+-------+ {$7c} +/{$7c}    (sr)   {$7c}<------*-------> cb2
  317. r/w ---->{$7c}       {$7c} {$7c} +/{$7c}counter{$7c}counter{$7c} {$7c} {$7c} +-----------+
  318. 02  ---->{$7c}       {$7c} {$7c} {$7c} {$7c}(t1c-h){$7c}(t1c-l){$7c} {$7c} {$7c}
  319. ___      {$7c}  chip {$7c} {$7c} {$7c} +-------+-------+ {$7c} {$7c}port b register
  320. cs2 ---->{$7c} access{$7c} {$7c} {$7c}      timer 1      {$7c} {$7c} +-----------+    +-------+
  321. cs1 ---->{$7c}control{$7c} {$7c} {$7c}         +-------+ {$7c} {$7c} {$7c}input latch{$7c}    {$7c}       {$7c}
  322.          {$7c}       {$7c} {$7c} {$7c}         {$7c} latch {$7c} {$7c} {$7c} {$7c}   (irb)   {$7c}    {$7c}       {$7c}     p
  323. rs0 ---->{$7c}       {$7c} {$7c} {$7c}         {$7c}(t2l-l){$7c} {$7c} {$7c} +-----------+    {$7c}       {$7c}     o
  324. rs1 ---->{$7c}       {$7c} {$7c} {$7c} +-------+-------+ {$7c} +\{$7c}  output   {$7c}/--\{$7c}buffers{$7c}/--\ r
  325. rs2 ---->{$7c}       {$7c} {$7c} +\{$7c}counter{$7c}counter{$7c} +--/{$7c}   (orb)   {$7c}\--/{$7c} (pb)  {$7c}\--/ t
  326. rs3 ---->{$7c}       {$7c} +--/{$7c}(t2c-h){$7c}(t2c-l){$7c}     +-----------+    {$7c}       {$7c}
  327.          +-------+     +-------+-------+     {$7c} data dir  {$7c}    {$7c}       {$7c}     b
  328.                             timer 2          {$7c}  (ddrb)   {$7c}    {$7c}       {$7c}
  329.                                              +-----------+    +-------+
  330.  
  331.                       fIGURE 4. r6522 via bLOCK dIAGRAM
  332.  
  333.  
  334. port a and port b operation
  335.  
  336. tHE  r6522  via  HAS  TWO  8-BIT  BIDIRECTIONAL  i/o PORTS (pORT a AND pORT b)
  337. AND EACH PORT HAS TWO ASSOCIATED CONTROL LINES.
  338.  
  339. eACH  8-BIT  PERIPHERAL  PORT  HAS  A dATA dIRECTION rEGISTER (ddra, ddrb) FOR
  340. SPECIFYING  WHETHER  THE  PERIPHERAL PINS ARE TO ACT AS INPUTS OR OUTPUTS. a 0
  341. IN  A  BIT  OF THE dATA dIRECTION rEGISTER CAUSES THE CORRESPONDING PERIPHERAL
  342. PIN TO ACT AS AN INPUT. a 1 CAUSES THE PIN TO ACT AS AN OUTPUT.
  343.  
  344. eACH  PERIPHERAL  PIN  IS  ALSO  CONTROLLED  BY  A  BIT IN THE oUTPUT rEGISTER
  345. (ora,  orb)  AND  THE iNPUT rEGISTER (ira, irb). wHEN THE PIN IS PROGRAMMED AS
  346. AN  OUTPUT,  THE  VOLTAGE ON THE PIN IS CONTROLLED BY THE CORRESPONDING BIT OF
  347. THE  oUTPUT  rEGISTER.  a  1  IN  THE  oUTPUT rEGISTER CAUSES THE OUTPUT TO GO
  348. HIGH,  AND  A  0  CAUSES THE OUTPUT TO GO LOW. dATA MAY BE WRITTEN INTO oUTPUT
  349. rEGISTER  BITS  CORRESPONDING  TO PINS WHICH ARE PROGRAMMED AS INPUTS. iN THIS
  350. CASE, HOWEVER, THE OUTPUT SIGNAL IS UNAFFECTED.
  351.  
  352. rEADING  A  PERIPHERAL  PORT  CAUSES  THE CONTENTS OF THE iNPUT rEGISTER (ira,
  353. irb)  TO  BE  TRANSFERRED ONTO THE dATA bUS. wITH INPUT LATCHING DISABLED, ira
  354. WILL  ALWAYS  REFLECT  THE LEVELS ON THE pa PINS. wITH INPUT LATCHING ENABLED,
  355. ira  WILL  REFLECT  THE  LEVELS  ON  THE pa PINS AT TIME THE LATCHING OCCURRED
  356. (VIA ca1).
  357.  
  358. tHE  irb  REGISTER  OPERATES  SIMILAR  TO  THE ira REGISTER. hOWEVER, FOR PINS
  359. PROGRAMMED  AS  OUTPUTS  THERE IS A DIFFERENCE. wHEN READING ira, THE LEVEL ON
  360. THE  PIN  DETERMINES  WHETHER A 0 OR A 1 IS SENSED. wHEN READING irb, HOWEVER,
  361. THE  BIT  STORED  IN  THE  OUTPUT  REGISTER, orb, IS THE BIT SENSED. tHUS, FOR
  362. OUTPUTS  WHICH  HAVE  LARGE  LOADING EFFECTS AND WHICH PULL AN OUTPUT "1" DOWN
  363. OR  WHICH  PULL  AN  OUTPUT  "0"  UP,  READING ira MAY RESULT IN READING A "0"
  364. WHEN  A  "1"  WAS  ACTUALLY  PROGRAMMED,  AND  READING  A  "1"  WHEN A "0" WAS
  365. PROGRAMMED.  rEADING  irb,  ON  THE OTHER HAND, WILL READ THE "1" OR "0" LEVEL
  366. ACTUALLY PROGRAMMED, NO MATTER WHAT THE LOADING ON THE PIN.
  367.  
  368. fIGURES  5  THROUGH  8  ILLUSTRATE  THE  FORMATS  OF  THE  PORT  REGISTERS. iN
  369. ADDITION,  THE  INPUT  LATCHING  MODES  ARE  SELECTED BY THE aUXILIARY cONTROL
  370. rEGISTER (fIGURE 12).
  371.  
  372.  
  373.               reg 0 -- orb/irb
  374.      +---+---+---+---+---+---+---+---+
  375.      {$7c} 7 {$7c} 6 {$7c} 5 {$7c} 4 {$7c} 3 {$7c} 2 {$7c} 1 {$7c} 0 {$7c}
  376.      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       -+
  377.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   +----- pb0 {$7c}
  378.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}              {$7c}
  379.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   +--------- pb1 {$7c}
  380.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}                  {$7c}
  381.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   +------------- pb2 {$7c}  output register
  382.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}                      {$7c}  "b" (orb)
  383.        {$7c}   {$7c}   {$7c}   {$7c}   +----------------- pb3 {$7c}
  384.        {$7c}   {$7c}   {$7c}   {$7c}                          +-       or
  385.        {$7c}   {$7c}   {$7c}   +--------------------- pb4 {$7c}
  386.        {$7c}   {$7c}   {$7c}                              {$7c}  input register
  387.        {$7c}   {$7c}   +------------------------- pb5 {$7c}  "b" (irb)
  388.        {$7c}   {$7c}                                  {$7c}
  389.        {$7c}   +----------------------------- pb6 {$7c}
  390.        {$7c}                                      {$7c}
  391.        +--------------------------------- pb7 {$7c}
  392.                                              -+
  393.  
  394. +-----------------------+-----------------------+---------------------------+
  395. {$7c}       pin             {$7c}                       {$7c}                           {$7c}
  396. {$7c}  data direction       {$7c}        write          {$7c}           read            {$7c}
  397. {$7c}    selection          {$7c}                       {$7c}                           {$7c}
  398. +-----------------------+-----------------------+---------------------------+
  399. {$7c}ddrb = 1  output       {$7c}mpu writes output level{$7c}mpu reads output register  {$7c}
  400. {$7c}                       {$7c}orb                    {$7c}bit, orb pin level has no  {$7c}
  401. {$7c}                       {$7c}                       {$7c}affect                     {$7c}
  402. +-----------------------+-----------------------+---------------------------+
  403. {$7c}ddrb = 0  input        {$7c}mpu writes into orb but{$7c}mpu reads input level on pb{$7c}
  404. {$7c}input latching disabled{$7c}no affect on pin level {$7c}pin                        {$7c}
  405. {$7c}                       {$7c}until ddrb changed     {$7c}                           {$7c}
  406. +-----------------------+                       +---------------------------+
  407. {$7c}ddrb = 0  input        {$7c}                       {$7c}mpu reads irb bit which is {$7c}
  408. {$7c}input latching enabled {$7c}                       {$7c}the level of the pb pin at {$7c}
  409. {$7c}                       {$7c}                       {$7c}the time of the last cb1   {$7c}
  410. {$7c}                       {$7c}                       {$7c}active transition          {$7c}
  411. +-----------------------+-----------------------+---------------------------+
  412.  
  413.           fIGURE 5. oUTPUT rEGISTER b (orb), iNPUT rEGISTER b (irb)
  414.  
  415.  
  416.               reg 1 -- ora/ira
  417.      +---+---+---+---+---+---+---+---+
  418.      {$7c} 7 {$7c} 6 {$7c} 5 {$7c} 4 {$7c} 3 {$7c} 2 {$7c} 1 {$7c} 0 {$7c}
  419.      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       -+
  420.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   +----- pa0 {$7c}
  421.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}              {$7c}
  422.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   +--------- pa1 {$7c}
  423.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}                  {$7c}
  424.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   +------------- pa2 {$7c}  output register
  425.        {$7c}   {$7c}   {$7c}   {$7c}   {$7c}                      {$7c}  "a" (ora)
  426.        {$7c}   {$7c}   {$7c}   {$7c}   +----------------- pa3 {$7c}
  427.        {$7c}   {$7c}   {$7c}   {$7c}                          +-       or
  428.        {$7c}   {$7c}   {$7c}   +--------------------- pa4 {$7c}
  429.        {$7c}   {$7c}   {$7c}                              {$7c}  input register
  430.        {$7c}   {$7c}   +------------------------- pa5 {$7c}  "a" (ira)
  431.        {$7c}   {$7c}                                  {$7c}
  432.        {$7c}   +----------------------------- pa6 {$7c}
  433.        {$7c}                                      {$7c}
  434.        +--------------------------------- pa7 {$7c}
  435.                                              -+
  436. +-----------------------+-----------------------+---------------------------+
  437. {$7c}       pin             {$7c}                       {$7c}                           {$7c}
  438. {$7c}  data direction       {$7c}        write          {$7c}           read            {$7c}
  439. {$7c}    selection          {$7c}                       {$7c}                           {$7c}
  440. +-----------------------+-----------------------+---------------------------+
  441. {$7c}ddra = 1  output       {$7c}mpu writes output level{$7c}mpu reads level on pa pin  {$7c}
  442. {$7c}input latching disabled{$7c}ora                    {$7c}                           {$7c}
  443. +-----------------------+                       +---------------------------+
  444. {$7c}ddra = 1  input        {$7c}                       {$7c}mpu reads ira bit which is {$7c}
  445. {$7c}input latching enabled {$7c}                       {$7c}the level of the pa pin at {$7c}
  446. {$7c}                       {$7c}                       {$7c}the time of the last ca1   {$7c}
  447. {$7c}                       {$7c}                       {$7c}active transition          {$7c}
  448. +-----------------------+-----------------------+---------------------------+
  449. {$7c}ddra = 0  input        {$7c}mpu writes into ora but{$7c}mpu reads level on pa pin  {$7c}
  450. {$7c}input latching disabled{$7c}no affect on pin level {$7c}                           {$7c}
  451. {$7c}                       {$7c}until ddra changed     {$7c}                           {$7c}
  452. +-----------------------+                       +---------------------------+
  453. {$7c}ddra = 0  input        {$7c}                       {$7c}mpu reads ira bit which is {$7c}
  454. {$7c}input latching enabled {$7c}                       {$7c}the level of the pa pin at {$7c}
  455. {$7c}                       {$7c}                       {$7c}the time of the last ca1   {$7c}
  456. {$7c}                       {$7c}                       {$7c}active transition          {$7c}
  457. +-----------------------+-----------------------+---------------------------+
  458.  
  459.           fIGURE 6. oUTPUT rEGISTER a (ora), iNPUT rEGISTER a (ira)
  460.  
  461.  
  462.    reg 2 -- ddrb                          reg 3 -- ddra
  463.  +-+-+-+-+-+-+-+-+                      +-+-+-+-+-+-+-+-+
  464.  {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}                      {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}
  465.  +-+-+-+-+-+-+-+-+      -+              +-+-+-+-+-+-+-+-+      -+
  466.   {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- pb0 {$7c}               {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- pa0 {$7c}
  467.   {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- pb1 {$7c}               {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- pa1 {$7c}
  468.   {$7c} {$7c} {$7c} {$7c} {$7c} +------- pb2 {$7c}  data         {$7c} {$7c} {$7c} {$7c} {$7c} +------- pa2 {$7c}  data
  469.   {$7c} {$7c} {$7c} {$7c} +--------- pb3 {$7c}_ direction    {$7c} {$7c} {$7c} {$7c} +--------- pa3 {$7c}_ direction
  470.   {$7c} {$7c} {$7c} +----------- pb4 {$7c}  register     {$7c} {$7c} {$7c} +----------- pa4 {$7c}  register
  471.   {$7c} {$7c} +------------- pb5 {$7c}  "b" (ddrb)   {$7c} {$7c} +------------- pa5 {$7c}  "a" (ddra)
  472.   {$7c} +--------------- pb6 {$7c}               {$7c} +--------------- pa6 {$7c}
  473.   +----------------- pb7 {$7c}               +----------------- pa7 {$7c}
  474.                         -+                                     -+
  475.  
  476.   "0"  associated pb pin is an input     "0"  associated pa pin is an input
  477.        (high impedance)                       (high impedance)
  478.   "1"  associated pb pin is an output    "1"  associated pa pin is an output
  479.        whose level is determined by           whose level is determined by
  480.        orb register bit                       ora register bit
  481.  
  482.   fIGURE 7. dATA dIRECTION rEGISTER b    fIGURE 8. dATA dIRECTION rEGISTER a
  483.             (ddrb)                                 (ddra)
  484.  
  485.  
  486.  
  487. handshake control of data transfers
  488.  
  489. tHE  r6522  ALLOWS  POSITIVE  CONTROL  OF  DATA  TRANSFERS  BETWEEN THE SYSTEM
  490. PROCESSOR  AND  PERIPHERAL DEVICES THROUGH THE OPERATION OF "HANDSHAKE" LINES.
  491. pORT  a  LINES  (ca1, ca2) HANDSHAKE DATA ON BOTH A READ AND A WRITE OPERATION
  492. WHILE THE pORT b LINES (cb1, cb2) HANDSHAKE ON A WRITE OPERATION ONLY.
  493.  
  494. read handshake
  495.  
  496. pOSITIVE  CONTROL  OF  DATA  TRANSFERS FROM PERIPHERAL DEVICES INTO THE SYSTEM
  497. PROCESSOR  CAN  BE  ACCOMPLISHED  VERY  EFFECTIVELY USING rEAD hANDSHAKING. iN
  498. THIS  CASE,  THE  PERIPHERAL  DEVICE  MUST  GENERATE THE EQUIVALENT OF A "dATA
  499. rEADY"  SIGNAL  TO  THE PROCESSOR SIGNIFYING THAT VALID DATA IS PRESENT ON THE
  500. PERIPHERAL  PORT.  tHIS  SIGNAL  NORMALLY INTERRUPTS THE PROCESSOR, WHICH THEN
  501. READS  THE  DATA,  CAUSING GENERATION OF A "dATA tAKEN" SIGNAL. tHE PERIPHERAL
  502. DEVICE  RESPONDS  BY  MAKING  NEW DATA AVAILABLE. tHIS PROCESS CONTINUES UNTIL
  503. THE DATA TRANSFER IS COMPLETE.
  504.  
  505. iN  THE  r6522,  AUTOMATIC  "rEAD hANDSHAKING" IS POSSIBLE ON THE pERIPHERAL a
  506. pORT  ONLY.  tHE  ca1  INTERRUPT INPUT PIN ACCEPTS THE "dATA rEADY" SIGNAL AND
  507. ca2  GENERATES  THE  "dATA  tAKEN" SIGNAL. tHE "dATA rEADY" SIGNAL WILL SET AN
  508. INTERNAL  FLAG  WHICH  MAY  INTERRUPT  THE  PROCESSOR  OR  WHICH MAY BE POLLED
  509. UNDER  PROGRAM  CONTROL.  tHE  "dATA  tAKEN" SIGNAL CAN EITHER BE A PULSE OR A
  510. LEVEL  WHICH  IS  SET  LOW BY THE SYSTEM PROCESSOR AND IS CLEARED BY THE "dATA
  511. rEADY"  SIGNAL.  tHESE  OPTIONS  ARE  SHOWN  IN fIGURE 9 WHICH ILLUSTRATES THE
  512. NORMAL rEAD hANDSHAKE SEQUENCE.
  513.  
  514.  
  515.                      +-+ +-+ +-+ +-+   +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+
  516.                 02 --+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-
  517.                                                  {$7c}   {$7c}
  518.     "data ready"   ---------+   +----#-------+-------------#------+
  519.      ca1)                   +---+----#-------+   {$7c}   {$7c}            +------
  520.     ___                     {$7c}                    {$7c}   {$7c}            {$7c}
  521.     irq output     ---------+                    +---------#------+
  522.                             +--------#-----------+   {$7c}            +------
  523.     read ira                                 +---+   {$7c}            {$7c}
  524.     operation      ------------------#-------+   +---------#-------------
  525.                                                  {$7c}   {$7c}            {$7c}
  526.     "data taken"   ------------------------------+   {$7c}            +------
  527.     handshake mode                               +---------#------+
  528.     (ca2)                                        {$7c}   {$7c}
  529.                                                  {$7c}   {$7c}
  530.     "data taken"   ------------------#-----------+   +-----#-------------
  531.     pulse mode                                   +---+
  532.     (ca2)
  533.  
  534.                 fIGURE 9. rEAD hANDSHAKE tIMING (pORT a, oNLY)
  535.  
  536.  
  537. write handshake
  538.  
  539. tHE  SEQUENCE  OF  OPERATIONS  WHICH  ALLOWS  HANDSHAKING DATA FROM THE SYSTEM
  540. PROCESSOR  TO  A  PERIPHERAL DEVICE IS VERY SIMILAR TO THAT DESCRIBED FOR rEAD
  541. hANDSHAKING.  hOWEVER,  FOR wRITE  hANDSHAKING,  THE r6522 GENERATES THE "dATA
  542. rEADY"  SIGNAL  AND  THE  PERIPHERAL DEVICE MUST RESPOND WITH THE "dATA tAKEN"
  543. SIGNAL.  tHIS  CAN  BE ACCOMPLISHED ON BOTH THE pa PORT AND THE pb PORT ON THE
  544. r6522.  ca2  OR  cb2 ACT AS A "dATA rEADY" OUTPUT IN EITHER THE HANDSHAKE MODE
  545. OR  PULSE  MODE  AND  ca1  OR  cb1  ACCEPT  THE  "dATA  tAKEN" SIGNAL FROM THE
  546. PERIPHERAL  DEVICE,  SETTING  THE INTERRUPT FLAG AND CLEANING THE "dATA rEADY"
  547. OUTPUT. tHIS SEQUENCE IS SHOWN IN fIGURE 10.
  548.  
  549.  
  550.                      +-+ +-+ +-+ +-+   +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+
  551.                 02 --+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-
  552.                        {$7c}   {$7c}                                   {$7c}   {$7c}
  553.                        +---+                                   +---+
  554.     write ora,orb  ----+   +---------#---------------------#---+   +-----
  555.     operation                                                  {$7c}
  556.                                                                {$7c}
  557.     "data ready"   ----------+                +----------------------+
  558.     handshake mode           +-------#--------+                {$7c}     +---
  559.     (ca2,cb2)                {$7c}                {$7c}                {$7c}
  560.                              {$7c}                {$7c}                {$7c}
  561.     "data ready"   ----------+   +---#---------------------#---------+
  562.     pulse mode               +---+            {$7c}                {$7c}     +---
  563.     (ca2,cb2)                                 {$7c}                {$7c}     {$7c}
  564.                                               {$7c}                {$7c}     {$7c}
  565.     "data taken"   ---------------------------+   +--------#---+---------
  566.     (ca1,cb1)                                 +---+--------#---+     {$7c}
  567.     ___                                       {$7c}                      {$7c}
  568.     irq output     ------------------#--------+                      +---
  569.                                               +------------#---------+
  570.  
  571.                       fIGURE 10. wRITE hANDSHAKE tIMING
  572.  
  573.  
  574. sELECTION  OF  OPERATING  MODES  FOR  ca1, ca2, cb1 AND cb2 IS ACCOMPLISHED BY
  575. THE pERIPHERAL cONTROL rEGISTER (fIGURE 11).
  576.  
  577.  
  578.                   reg 12 -- peripheral control register
  579.                     +---+---+---+---+---+---+---+---+
  580.                     {$7c} 7 {$7c} 6 {$7c} 5 {$7c} 4 {$7c} 3 {$7c} 2 {$7c} 1 {$7c} 0 {$7c}
  581.                     +---+---+---+---+---+---+---+---+
  582.                      {$7c}         {$7c}  {$7c}  {$7c}         {$7c}  {$7c}
  583.                      +----+----+  {$7c}  +----+----+  {$7c}
  584.                           {$7c}       {$7c}       {$7c}       {$7c}
  585.          cb2 control -----+       {$7c}       {$7c}       +- ca1 interrupt control
  586. +-+-+-+------------------------+  {$7c}       {$7c}   +--------------------------+
  587. {$7c}7{$7c}6{$7c}5{$7c} operation              {$7c}  {$7c}       {$7c}   {$7c} 0 = negative active edge {$7c}
  588. +-+-+-+------------------------+  {$7c}       {$7c}   {$7c} 1 = positive active edge {$7c}
  589. {$7c}0{$7c}0{$7c}0{$7c} input neg. active edge {$7c}  {$7c}       {$7c}   +--------------------------+
  590. +-+-+-+------------------------+  {$7c}       +---- ca2 interrupt control
  591. {$7c}0{$7c}0{$7c}1{$7c} independent interrupt  {$7c}  {$7c}       +-+-+-+------------------------+
  592. {$7c} {$7c} {$7c} {$7c} input negative edge    {$7c}  {$7c}       {$7c}3{$7c}2{$7c}1{$7c} operation              {$7c}
  593. +-+-+-+------------------------+  {$7c}       +-+-+-+------------------------+
  594. {$7c}0{$7c}1{$7c}0{$7c} input pos. active edge {$7c}  {$7c}       {$7c}0{$7c}0{$7c}0{$7c} input neg. active edge {$7c}
  595. +-+-+-+------------------------+  {$7c}       +-+-+-+------------------------+
  596. {$7c}0{$7c}1{$7c}1{$7c} independent interrupt  {$7c}  {$7c}       {$7c}0{$7c}0{$7c}1{$7c} independent interrupt  {$7c}
  597. {$7c} {$7c} {$7c} {$7c} input positive edge    {$7c}  {$7c}       {$7c} {$7c} {$7c} {$7c} input negative edge    {$7c}
  598. +-+-+-+------------------------+  {$7c}       +-+-+-+------------------------+
  599. {$7c}1{$7c}0{$7c}0{$7c} handshake output       {$7c}  {$7c}       {$7c}0{$7c}1{$7c}0{$7c} input pos. active edge {$7c}
  600. +-+-+-+------------------------+  {$7c}       +-+-+-+------------------------+
  601. {$7c}1{$7c}0{$7c}1{$7c} pulse output           {$7c}  {$7c}       {$7c}0{$7c}1{$7c}1{$7c} independent interrupt  {$7c}
  602. +-+-+-+------------------------+  {$7c}       {$7c} {$7c} {$7c} {$7c} input positive edge    {$7c}
  603. {$7c}1{$7c}1{$7c}0{$7c} low output             {$7c}  {$7c}       +-+-+-+------------------------+
  604. +-+-+-+------------------------+  {$7c}       {$7c}1{$7c}0{$7c}0{$7c} handshake output       {$7c}
  605. {$7c}1{$7c}1{$7c}1{$7c} high output            {$7c}  {$7c}       +-+-+-+------------------------+
  606. +-+-+-+------------------------+  {$7c}       {$7c}1{$7c}0{$7c}1{$7c} pulse output           {$7c}
  607.     cb1 interrupt control --------+       +-+-+-+------------------------+
  608. +--------------------------+              {$7c}1{$7c}1{$7c}0{$7c} low output             {$7c}
  609. {$7c} 0 = negative active edge {$7c}              +-+-+-+------------------------+
  610. {$7c} 1 = positive active edge {$7c}              {$7c}1{$7c}1{$7c}1{$7c} high output            {$7c}
  611. +--------------------------+              +-+-+-+------------------------+
  612.  
  613.                  fIGURE 11. pERIPHERAL cONTROL rEGISTER (pcr)
  614.  
  615.  
  616. counters/timers
  617.  
  618. tHERE  ARE  TWO  INDEPENDENT  16-BIT-COUNTER/TIMERS  (CALLED tIMER 1 AND tIMER
  619. 2)  IN  THE r6522. eACH TIMER IS CONTROLLED BY WRITING BITS INTO THE aUXILIARY
  620. cONTROL rEGISTER (acr) TO SELECT THIS MODE OF OPERATION (fIGURE 12).
  621.  
  622.  
  623.                     reg 11 -- auxiliary control register
  624.                       +---+---+---+---+---+---+---+---+
  625.                       {$7c} 7 {$7c} 6 {$7c} 5 {$7c} 4 {$7c} 3 {$7c} 2 {$7c} 1 {$7c} 0 {$7c}
  626.                       +---+---+---+---+---+---+---+---+
  627.                        {$7c}     {$7c}  {$7c}  {$7c}         {$7c}  {$7c}   {$7c}
  628.                        +--+--+  {$7c}  +----+----+  {$7c}   +------ pa
  629.                           {$7c}     {$7c}       {$7c}       {$7c}
  630.       t1 timer control ---+     {$7c}       {$7c}       +---------- pb
  631. +-+-+----------------+-------+  {$7c}       {$7c}
  632. {$7c}7{$7c}6{$7c}operation       {$7c} pb7   {$7c}  {$7c}       {$7c}              latching enable/disable
  633. +-+-+----------------+-------+  {$7c}       {$7c}              +---------------------+
  634. {$7c}0{$7c}0{$7c}timed interrupt {$7c}       {$7c}  {$7c}       {$7c}              {$7c} 0 = disable latching{$7c}
  635. {$7c} {$7c} {$7c}each time t1 is {$7c}       {$7c}  {$7c}       {$7c}              {$7c} 1 = enable latching {$7c}
  636. {$7c} {$7c} {$7c}loaded          {$7c}disable{$7c}  {$7c}       {$7c}              +---------------------+
  637. +-+-+----------------+       {$7c}  {$7c}       {$7c}
  638. {$7c}0{$7c}1{$7c}continuous      {$7c}       {$7c}  {$7c}       {$7c}
  639. {$7c} {$7c} {$7c}interrupts      {$7c}       {$7c}  {$7c}       +---- shift register control
  640. +-+-+----------------+-------+  {$7c}  +-+-+-+-----------------------------------+
  641. {$7c}1{$7c}0{$7c}timed interrupt {$7c}one-   {$7c}  {$7c}  {$7c}4{$7c}3{$7c}2{$7c} operation                         {$7c}
  642. {$7c} {$7c} {$7c}each time t1 is {$7c}shot   {$7c}  {$7c}  +-+-+-+-----------------------------------+
  643. {$7c} {$7c} {$7c}loaded          {$7c}output {$7c}  {$7c}  {$7c}0{$7c}0{$7c}0{$7c} disabled                          {$7c}
  644. +-+-+----------------+-------+  {$7c}  +-+-+-+-----------------------------------+
  645. {$7c}1{$7c}1{$7c}continuous      {$7c}square {$7c}  {$7c}  {$7c}0{$7c}0{$7c}1{$7c} shift in under comtrol of t2      {$7c}
  646. {$7c} {$7c} {$7c}interrupts      {$7c}wave   {$7c}  {$7c}  +-+-+-+-----------------------------------+
  647. {$7c} {$7c} {$7c}                {$7c}output {$7c}  {$7c}  {$7c}0{$7c}1{$7c}0{$7c} shift in under control of 02      {$7c}
  648. +-+-+----------------+-------+  {$7c}  +-+-+-+-----------------------------------+
  649.                                 {$7c}  {$7c}0{$7c}1{$7c}1{$7c} shift in under control of ext.clk {$7c}
  650.    t2 timer control ------------+  +-+-+-+-----------------------------------+
  651. +-+-----------------+              {$7c}1{$7c}0{$7c}0{$7c} shift out free-running at t2 rate {$7c}
  652. {$7c}5{$7c} operation       {$7c}              +-+-+-+-----------------------------------+
  653. +-+-----------------+              {$7c}1{$7c}0{$7c}1{$7c} shift out under control of t2     {$7c}
  654. {$7c}0{$7c} timed interrupt {$7c}              +-+-+-+-----------------------------------+
  655. +-+-----------------+              {$7c}1{$7c}1{$7c}0{$7c} shift out under control of 02     {$7c}
  656. {$7c}1{$7c} count down with {$7c}              +-+-+-+-----------------------------------+
  657. {$7c} {$7c} pulses on pb6   {$7c}              {$7c}1{$7c}1{$7c}1{$7c} shift out under control of ext.clk{$7c}
  658. +-+-----------------+              +-+-+-+-----------------------------------+
  659.  
  660.                  fIGURE 12. aUXILIARY cONTROL rEGISTER (acr)
  661.  
  662.  
  663. tIMER 1 oPERATION
  664.  
  665. iNTERVAL  tIMER  t1  CONSISTS  OF  TWO  8-BIT LATCHES (fIGURE 13) AND A 16-BIT
  666. COUNTER  (fIGURE  14).  tHE  LATCHES STORE DATA WHICH IS TO BE LOADED INTO THE
  667. COUNTER.  aFTER  LOADING,  THE  COUNTER  DECREMENTS  AT  02  CLOCK  RATE. uPON
  668. REACHING  ZERO,  AN  INTERRUPT  FLAG  IS  SET,  AND  irq  GOES  LOW  IF THE t1
  669. INTERRUPT  IS  ENABLED.  tIMER  1  THEN  DISABLES  ANY  FURTHER  INTERRUPTS OR
  670. AUTOMATICALLY  TRANSFERS  THE  CONTENTS  OF  THE  LATCHES INTO THE COUNTER AND
  671. CONTINUES  TO  DECREMENT.  iN  ADDITION, THE TIMER MAY BE PROGRAMMED TO INVERT
  672. THE  OUTPUT  SIGNAL  ON  A PERIPHERAL PIN (pb7) EACH TIME IT "TIMES-OUT". eACH
  673. OF THESE MODES IS DISCUSSED SEPARATELY BELOW.
  674.  
  675. nOTE  THAT  THE  PROCESSOR  DOES NOT WRITE DIRECTLY INTO THE LOW-ORDER COUNTER
  676. (t1c-l).  iNSTEAD,  THIS  HALF OF THE COUNTER IS LOADED AUTOMATICALLY FROM THE
  677. LOW  ORDER  LATCH  (t1l-l)  WHEN  THE  PROCESSOR  WRITES  INTO  THE HIGH ORDER
  678. COUNTER  (t1c-h).  iN  FACT, IT MAY NOT BE NECESSARY TO WRITE TO THE LOW ORDER
  679. COUNTER  IN  SOME  APPLICATIONS  SINCE  THE  TIMING  OPERATION IS TRIGGERED BY
  680. WRITING TO THE HIGH ORDER LATCH.
  681.  
  682.  
  683.   reg 6 -- t1 low-order latch             reg 7 -- t1 high-order latch
  684.   +-+-+-+-+-+-+-+-+                       +-+-+-+-+-+-+-+-+
  685.   {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}                       {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}
  686.   +-+-+-+-+-+-+-+-+      -+               +-+-+-+-+-+-+-+-+        -+
  687.    {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- 1   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- 256   {$7c}
  688.    {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- 2   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- 512   {$7c}
  689.    {$7c} {$7c} {$7c} {$7c} {$7c} +------- 4   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} +------- 1024  {$7c}
  690.    {$7c} {$7c} {$7c} {$7c} +--------- 8   {$7c}_ count         {$7c} {$7c} {$7c} {$7c} +--------- 2048  {$7c}_ count
  691.    {$7c} {$7c} {$7c} +----------- 16  {$7c}  value         {$7c} {$7c} {$7c} +----------- 4096  {$7c}  value
  692.    {$7c} {$7c} +------------- 32  {$7c}                {$7c} {$7c} +------------- 8192  {$7c}
  693.    {$7c} +--------------- 64  {$7c}                {$7c} +--------------- 16384 {$7c}
  694.    +----------------- 128 {$7c}                +----------------- 32768 {$7c}
  695.                          -+                                        -+
  696.  
  697.  write - 8 bits loaded into t1           write - 8 bits loaded into t1 high-
  698.          low-order latches. this                 order latches. unlike reg 4
  699.          operation is no different               operation no latch to
  700.          than a write into reg 4                 counter transfers take place
  701.  
  702.  read  - 8 bits from t1 low order-       read  - 8 bits from t1 high-order
  703.          latches transferred to mpu.             latches transferred to mpu
  704.          unlike reg 4 operation,
  705.          this does not cause reset
  706.          of t1 interrupt flag
  707.  
  708.                    fIGURE 13. tIMER 1 (t1) lATCH rEGISTERS
  709.  
  710.  
  711.  reg 4 -- t1 low-order counter           reg 5 -- t1 high-order counter
  712.   +-+-+-+-+-+-+-+-+                       +-+-+-+-+-+-+-+-+
  713.   {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}                       {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}
  714.   +-+-+-+-+-+-+-+-+      -+               +-+-+-+-+-+-+-+-+        -+
  715.    {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- 1   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- 256   {$7c}
  716.    {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- 2   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- 512   {$7c}
  717.    {$7c} {$7c} {$7c} {$7c} {$7c} +------- 4   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} +------- 1024  {$7c}
  718.    {$7c} {$7c} {$7c} {$7c} +--------- 8   {$7c}_ count         {$7c} {$7c} {$7c} {$7c} +--------- 2048  {$7c}_ count
  719.    {$7c} {$7c} {$7c} +----------- 16  {$7c}  value         {$7c} {$7c} {$7c} +----------- 4096  {$7c}  value
  720.    {$7c} {$7c} +------------- 32  {$7c}                {$7c} {$7c} +------------- 8192  {$7c}
  721.    {$7c} +--------------- 64  {$7c}                {$7c} +--------------- 16384 {$7c}
  722.    +----------------- 128 {$7c}                +----------------- 32768 {$7c}
  723.                          -+                                        -+
  724.  
  725.  write - 8 bits loaded into t1           write - 8 bits loaded into t1
  726.          low-order latches. latch                high-order latches. also
  727.          contents are transferred                at this time both high- and
  728.          into low-order counter at               low-order latches transferred
  729.          the time the high-order                 into t1 counter. t1 interrupt
  730.          counter is loaded (reg 5)               flag also is reset
  731.  
  732.  read  - 8 bits from t1 low-order        read  - 8 bits from t1 high-order
  733.          counter transferred to mpu.             counter transferred to mpu
  734.          in addition t1 interrupt flag
  735.          is reset (bit 6 in interrupt
  736.          flag register)
  737.  
  738.                   fIGURE 14. tIMER 1 (t1) cOUNTER rEGISTERS
  739.  
  740.  
  741. tIMER 1 oNE-sHOT mODE
  742.  
  743. tHE  tIMER  1  ONE-SHOT  MODE GENERATES A SINGLE INTERRUPT FOR EACH TIMER LOAD
  744. OPERATION.  aS  WITH  ANY  INTERVAL TIMER, THE DELAY BETWEEN THE "WRITE t1c-h"
  745. OPERATION  AND  GENERATION  OF THE PROCESSOR INTERRUPT IS A DIRECT FUNCTION OF
  746. THE  DATA  LOADED  INTO THE TIMING COUNTER. iN ADDITION TO GENERATING A SINGLE
  747. INTERRUPT,  tIMER  1  CAN  BE PROGRAMMED TO PRODUCE A SINGLE NEGATIVE PULSE ON
  748. THE  pb7  PERIPHERAL  PIN.  wITH  THE  OUTPUT ENABLED (acr7=1) A "WRITE t1c-h"
  749. OPERATION  WILL  CAUSE  pb7 TO GO LOW. pb7 WILL RETURN HIGH WHEN tIMER 1 TIMES
  750. OUT. tHE RESULT IS A SINGLE PROGRAMMABLE WIDTH PULSE.
  751.                                            ___
  752. t1   INTERRUPT  FLAG  WILL  BE  SET,  THE  irq  PIN  WILL  GO  LOW  (INTERRUPT
  753. ENABLED),  AND  THE  SIGNAL ON pb7 WILL GO HIGH. aT THIS TIME THE COUNTER WILL
  754. CONTINUE   TO   DECREMENT  AT  SYSTEM  CLOCK  RATE.  tHIS  ALLOWS  THE  SYSTEM
  755. PROCESSOR  TO  READ  THE  CONTENTS  OF THE COUNTER TO DETERMINE THE TIME SINCE
  756. INTERRUPT.  hOWEVER,  THE  t1 INTERRUPT FLAG CANNOT BE SET AGAIN UNLESS IT HAS
  757. BEEN CLEARED AS DESCRIBED IN THIS SPECIFICATION.
  758.  
  759. tIMING FOR THE r6522 INTERVAL TIMER ONE-SHOT MODE IS SHOWN IN fIGURE 15.
  760.  
  761.  
  762.                      +-+ +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+ +-+ +-+ +-+
  763.                 02 --+ +-+ +-+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-+ +-+ +-+ +-
  764.                        {$7c}   {$7c}                           {$7c}
  765.                        +---+                           {$7c}
  766.        write t1c-h ----+   +-----------------#-------------------------
  767.         ___                {$7c}                           {$7c}
  768.         irq output --------------------------#---------+
  769.                            {$7c}                           +---------------
  770.                            {$7c}                           {$7c}
  771.         pb7 output --------+                           +---------------
  772.                            +-----------------#---------+
  773.                            {$7c} n {$7c}n-1{$7c}n-2{$7c}n-3{$7c}     {$7c} 0 {$7c}n{$7c} {$7c}n-1{$7c}n-2{$7c}n-3{$7c}
  774.                            {$7c}                           {$7c}
  775.                            {$7c}<---- n + 1.5 cycles ----->{$7c}
  776.  
  777.                    fIGURE 15. tIMER 1 oNE-sHOT mODE tIMING
  778.  
  779.  
  780. iN   THE  ONE-SHOT  MODE,  WRITING  INTO  THE  t1l-h  HAS  NO  EFFECT  ON  THE
  781. OPERATION  OF  tIMER  1.  hOWEVER, IT WILL BE NECESSARY TO ASSURE THAT THE LOW
  782. ORDER  LATCH  CONTAINS  THE  PROPER DATA BEFORE INITIATING THE COUNT-DOWN WITH
  783. A  "WRITE  t1c-h"  OPERATION.  wHEN  THE  PROCESSOR WRITES INTO THE HIGH ORDER
  784. COUNTER  (t1c-h),  THE  t1 INTERRUPT FLAG WILL BE CLEARED, THE CONTENTS OF THE
  785. LOW  ORDER  LATCH  WILL  BE  TRANSFERRED  INTO  THE LOW ORDER COUNTER, AND THE
  786. TIMER  WILL  BEGIN  TO  DECREMENT  AT  SYSTEM CLOCK RATE. iF THE pb7 OUTPUT IS
  787. ENABLED,  THIS  SIGNAL  WILL  GO  LOW ON THE 02 FOLLOWING THE WRITE OPERATION.
  788. wHEN  THE  COUNTER  REACHES  ZERO,  THE t1 INTERRUPT FLAG WILL BE SET, THE irq
  789. PIN  WILL  GO  LOW (INTERRUPT ENABLED), AND THE SIGNAL ON pb7 WILL GO HIGH. aT
  790. THIS  TIME  THE  COUNTER WILL CONTINUE TO DECREMENT AT SYSTEM CLOCK RATE. tHIS
  791. ALLOWS   THE  SYSTEM  PROCESSOR  TO  READ  THE  CONTENTS  OF  THE  COUNTER  TO
  792. DETERMINE  THE  TIME  SINCE  INTERRUPT.  hOWEVER, THE t1 INTERRUPT FLAG CANNOT
  793. BE SET AGAIN UNLESS IT HAS BEEN CLEARED AS DESCRIBED IN THIS SPECIFICATION.
  794.  
  795. tIMER 1 fREE-rUN mODE
  796.  
  797. tHE  MOST  IMPORTANT  ADVANTAGE  ASSOCIATED  WITH  THE  LATCHES  IN  t1 IS THE
  798. ABILITY  TO  PRODUCE  A  CONTINUOUS SERIES OF EVENLY SPACED INTERRUPTS AND THE
  799. ABILITY  TO  PRODUCE  A  SQUARE WAVE ON pb7 WHOSE FREQUENCY IS NOT AFFECTED BY
  800. VARIATIONS  IN  THE  PROCESSOR  INTERRUPT  RESPONSE TIME. tHIS IS ACCOMPLISHED
  801. IN THE "FREE-RUNNING" MODE.
  802.  
  803. iN  THE  FREE-RUNNING  MODE,  THE  INTERRUPT FLAG IS SET AND THE SIGNAL ON pb7
  804. IS   INVERTED  EACH  TIME  THE  COUNTER  REACHES  ZERO.  hOWEVER,  INSTEAD  OF
  805. CONTINUING  TO  DECREMENT  FROM ZERO AFTER A TIME-OUT, THE TIMER AUTOMATICALLY
  806. TRANSFERS   THE  CONTENTS  OF  THE  LATCH  INTO  THE  COUNTER  (16  BITS)  AND
  807. CONTINUES  TO  DECREMENT  FROM  THERE.  tHE  INTERRUPT  FLAG CAN BE CLEARED BY
  808. WRITING  t1c-h,  BY  READING  t1c-l  OR  BY  WRITING DIRECTLY INTO THE FLAG AS
  809. DESCRIBED  LATER.  hOWEVER,  IT  IS  NOT  NECESSARY  TO  REWRITE  THE TIMER TO
  810. ENABLE SETTING THE INTERRUPT FLAG ON THE NEXT TIME-OUT.
  811.  
  812. aLL   INTERVAL  TIMERS  IN  THE  r6522  ARE  "RE-TRIGGERABLE".  rEWRITING  THE
  813. COUNTER   WILL   ALWAYS  RE-INITIALIZE  THE  TIME-OUT  PERIOD.  iN  FACT,  THE
  814. TIME-OUT  CAN  BE  PREVENTED  COMPLETELY IF THE PROCESSOR CONTINUES TO REWRITE
  815. THE  TIMER  BEFORE  IT  REACHES  ZERO.  tIMER 1 WILL OPERATE IN THIS MANNER IF
  816. THE  PROCESSOR  WRITES  INTO  THE  HIGH  ORDER  COUNTER  (t1c-h).  hOWEVER, BY
  817. LOADING  THE  LATCHES  ONLY,  THE  PROCESSOR  CAN ACCESS THE TIMER DURING EACH
  818. DOWN-COUNTING  OPERATION  WITHOUT  AFFECTING THE TIME-OUT IN PROCESS. iNSTEAD,
  819. THE  DATA  LOADED  INTO  THE  LATCHES  WILL  DETERMINE  THE LENGTH OF THE NEXT
  820. TIME-OUT   PERIOD.   tHIS   CAPABILITY   IS   PARTICULARLY   VALUABLE  IN  THE
  821. FREE-RUNNING  MODE  WITH  THE  OUTPUT ENABLED. iN THIS MODE, THE SIGNAL ON pb7
  822. IS  INVERTED  AND  THE INTERRUPT FLAG IS SET WITH EACH TIME-OUT. bY RESPONDING
  823. TO   THE  INTERRUPTS  WITH  NEW  DATA  FOR  THE  LATCHES,  THE  PROCESSOR  CAN
  824. DETERMINE  THE  PERIOD  OF  THE  NEXT HALF CYCLE DURING EACH HALF CYCLE OF THE
  825. OUTPUT  SIGNAL  ON  pb7.  iN  THIS  MANNER,  VERY  COMPLEX  WAVEFORMS  CAN  BE
  826. GENERATED.
  827.  
  828. a  PRECAUTION  TO  TAKE  IN  THE  USE  OF pb7 AS THE TIMER OUTPUT CONCERNS THE
  829. dATA  dIRECTION  rEGISTER  CONTENTS  FOR  pb7.  bOTH  ddrb BIT 7 AND acr BIT 7
  830. MUST  BE  1  FOR  pb7  TO  FUNCTION  AS  THE TIMER OUTPUT. iF ONE IS 1 AND THE
  831. OTHER  IS  0,  THEN  pb7  FUNCTIONS  AS A NORMAL OUTPUT PIN, CONTROLLED BY orb
  832. BIT 7.
  833.  
  834.                     +-+ +-+ +-+   +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+ +-+
  835.                02 --+ +-+ +-+ +-#-+ +-+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-+ +-
  836.                           {$7c}               {$7c}                     {$7c}
  837.       write t1c-h     +---+               {$7c}                     {$7c}
  838.       operation   ----+   +-----#---------------------#-----------------
  839.        ___                {$7c}               {$7c}                     {$7c}
  840.        irq output --------------#---------+           #---------+
  841.                           {$7c}               +-----------#         +-------
  842.                           {$7c}               {$7c}                     {$7c}
  843.        pb7 output --------+               +-----------#---------+
  844.                           +-----#---------+                     +-------
  845.                           {$7c}               {$7c}                     {$7c}
  846.                           {$7c}< n+1.5 cycles>{$7c}<---- n+2 cycles --->{$7c}
  847.  
  848.                    fIGURE 16. tIMER 1 fREE-rUN mODE tIMING
  849.  
  850.  
  851. tIMER 2 oPERATION
  852.  
  853. tIMER  2  OPERATES  AS  AN INTERVAL TIMER (IN THE "ONE-SHOT" MODE ONLY), OR AS
  854. A  COUNTER  FOR  COUNTING  NEGATIVE PULSES ON THE pb6 PERIPHERAL PIN. a SINGLE
  855. CONTROL  BIT  IN  THE  aUXILIARY  cONTROL  rEGISTER  SELECTS BETWEEN THESE TWO
  856. MODES.  tHIS  TIMER  IS COMPRISED OF A "WRITE-ONLY" LOW-ORDER LATCH (t2l-l), A
  857. "READ-ONLY"  LOW-ORDER  COUNTER  (t2c-l)  AND  A READ/WRITE HIGH ORDER COUNTER
  858. (t2c-h).  tHE  COUNTER  REGISTERS  ACT AS A 16-BIT COUNTER WHICH DECREMENTS AT
  859. 02 RATE. fIGURE 17 ILLUSTRATES THE t2 lATCH/cOUNTER rEGISTERS.
  860.  
  861.  
  862.   reg 8 - t2 low-order latch/counter      reg 9 - t2 high-order counter
  863.   +-+-+-+-+-+-+-+-+                       +-+-+-+-+-+-+-+-+
  864.   {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}                       {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}
  865.   +-+-+-+-+-+-+-+-+      -+               +-+-+-+-+-+-+-+-+        -+
  866.    {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- 1   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- 256   {$7c}
  867.    {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- 2   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- 512   {$7c}
  868.    {$7c} {$7c} {$7c} {$7c} {$7c} +------- 4   {$7c}                {$7c} {$7c} {$7c} {$7c} {$7c} +------- 1024  {$7c}
  869.    {$7c} {$7c} {$7c} {$7c} +--------- 8   {$7c}_ count         {$7c} {$7c} {$7c} {$7c} +--------- 2048  {$7c}_ count
  870.    {$7c} {$7c} {$7c} +----------- 16  {$7c}  value         {$7c} {$7c} {$7c} +----------- 4096  {$7c}  value
  871.    {$7c} {$7c} +------------- 32  {$7c}                {$7c} {$7c} +------------- 8192  {$7c}
  872.    {$7c} +--------------- 64  {$7c}                {$7c} +--------------- 16384 {$7c}
  873.    +----------------- 128 {$7c}                +----------------- 32768 {$7c}
  874.                          -+                                        -+
  875.  
  876.  
  877.  write - 8 bits loaded into t2           write - 8 bits loaded into t2
  878.          low-order latch                         high-order counter. also,
  879.                                                  low-order latch transferred
  880.  read  - 8 bits from t2 low-order                to low-order counter. in
  881.          counter transferred to mpu.             addition t2 interrupt flag
  882.          t2 interrupt flag is reset              is reset
  883.  
  884.                                          read  - 8 bits from t2 high-order
  885.                                                  counter transferred to mpu
  886.  
  887.                fIGURE 17. tIMER 2 (t2) lATCH/cOUNTER rEGISTERS
  888.  
  889.  
  890. tIMER 2 oNE-sHOT mODE
  891.  
  892. aS  AN INTERVAL TIMER,  t2 OPERATES IN THE "ONE-SHOT" MODE SIMILAR TO tIMER 1.
  893. iN  THIS  MODE,  t2  PROVIDES  A  SINGLE  INTERRUPT  FOR  EACH  "WRITE  t2c-h"
  894. OPERATION.   aFTER  TIMING  OUT,  THE  COUNTER  WILL  CONTINUE  TO  DECREMENT.
  895. hOWEVER,  SETTING  OF  THE  INTERRUPT  FLAG IS DISABLED AFTER INITIAL TIME-OUT
  896. SO  THAT  IT  WILL  NOT BE SET BY THE COUNTER DECREMENTING AGAIN THROUGH ZERO.
  897. tHE  PROCESSOR  MUST  REWRITE  t2c-h  TO ENABLE SETTING OF THE INTERRUPT FLAG.
  898. tHE  INTERRUPT  FLAG  IS  CLEARED BY READING t2c-l OR BY WRITING t2c-h. tIMING
  899. FOR THIS OPERATION IS SHOWN IN fIGURE 18.
  900.  
  901.  
  902.                      +-+ +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+ +-+ +-+ +-+
  903.                 02 --+ +-+ +-+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-+ +-+ +-+ +-
  904.                        {$7c}   {$7c}                           {$7c}
  905.                        +---+                           {$7c}
  906.        write t2c-h ----+   +-----------------#-------------------------
  907.         ___                {$7c}                           {$7c}
  908.         irq output --------------------------#---------+
  909.                            {$7c}                           +---------------
  910.                            {$7c}                           {$7c}
  911.                            {$7c} n {$7c}n-1{$7c}n-2{$7c}n-3{$7c}     {$7c} 0 {$7c}n{$7c} {$7c}n-1{$7c}n-2{$7c}n-3{$7c}
  912.                            {$7c}<------ n+1.5 cycles ----->{$7c}
  913.  
  914.                           fIGURE 18. tIMER 2 oNE-sHOT mODE tIMING
  915.  
  916.  
  917. tIMER 2 pULSE cOUNTING mODE
  918.  
  919. iN   THE   PULSE   COUNTING   MODE,   t2  COUNTS  A  PREDETERMINED  NUMBER  OF
  920. NEGATIVE-GOING  PULSES  ON  pb6.  tHIS  IS  ACCOMPLISHED  BY  FIRST  LOADING A
  921. NUMBER  INTO  tIMER  2.  wRITING  INTO  t2c-h  CLEARS  THE  INTERRUPT FLAG AND
  922. ALLOWS  THE  COUNTER  TO  DECREMENT  EACH  TIME A PULSE IS APPLIED TO pb6. tHE
  923. INTERRUPT  FLAG  IS  SET  WHEN t2 COUNTS DOWN PAST ZERO. tHE COUNTER WILL THEN
  924. CONTINUE  TO  DECREMENT  WITH  EACH  PULSE ON pb6. hOWEVER, IT IS NECESSARY TO
  925. REWRITE  t2c-h  TO  ALLOW  THE INTERRUPT FLAG TO SET ON A SUBSEQUENT TIME-OUT.
  926. tIMING  FOR  THIS  MODE  IS  SHOWN  IN fIGURE 19. tHE PULSE MUST BE LOW ON THE
  927. LEADING EDGE OF 02.
  928.  
  929.  
  930.     write t2c-h     +---+
  931.     operation   ----+   +------------------------------------------------
  932.                 ------------------+ +-----+ +-----#-----+ +-----+ +------
  933.       pb6 input                   +-+     +-+           +-+     +-+
  934.      ___        ------------------------------------------------+
  935.      irq output                   {$7c}       {$7c}             {$7c}       +--------
  936.                                n  {$7c}  n-1  {$7c}  n-2     1  {$7c}   0   {$7c}  -1
  937.  
  938.                     fIGURE 19. tIMER 2 pULSE cOUNTING mODE
  939.  
  940.  
  941. shift register operation
  942.  
  943. tHE  sHIFT  rEGISTER  (sr)  PERFORMS SERIAL DATA TRANSFERS INTO AND OUT OF THE
  944. cb2  PIN  UNDER  CONTROL  OF AN INTERNAL MODULO-8 COUNTER. sHIFT PULSES CAN BE
  945. APPLIED  TO  THE  cb1  PIN  FROM  AN  EXTERNAL SOURCE OR, WITH THE PROPER MODE
  946. SELECTION,  SHIFT  PULSES  GENERATED INTERNALLY WILL APPEAR ON THE cb1 PIN FOR
  947. CONTROLLING EXTERNAL DEVICES.
  948.  
  949. tHE  CONTROL  BITS  WHICH  SELECT  THE  VARIOUS SHIFT REGISTER OPERATING MODES
  950. ARE  LOCATED  IN  THE  aUXILIARY  cONTROL  rEGISTER. fIGURE 20 ILLUSTRATES THE
  951. CONFIGURATION  OF  THE  sr  DATA  BITS AND fIGURE 21 SHOWS THE sr CONTROL BITS
  952. OF THE acr.
  953.  
  954.  
  955.  reg 10 -- shift register              reg 11 -- auxiliary control register
  956.  +-+-+-+-+-+-+-+-+                               +-+-+-+-+-+-+-+-+
  957.  {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}                               {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}
  958.  +-+-+-+-+-+-+-+-+   -+                          +-+-+-+-+-+-+-+-+
  959.   {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +---- {$7c}                                 {$7c}   {$7c}
  960.   {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +------ {$7c}                                 +-+-+
  961.   {$7c} {$7c} {$7c} {$7c} {$7c} +-------- {$7c}  shift                            {$7c}
  962.   {$7c} {$7c} {$7c} {$7c} +---------- {$7c}_ register                         {$7c}  shift register
  963.   {$7c} {$7c} {$7c} +------------ {$7c}  bits                             +- mode control
  964.   {$7c} {$7c} +-------------- {$7c}              +-+-+-+---------------------------------+
  965.   {$7c} +---------------- {$7c}              {$7c}4{$7c}3{$7c}2{$7c}operation                        {$7c}
  966.   +------------------ {$7c}              +-+-+-+---------------------------------+
  967.                      -+              {$7c}0{$7c}0{$7c}0{$7c}disabled                         {$7c}
  968.                                      {$7c}0{$7c}0{$7c}1{$7c}shift in under control of t2     {$7c}
  969.  notes                               {$7c}0{$7c}1{$7c}0{$7c}shift in under control of 02     {$7c}
  970.  1  when shifting out bit 7 is the   {$7c}0{$7c}1{$7c}1{$7c}shift in under cont. of ext.clk  {$7c}
  971.     first bit out and simultaneously {$7c}1{$7c}0{$7c}0{$7c}shift out free running at t2 rate{$7c}
  972.     is rotated back into bit 0       {$7c}1{$7c}0{$7c}1{$7c}shift out under control of t2    {$7c}
  973.  2  when shifting in bits initially  {$7c}1{$7c}1{$7c}0{$7c}shift out under control of 02    {$7c}
  974.     enter bit 0 and are shifted      {$7c}1{$7c}1{$7c}1{$7c}shift out under cont. of ext.clk {$7c}
  975.     towards bit 7                    +-+-+-+---------------------------------+
  976.  
  977.      fIGURE 20. sHIFT REGISTERS           fIGURE 21. sHIFT rEGISTER mODES
  978.  
  979.  
  980. sr mODE 0 -- dISABLED
  981.  
  982. mODE  0  DISABLES  THE  sHIFT  rEGISTER.  iN  THIS MODE THE MICROPROCESSOR CAN
  983. WRITE  OR  READ  THE  sr  AND  THE  sr  WILL  SHIFT  ON EACH cb1 POSITIVE EDGE
  984. SHIFTING  IN  THE  VALUE  ON  cb2.  iN  THIS  MODE  THE  sr  iNTERRUPT fLAG IS
  985. DISABLED (HELD TO A LOGIC 0).
  986.  
  987.  
  988. sr mODE 1 -- sHIFT IN uNDER cONTROL OF t2
  989.  
  990. iN  MODE  1,  THE  SHIFTING  RATE  IS CONTROLLED BY THE LOW ORDER 8 BITS OF t2
  991. (fIGURE  22).  sHIFT  PULSES  ARE GENERATED ON THE cb1 PIN TO CONTROL SHIFTING
  992. IN  EXTERNAL  DEVICES.  tHE TIME BETWEEN TRANSITIONS OF THIS OUTPUT CLOCK IS A
  993. FUNCTION  OF  THE  SYSTEM  CLOCK  PERIOD  AND THE CONTENTS OF THE LOW ORDER t2
  994. LATCH (n).
  995.  
  996.  
  997.          02  +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
  998.             -+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-
  999. write or read  +---+         {$7c}           {$7c}           {$7c}           {$7c}                           {$7c}
  1000. shift reg   ---+   +------------------------------------------------------#----------------------
  1001.                   n+2 cycles {$7c}<--------->{$7c}<--------->{$7c} n+2 cycles                            {$7c}
  1002. cb1 output  -----------------+     1     +-----------+     2     +--------#--+     8     +-------
  1003. shift clock                  +-----------+           +-----------+           +-----------+   {$7c}
  1004.                                                                                              {$7c}
  1005.   cb2 input -----------------------\/---1---\/-------------\/---2---\/----#--------\/---8---\/---
  1006.   data      -----------------------/\-------/\-------------/\-------/\----#--------/\-------/\---
  1007.                                                                                              {$7c}
  1008.         ___    +-----------------------------------------------------------------------------+
  1009.         irq ---+                                                                             +---
  1010.  
  1011.               fIGURE 22. sr mODE 1 -- sHIFT iN uNDER t2 cONTROL
  1012.  
  1013.  
  1014. tHE  SHIFTING  OPERATION  IS  TRIGGERED  BY THE READ OR WRITE OF THE sr IF THE
  1015. sr  FLAG  IS  SET IN THE ifr. oTHERWISE THE FIRST SHIFT WILL OCCUR AT THE NEXT
  1016. TIME-OUT  OF  t2  AFTER  A READ OR WRITE OF THE sr. dATA IS SHIFTED FIRST INTO
  1017. THE  LOW  ORDER  BIT  OF sr AND IS THEN SHIFTED INTO THE NEXT HIGHER ORDER BIT
  1018. OF  THE  SHIFT  REGISTER  ON  THE NEGATIVE-GOING EDGE OF EACH CLOCK PULSE. tHE
  1019. INPUT  DATA  SHOULD  CHANGE  BEFORE  THE  POSITIVE-GOING EDGE OF THE cb1 CLOCK
  1020. PULSE.  tHIS  DATA  IS  SHIFTED  INTO SHIFT REGISTER DURING THE 02 CLOCK CYCLE
  1021. FOLLOWING  THE  POSITIVE-GOING  EDGE OF THE cb1 CLOCK PULSE. aFTER 8 cb1 CLOCK
  1022. PULSES, THE SHIFT REGISTER INTERRUPT FLAG WILL SET AND irq WILL GO LOW.
  1023.  
  1024.  
  1025. sr mODE 2 -- sHIFT IN uNDER 02 cONTROL
  1026.  
  1027. iN  MODE  2,  THE  SHIFT  RATE  IS  A  DIRECT  FUNCTION  OF  THE  SYSTEM CLOCK
  1028. FREQUENCY  (fIGURE  23).  cb1  BECOMES  AN OUTPUT WHICH GENERATES SHIFT PULSES
  1029. FOR   CONTROLLING  EXTERNAL  DEVICES.  tIMER  2  OPERATES  AS  AN  INDEPENDENT
  1030. INTERVAL  TIMER  AND  HAS NO EFFECT ON sr. tHE SHIFTING OPERATION IS TRIGGERED
  1031. BY  READING  OR  WRITING THE sHIFT rEGISTER. dATA IS SHIFTED, FIRST INTO BIT 0
  1032. AND  IS  THEN  SHIFTED INTO THE NEXT HIGHER ORDER BIT OF THE SHIFT REGISTER ON
  1033. THE  TRAILING  EDGE  OF  EACH  02 CLOCK PULSE. aFTER 8 CLOCK PULSES, THE SHIFT
  1034. REGISTER  INTERRUPT  FLAG  WILL  BE  SET,  AND  THE OUTPUT CLOCK PULSES ON cb1
  1035. WILL STOP.
  1036.  
  1037.  
  1038.              +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
  1039.          02 -+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-
  1040.                +---+         {$7c}   {$7c}                                                       {$7c}   {$7c}
  1041.     read sr ---+   +-----------------------------------------------------------------------------
  1042.                              {$7c}   {$7c}                                                       {$7c}   {$7c}
  1043. cb1 output  -----------------+   +---+   +---+   +---+   +---+   +---+   +---+   +---+   +-------
  1044. shift clock                  +---+   +---+   +---+   +---+   +---+   +---+   +---+   +---+   {$7c}
  1045.                                                                                          {$7c}
  1046.   cb2 input -----------------\/---1--\/---2--\/---3--\/---4--\/---5--\/---6--\/---7--\/---8--\/--
  1047.   data      -----------------/\------/\------/\------/\------/\------/\------/\------/\------/\--
  1048.                                                                                              {$7c}
  1049.         ___ ---------------------------------------------------------------------------------+
  1050.         irq                                                                                  +---
  1051.  
  1052.               fIGURE 23. sr mODE 2 -- sHIFT iN uNDER 02 cONTROL
  1053.  
  1054.  
  1055. sr mODE 3 -- sHIFT IN uNDER cb1 cONTROL
  1056.  
  1057. iN  MODE  3,  EXTERNAL  PIN  cb1  BECOMES AN INPUT (fIGURE 24). tHIS ALLOWS AN
  1058. EXTERNAL  DEVICE  TO  LOAD  THE  SHIFT  REGISTER  AT  ITS  OWN PACE. tHE SHIFT
  1059. REGISTER  COUNTER  WILL  INTERRUPT  THE  PROCESSOR  EACH TIME 8 BITS HAVE BEEN
  1060. SHIFTED  IN.  hOWEVER,  THE  SHIFT REGISTER COUNTER DOES NOT STOP THE SHIFTING
  1061. OPERATION;  IT  ACTS  SIMPLY  AS A PULSE COUNTER. rEADING OR WRITING THE sHIFT
  1062. rEGISTER  RESETS  THE  iNTERRUPT  fLAG AND INITIALIZES THE sr COUNTER TO COUNT
  1063. ANOTHER 8 PULSES.
  1064.  
  1065.  
  1066.              +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
  1067.          02 -+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-
  1068.                                                                          {$7c}
  1069. cb1 output  ---+    1    +---------+    2    +--------#----+    8    +-------
  1070. shift clock    +---------+         +---------+             +---------+
  1071.                                                                          {$7c}
  1072.   cb2 input -------\/----1---\/--------\/----2---\/---#--------\/----8---\/--
  1073.   data      -------/\--------/\--------/\--------/\---#--------/\--------/\--
  1074.         ___                                                              {$7c}
  1075.         irq -------------------------------------------------------------+
  1076.                                                                          +---
  1077.  
  1078.                 fIGURE 24. sr mODE 3 -- sHIFT iN uNDER cb1 cONTROL
  1079.  
  1080.  
  1081. nOTE   THAT   THE  DATA  IS  SHIFTED  DURING  THE  FIRST  SYSTEM  CLOCK  CYCLE
  1082. FOLLOWING  THE  POSITIVE-GOING  EDGE  OF THE cb1 SHIFT PULSE. fOR THIS REASON,
  1083. DATA  MUST  BE  HELD  STABLE  DURING  THE FIRST FULL CYCLE FOLLOWING cb1 GOING
  1084. HIGH.
  1085.  
  1086.  
  1087. sr mODE 4 -- sHIFT oUT uNDER t2 cONTROL (fREE-rUN)
  1088.  
  1089. mODE  4  IS  VERY  SIMILAR  TO MODE 5 IN WHICH THE SHIFTING RATE IS SET BY t2.
  1090. hOWEVER,  IN  MODE  4  THE  sr  cOUNTER  DOES  NOT STOP THE SHIFTING OPERATION
  1091. (fIGURE  25).  sINCE  THE sHIFT rEGISTER BIT 7 (sr7) IS RECIRCULATED BACK INTO
  1092. BIT  0,  THE  8  BITS  LOADED INTO THE sHIFT rEGISTER WILL BE CLOCKED ONTO cb2
  1093. REPETITIVELY. iN THIS MODE THE sHIFT rEGISTER cOUNTER IS DISABLED.
  1094.  
  1095.  
  1096.         02  +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
  1097.            -+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-
  1098.               +---+         {$7c}           {$7c}           {$7c}           {$7c}           {$7c}           {$7c}
  1099. write sr   ---+   +---------------------------------------------------#---------------------------------------------
  1100.                  n+2 cycles {$7c}<--------->{$7c}<--------->{$7c} n+2 cycles{$7c}           {$7c}           {$7c}
  1101. cb1 output -----------------+     1     +-----------+     2     +-----#-----+     8     +-----------+     9     +---
  1102. shift clock                 +-----------+           +-----------+           +-----------+           +-----------+
  1103.  
  1104. cb2 output -------------------\/-----------1----------\/-------2------#-------\/-----------8----------\/-----1------
  1105. data       -------------------/\----------------------/\--------------#-------/\----------------------/\------------
  1106.  
  1107.         fIGURE 25. sr mODE 4 -- sHIFT oUT uNDER t2 cONTROL (fREE-rUN)
  1108.  
  1109.  
  1110. sr mODE 5 -- sHIFT oUT uNDER t2 cONTROL
  1111.  
  1112. iN  MODE  5,  THE  SHIFT RATE IS CONTROLLED BY t2 (AS IN MODE 4). tHE SHIFTING
  1113. OPERATION  IS  TRIGGERED  BY THE READ OR WRITE OF THE sr IF THE sr FLAG IS SET
  1114. IN  THE  ifr  (fIGURE  26).  oTHERWISE  THE FIRST SHIFT WILL OCCUR AT THE NEXT
  1115. TIME-OUT  OF  t2  AFTER  A READ OR WRITE OF THE sr. hOWEVER, WITH EACH READ OR
  1116. WRITE  OF  THE  SHIFT  REGISTER THE sr cOUNTER IS RESET AND 8 BITS ARE SHIFTED
  1117. ONTO  cb2.  aT  THE  SAME TIME, 8 SHIFT PULSES ARE GENERATED ON cb1 TO CONTROL
  1118. SHIFTING  IN  EXTERNAL  DEVICES.  aFTER  THE  8  SHIFT PULSES, THE SHIFTING IS
  1119. DISABLED,  THE  sr  iNTERRUPT  fLAG  IS  SET  AND cb2 REMAINS AT THE LAST DATA
  1120. LEVEL.
  1121.  
  1122.  
  1123.             +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+ +-+ +-+
  1124.          02 + +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-+ +-+ +
  1125.               +---+         {$7c}       {$7c}       {$7c}       {$7c}         {$7c}       {$7c}
  1126.    write sr --+   +----------------------------------------------------------
  1127.                  n+2 cycles {$7c}<----->{$7c}<----->{$7c} n+2 cycles      {$7c}       {$7c}
  1128.  cb1 output ----------------+   1   +-------+   2   +---#-----+   8   +------
  1129.  shift clock                +-------+       +-------+         +-------+
  1130.                                                                       {$7c}
  1131.  cb2 output --------------------\/------1------\/---2---#--------\/-----8----
  1132.  data       --------------------/\-------------/\-------#--------/\----------
  1133.         ___                                                           {$7c}
  1134.         irq ----------------------------------------------------------+
  1135.                                                                       +------
  1136.  
  1137.               fIGURE 26. sr mODE 5 -- sHIFT oUT uNDER t2 cONTROL
  1138.  
  1139.  
  1140. sr mODE 6 -- sHIFT oUT uNDER 02 cONTROL
  1141.  
  1142. iN MODE 6, THE SHIFT RATE IS CONTROLLED BY THE 02 SYSTEM CLOCK (fIGURE 27).
  1143.  
  1144.  
  1145.             +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-+ +-+ +-+
  1146.          02 + +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+ +-+ +-+ +
  1147.               +---+     {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}     {$7c}   {$7c}   {$7c}   {$7c}
  1148.    write sr --+   +----------------------------------------------------------
  1149.                         {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}   {$7c}     {$7c}   {$7c}   {$7c}   {$7c}
  1150.  cb1 output ------------+ 1 +---+ 2 +---+ 3 +---+ 4 +--#--+ 7 +---+ 8 +------
  1151.  shift clock            +---+   +---+   +---+   +---+     +---+   +---+
  1152.                                                                   {$7c}   {$7c}
  1153.  cb2 output -------------\/---1--\/---2--\/---3--\/--4-#---\/---7--\/---8----
  1154.  data       -------------/\------/\------/\------/\----#---/\------/\--------
  1155.         ___                                                           {$7c}
  1156.         irq ----------------------------------------------------------+
  1157.                                                                       +------
  1158.  
  1159.               fIGURE 27. sr mODE 6 -- sHIFT oUT uNDER 02 cONTROL
  1160.  
  1161.  
  1162. sr mODE 7 -- sHIFT oUT uNDER cb1 cONTROL
  1163.  
  1164. iN  MODE  7,  SHIFTING  IS  CONTROLLED  BY PULSES APPLIED TO THE cb1 PIN BY AN
  1165. EXTERNAL  DEVICE  (fIGURE  28). tHE sr COUNTER SETS THE sr iNTERRUPT fLAG EACH
  1166. TIME  IT  COUNTS  8 PULSES BUT IT DOES NOT DISABLE THE SHIFTING FUNCTION. eACH
  1167. TIME   THE  MICROPROCESSOR,  WRITES  OR  READS  THE  SHIFT  REGISTER,  THE  sr
  1168. iNTERRUPT  fLAG  IS  RESET AND THE sr COUNTER IS INITIALIZED TO BEGIN COUNTING
  1169. THE  NEXT  8  SHIFT  PULSES  ON PIN cb1.  aFTER 8 SHIFT PULSES,  THE iNTERRUPT
  1170. fLAG  IS  SET.  tHE  MICROPROCESSOR  CAN THEN LOAD THE SHIFT REGISTER WITH THE
  1171. NEXT BYTE OF DATA.
  1172.  
  1173.  
  1174.             +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-#-+ +-+ +-+ +-+
  1175.          02 + +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+ +
  1176.               +---+                                                   {$7c}
  1177.    write sr --+   +----------------------------------------------------------
  1178.                                                                       {$7c}
  1179.  cb1 input  --------------+   1   +---------------+   2   +---#----+  {$7c}  8  +
  1180.  shift clock              +-------+               +-------+        +--------+
  1181.                                                                       {$7c}
  1182.  cb2 output --------------\/-----------1----------\/-----2----#----\/---8----
  1183.  data       --------------/\----------------------/\----------#----/\--------
  1184.         ___                                                           {$7c}
  1185.         irq ----------------------------------------------------------+
  1186.                                                                       +------
  1187.  
  1188.              fIGURE 28. sr mODE 7 -- sHIFT oUT uNDER cb1 cONTROL
  1189.  
  1190.  
  1191.  
  1192. interrupt operation
  1193.  
  1194. cONTROLLING    INTERRUPTS   WITHIN   THE  r6522   INVOLVES   THREE   PRINCIPAL
  1195. OPERATIONS.  tHESE  ARE  FLAGGING  THE  INTERRUPTS,  ENABLING  INTERRUPTS  AND
  1196. SIGNALING  TO  THE  PROCESSOR THAT AN ACTIVE INTERRUPT EXISTS WITHIN THE CHIP.
  1197. iNTERRUPT  FLAGS  ARE  SET  IN THE iNTERRUPT fLAG rEGISTER (ifr) BY CONDITIONS
  1198. DETECTED  WITHIN  THE  r6522  OR  ON INPUTS TO THE r6522. tHESE FLAGS NORMALLY
  1199. REMAIN  SET  UNTIL  THE  INTERRUPT  HAS BEEN SERVICED. tO DETERMINE THE SOURCE
  1200. OF  AN  INTERRUPT,  THE MICROPROCESSOR MUST EXAMINE THESE FLAGS IN ORDER, FROM
  1201. HIGHEST TO LOWEST PRIORITY.
  1202.  
  1203. aSSOCIATED  WITH  EACH  INTERRUPT  FLAG  IS  AN  INTERRUPT  ENABLE  BIT IN THE
  1204. iNTERRUPT   eNABLE  rEGISTER  (ier).  tHIS  CAN  BE  SET  OR  CLEARED  BY  THE
  1205. PROCESSOR   TO  ENABLE  INTERRUPTING  THE  PROCESSOR  FROM  THE  CORRESPONDING
  1206. INTERRUPT  FLAG.  iF  AN INTERRUPT FLAG IS SET TO A LOGIC 1 BY AN INTERRUPTING
  1207. CONDITION,  AND  THE  CORRESPONDING  INTERRUPT  ENABLE  BIT IS SET TO A 1, THE
  1208. iNTERRUPT  rEQUEST  (irq)  OUTPUT  WILL  GO  LOW.  irq  IS AN "OPEN-COLLECTOR"
  1209. OUTPUT  WHICH  CAN  BE  "WIRE-or'ED"  WITH  OTHER  DEVICES  IN  THE  SYSTEM TO
  1210. INTERRUPT THE PROCESSOR.
  1211.  
  1212.  
  1213. iNTERRUPT fLAG rEGISTER (ifr)
  1214.  
  1215. iN  THE  r6522,  ALL  THE INTERRUPT FLAGS ARE CONTAINED IN ONE REGISTER, I.E.,
  1216. THE  ifr  (fIGURE  29).  iN ADDITION, BIT 7 OF THIS REGISTER WILL BE READ AS A
  1217. LOGIC   1  WHEN  AN  INTERRUPT  EXISTS  WITHIN  THE  CHIP.  tHIS  ALLOWS  VERY
  1218. CONVENIENT  POLLING  OF  SEVERAL  DEVICES WITHIN A SYSTEM TO LOCATE THE SOURCE
  1219. OF AN INTERRUPT.
  1220.  
  1221.  
  1222.       reg 13 -- interrupt flag register
  1223. +-+-+-+-+-+-+-+-+
  1224. {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}             set by                    cleared by
  1225. +-+-+-+-+-+-+-+-+    +-----------------------+------------------------------+
  1226.  {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--ca2{$7c} ca2 active edge       {$7c} read or write reg 1 (ora)*   {$7c}
  1227.  {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c}       +-----------------------+------------------------------+
  1228.  {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--ca1--{$7c} ca1 active edge       {$7c} read or write reg 1 (ora)    {$7c}
  1229.  {$7c} {$7c} {$7c} {$7c} {$7c} {$7c}         +-----------------------+------------------------------+
  1230.  {$7c} {$7c} {$7c} {$7c} {$7c} +shift reg{$7c} complete 8 shifts     {$7c} read or write shift reg      {$7c}
  1231.  {$7c} {$7c} {$7c} {$7c} {$7c}           +-----------------------+------------------------------+
  1232.  {$7c} {$7c} {$7c} {$7c} +-cb2-------{$7c} cb2 active edge       {$7c} read or write orb*           {$7c}
  1233.  {$7c} {$7c} {$7c} {$7c}             +-----------------------+------------------------------+
  1234.  {$7c} {$7c} {$7c} +-cb1---------{$7c} cb1 active edge       {$7c} read or write orb            {$7c}
  1235.  {$7c} {$7c} {$7c}               +-----------------------+------------------------------+
  1236.  {$7c} {$7c} +-timer 2-------{$7c} time-out of t2        {$7c} read t2 low or write t2 high {$7c}
  1237.  {$7c} {$7c}                 +-----------------------+------------------------------+
  1238.  {$7c} +-timer 1---------{$7c} time-out of t1        {$7c} read t1 low or write t1 high {$7c}
  1239.  {$7c}                   +-----------------------+------------------------------+
  1240.  +-irq---------------{$7c} any enabled interrupt {$7c} clear all interrupts         {$7c}
  1241.                      +-----------------------+------------------------------+
  1242.  
  1243.   * if the ca2/cb2 control in the pcr is selected as "independent"
  1244.     interrupt input, then reading or writing the output register
  1245.     ora/orb will not clear the flag bit. instead, the bit must be
  1246.     cleared by writing into the ifr, as described previously.
  1247.  
  1248.                    fIGURE 29. iNTERRUPT fLAG rEGISTER (ifr)
  1249.  
  1250.  
  1251. tHE  iNTERRUPT  fLAG  rEGISTER  (ifr)  MAY  BE READ DIRECTLY BY THE PROCESSOR.
  1252. iN  ADDITION,  INDIVIDUAL  FLAG  BITS MAY BE CLEARED BY WRITING A "1" INTO THE
  1253. APPROPRIATE  BIT  OF  THE  ifr.  wHEN  THE  PROPER  CHIP  SELECT  AND REGISTER
  1254. SIGNALS  ARE  APPLIED  TO  THE  CHIP, THE CONTENTS OF THIS REGISTER ARE PLACED
  1255. ON  THE  DATA  BUS.  bIT  7  INDICATES  THE STATUS OF THE irq OUTPUT. tHIS BIT
  1256. CORRESPONDS  TO THE LOGIC FUNCTION:  irq = ifr6Xier6 + ifr5Xier5 + ifr4Xier4 +
  1257. + ifr3Xier3 + ifr2Xier2 + ifr1Xier1 + ifr0Xier0
  1258.  
  1259.                                     nOTE:
  1260.  
  1261.                          X = LOGIC and, + = LOGIC or
  1262.  
  1263. tHE  ifr  BIT  7  IS  NOT  A FLAG. tHEREFORE, THIS BIT IS NOT DIRECTLY CLEARED
  1264. BY  WRITING  A  LOGIC  1  INTO  IT. iT CAN ONLY BE CLEARED BY CLEARING ALL THE
  1265. FLAGS   IN  THE  REGISTER  OR  BY  DISABLING  ALL  THE  ACTIVE  INTERRUPTS  AS
  1266. DISCUSSED IN NEXT SECTION.
  1267.  
  1268.  
  1269. iNTERRUPT eNABLE rEGISTER (ier)
  1270.  
  1271. fOR  EACH  INTERRUPT  FLAG  IN  ifr,  THERE  IS  A  CORRESPONDING  BIT  IN THE
  1272. iNTERRUPT  eNABLE  rEGISTER  (ier) (fIGURE 30). iNDIVIDUAL BITS IN THE ier CAN
  1273. BE  SET  OR  CLEARED  TO  FACILITATE CONTROLLING INDIVIDUAL INTERRUPTS WITHOUT
  1274. AFFECTING  OTHERS.  tHIS  IS  ACCOMPLISHED  BY  WRITING TO THE ier AFTER BIT 7
  1275. SET  OR  CLEARED  TO,  IN TURN, SET OR CLEAR SELECTED ENABLE BITS. iF BIT 7 OF
  1276. THE  DATA  PLACED  ON  THE SYSTEM DATA BUS DURING THIS WRITE OPERATION IS A 0,
  1277. EACH  1  IN  BITS  6  THROUGH  0  CLEARS THE CORRESPONDING BIT IN THE ier. fOR
  1278. EACH ZERO IN BITS 6 THROUGH 0, THE CORRESPONDING BIT IS UNAFFECTED.
  1279.  
  1280.  
  1281.                  reg 14 -- interrupt enable register
  1282.                           +-+-+-+-+-+-+-+-+
  1283.                           {$7c}7{$7c}6{$7c}5{$7c}4{$7c}3{$7c}2{$7c}1{$7c}0{$7c}
  1284.                           +-+-+-+-+-+-+-+-+            -+
  1285.                            {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +--- ca2       {$7c}
  1286.                            {$7c} {$7c} {$7c} {$7c} {$7c} {$7c} +----- ca1       {$7c}  0 = interrupt
  1287.                            {$7c} {$7c} {$7c} {$7c} {$7c} +------- shift reg {$7c}      disabled
  1288.                            {$7c} {$7c} {$7c} {$7c} +--------- cb2       {$7c}_
  1289.                            {$7c} {$7c} {$7c} +----------- cb1       {$7c}
  1290.                            {$7c} {$7c} +------------- timer 2   {$7c}  1 = interrupt
  1291.                            {$7c} +--------------- timer 1   {$7c}      enabled
  1292.                            +----------------- set/clear {$7c}
  1293.                                                        -+
  1294.  
  1295.          notes:
  1296.          1  if bit 7 is a "0", then each "1" in bits 0-6 disables the
  1297.             corresponding interrupt.
  1298.          2  if bit 7 is a "1",  then each "1" in bits 0-6 enables the
  1299.             corresponding interrupt.
  1300.          3  if a read of this register is done, bit 7 will be "1" and
  1301.             all other bits will reflect their enable/disable state.
  1302.  
  1303.                   fIGURE 30. iNTERRUPT eNABLE rEGISTER (ier)
  1304.  
  1305.  
  1306. sELECTED  BITS  IN  THE  ier  CAN  BE  SET BY WRITING TO THE ier WITH BIT 7 IN
  1307. THE  DATA  WORD  SET  TO  A  LOGIC 1. iN THIS CASE, EACH 1 IN BITS 6 THROUGH 0
  1308. WILL  SET  THE  CORRESPONDING  BIT.  fOR EACH ZERO, THE CORRESPONDING BIT WILL
  1309. BE   UNAFFECTED.   tHIS   INDIVIDUAL  CONTROL  OF  THE  SETTING  AND  CLEARING
  1310. OPERATIONS  ALLOWS  VERY  CONVENIENT  CONTROL  OF THE INTERRUPTS DURING SYSTEM
  1311. OPERATION.
  1312.  
  1313. iN   ADDITION  TO  SETTING  AND  CLEARING  ier  BITS,  THE  CONTENTS  OF  THIS
  1314. REGISTER CAN BE READ AT ANY TIME. bIT 7 WILL BE READ AS A LOGIC 1, HOWEVER.
  1315.  
  1316.