Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cybiko:registeraccess [2009/11/27 17:54] (current)
Line 1: Line 1:
 +You can access the memory locations but you 
 +obviously couldn'​t expect to have an interrupt point to byte code. I'​ve ​
 +used the green LED in many of my projects in bytecode.
 +exp:
 +<code c>
 + #​define LED (*(char *)0xFFFF61) // Green LED register
  
 + void more(void)
 + {
 +  LED |= 8; // Turn Green LED ON
 +  _getch();
 +  LED &= 247; // Turn Green LED OFF 
 +              // or more succinctly
 +  LED &= ~8;
 + }
 +</​code>​
 +
 +For a map of the ports see [[H8PortMap]]
 +
 +{{portTester.zip}} is demonstration program that runs against the Cybiko CONSOLE that makes various called against the H8 PORTS.
 +
 +A source of the portTester program is shown below:
 +<code c>
 + #​include <​cybiko.h>​
 +
 + ​struct module_t main_module;​
 +
 + #​define PORT2  0xFFFF61
 + #​define GREENLED 0x08   // 3 - TMCI0
 + #​define REDLED ​  ​0x04 ​  // 2 - TMRI0
 +
 + #​define PORT4 0xFFFF53
 + #​define PORT4_MASK 0x0f    // Only bottom 4 bits are valid
 + #​define AN3     ​0x04 ​  // 3 - AN3 - NC 
 + #​define BATLEV1 0x02   // 2 - AN2 - battery level
 + #​define BATLEV2 0x01   // 1 - AN1 - battery level
 + #​define RFLEV   ​0x00 ​  // 0 - AN0 - RF Signal Strength
 +
 + #​define ​ HD66421_SET (*(char *)0x600000)
 + #​define ​ HD66421_USE (*(char *)0x600001)
 +
 + #​define ​ CR1_BASE 0x59  // Default state for Control register 1
 + #​define ​ CR1_DISP 0x40
 + #​define ​ CR1_STBY 0x10
 + #​define ​ CR1_RVRS 0x04
 +
 + void togglePort(long port, short mask, char *text) {
 +        TRACE("​Enable %s",​text);​
 +        (*(char *)port) |= mask;
 +        sleep(2000);​
 +
 +        TRACE("​Disable %s",​text);​
 +        (*(char *)port) &= ~mask;
 +        sleep(2000);​
 + }
 + /**
 + * Main entry point
 + */
 + long main(int argc, char* argv[], bool start)
 + {
 +        char port4;
 +        char batlev;
 +        init_module( &​main_module );
 +
 +        TRACE("​Direct port access demonstration"​);​
 +        sleep(1000);​
 +
 +        // NOTE: If you have the cybiko running on MAINS
 +        //       then you will not see the red LED toggle.
 +        togglePort(PORT2,​ GREENLED, "Green LED");
 +        togglePort(PORT2,​ REDLED, "Red LED");
 +        togglePort(PORT2,​ REDLED|GREENLED,​ "​Red&​Green LED");
 +
 +        port4 = (*(char *)PORT4) & PORT4_MASK;
 +        TRACE("​RF Strength %d", port4 & RFLEV);
 +
 +        batlev = (port4 & (BATLEV1 | BATLEV2)) >> 1; // normalize to 0-3
 +        TRACE("​Battery level %d", batlev);
 +
 +        HD66421_SET = 0x00;  // Control reg 1
 +        HD66421_USE = CR1_BASE | CR1_STBY; ​ // LCD On
 +
 +        TRACE("​Reverse Display"​);​
 +        HD66421_SET = 0x00;  // Control reg 1
 +        HD66421_USE = CR1_BASE | CR1_RVRS; ​ // Reverse Video
 +
 +        sleep(2000);​
 +        HD66421_SET = 0x00;  // Control reg 1
 +        HD66421_USE = CR1_BASE & ~CR1_RVRS; ​ // Normal Video
 +
 +        TRACE("​done"​);​
 +        return 0L;
 + }
 +</​code>​
 +{{tag>​cybiko}}