aboutsummaryrefslogtreecommitdiff
path: root/usbkbd/main.c
blob: 9d5286d84c381391084d0cc7f628840785b4e85e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "ch559.h"
#include <compiler.h>
#include <stdint.h>

#ifndef FREQ_SYS
#define FREQ_SYS 12000000 // System frequency is 12MHz
#endif

static inline void delay() {
  uint32_t i;
  for (i = 0; i < (120000UL); i++) {
  }
  __asm__("nop");
}

void initUART0(unsigned long baud, int alt) {
  unsigned long x;
  if (alt) {
    PORT_CFG |= bP0_OC;
    P0_DIR |= bTXD_;
    P0_PU |= bTXD_ | bRXD_;
    PIN_FUNC |= bUART0_PIN_X;
  }

  SM0 = 0;
  SM1 = 1;
  SM2 = 0;
  REN = 1;
  // RCLK = 0;
  // TCLK = 0;
  PCON |= SMOD;
  x = (((unsigned long)FREQ_SYS / 8) / baud + 1) / 2;

  TMOD = TMOD & ~bT1_GATE & ~bT1_CT & ~MASK_T1_MOD | bT1_M1;
  T2MOD = T2MOD | bTMR_CLK | bT1_CLK;
  TH1 = (256 - x) & 255;
  TR1 = 1;
  TI = 1;
}

void main() {
  P4_DIR = 0b00001100;
  P4_OUT = 0b00000100;

  initUART0(9600, 1);

  while (1) {
    delay();
    P4_OUT ^= 0b00001100;
    SBUF = 'Z';
    while (!TI)
      ;
    TI = 1;
  }
}