Changeset 219


Ignore:
Timestamp:
Nov 5, 2010, 2:48:03 PM (9 years ago)
Author:
mulligan
Message:

Additional features of timer 2 auto reload implemented.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Deliverables/D4.1/ASMInterpret.ml

    r218 r219  
    13041304;;
    13051305
    1306 let timer2 status ticks =
    1307   let (tf2,exf2,rclk,tclk),(exen2,tr2,ct2,cp2) = bits_of_byte status.t2con in
    1308     (* Timer2 is enabled *)
    1309     if tr2 then
    1310       (* Counter/interval mode *)
    1311       if ct2 then
    1312         let word = mk_word status.th2 status.tl2 in
    1313         let res,_,ov,_ = add16_with_c word ticks false in
    1314           if ov then
    1315             let new_th2 = status.rcap2h in
    1316             let new_tl2 = status.rcap2l in
    1317             let b = set_bit status.t2con 7 true in
    1318               { status with tcon = b;
    1319                             th2 = new_th2;
    1320                             tl2 = new_tl2 }
    1321           else
    1322             let new_th2, new_tl2 = from_word res in
    1323             { status with th2 = new_th2;
    1324                           tl2 = new_tl2 }
    1325       (* Capture mode *)
    1326       else if cp2 then
    1327         assert false
    1328       else
    1329         status
    1330     else
    1331       status
    1332 ;;
    1333 
    13341306let timers status ticks =
    13351307  (* DPM: Clock/Timer code follows. *)
     
    13651337         else
    13661338            timer1 status b3 b4 ticks) in
    1367     status
     1339      (* Timer 2 follows *)
     1340      let status =
     1341        (let (tf2,exf2,rclk,tclk),(exen2,tr2,ct2,cp2) = bits_of_byte status.t2con in
     1342        (* Timer2 is enabled *)
     1343          if tr2 then
     1344            (* Counter/interval mode *)
     1345            if ct2 && not cp2 then
     1346              let word = mk_word status.th2 status.tl2 in
     1347              let res,_,ov,_ = add16_with_c word (vect_of_int ticks `Sixteen) false in
     1348              if ov then
     1349                let new_th2 = status.rcap2h in
     1350                let new_tl2 = status.rcap2l in
     1351                  (* Overflow flag not set if either of the following flags are set *)
     1352                  if not rclk && not tclk then
     1353                    let b = set_bit status.t2con 7 true in
     1354                    { status with t2con = b;
     1355                                   th2 = new_th2;
     1356                                   tl2 = new_tl2 }
     1357                  else
     1358                    { status with th2 = new_th2;
     1359                                  tl2 = new_tl2 }
     1360              else
     1361                (* Reload also signalled when a 1-0 transition is detected *)
     1362                if status.previous_p1_val && not $ get_bit status.p1 1 then
     1363                  (* In which case signal reload by setting T2CON.6 *)
     1364                  let b = set_bit status.t2con 6 true in
     1365                    { status with th2 = status.rcap2h;
     1366                                  tl2 = status.rcap2l;
     1367                                  t2con = b }
     1368                else
     1369                  let new_th2, new_tl2 = from_word res in
     1370                    { status with th2 = new_th2;
     1371                                  tl2 = new_tl2 }
     1372          (* Capture mode *)
     1373            else if cp2 && exen2 then
     1374              assert false
     1375            else
     1376              status
     1377          else
     1378            status) in status
     1379       
    13681380;;
    13691381
Note: See TracChangeset for help on using the changeset viewer.