Source file: /~heha/ewa/Motor/Maxmaus12.zip/main.cpp

#include "usbd.h"

#include <F2837xD_device.h>
#pragma DATA_SECTION("GpioCtrlRegs")
volatile GPIO_CTRL_REGS GpioCtrlRegs;
#pragma DATA_SECTION("ClkCfgRegs")
volatile CLK_CFG_REGS ClkCfgRegs;
#pragma DATA_SECTION("CpuSysRegs")
volatile CPU_SYS_REGS CpuSysRegs;

void Delay(long LoopCount);

#ifdef _FLASH
static void FlashInit() {
  extern unsigned RamfuncsLoadStart;
  extern unsigned RamfuncsLoadSize;
// Copy time critical code and flash setup code to RAM.
  std::memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
// Call Flash Initialization to setup flash waitstates.
// This function must reside in RAM.
  Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, 3);
}
#endif

// Error handling function to be called when an ASSERT is violated
// Must have C linkage, called by usb.lib
extern "C" void __error__(const char*filename, uint32_t line, const char*reason) {
    // An ASSERT condition was evaluated as false. You can use the filename and
    // line parameters to determine what went wrong.
  ESTOP0;
}

usb::tMyDevice gMyDevice;

void MoveHandler() {
  char dx=0, dy=0;
  static unsigned tickcount;
  switch (++tickcount>>6&3) {
    case 0: dx = 1; break;
    case 1: dy = 1; break;
    case 2: dx =-1; break;
    default:dy =-1; break;
  }
  gMyDevice.StateChange(0, dx, dy);
}

int main() {
  EALLOW;
//SysCtl_SetSysClock()
  ClkCfgRegs.CLKSRCCTL1.all=1;	// auf Quarzoszillator umschalten
  Delay(23);
  ClkCfgRegs.SYSPLLMULT.all=40;	// × 40 = 400 MHz
  while (!ClkCfgRegs.SYSPLLSTS.bit.LOCKS);
  ClkCfgRegs.SYSCLKDIVSEL.all=1;// ÷  2 = 200 MHz
  ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN=1;

  CpuSysRegs.PCLKCR11.bit.USB_A=1;	//  SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_USBA);
//SysCtl_setAuxClock()
  ClkCfgRegs.CLKSRCCTL2.all=1;		// Quelle = Externer 10-MHz-Oszillator
  Delay(38);			// 200 CPU-Takte warten: 9 Takte + 38×5 Takte
  ClkCfgRegs.AUXPLLMULT.all=12;	// 10 MHz × 12 = 120 MHz
//ClkCfgRegs.AUXCLKDIVSEL.all|=1;	// steht schon auf ÷2 nach RESET
  while (!ClkCfgRegs.AUXPLLSTS.bit.LOCKS);
  ClkCfgRegs.AUXPLLCTL1.bit.PLLCLKEN=1;
  GpioCtrlRegs.GPBAMSEL.all|=0xC00;
  EDIS;
  gMyDevice.Init();
  unsigned t=usb::RegsA.FRAME;
  for(;;) {
    gMyDevice.poll();
    if (((usb::RegsA.FRAME-t)&0x7FF)>=10) {
      t+=10;	// nachführen
      MoveHandler();
    }
  }
}
Detected encoding: UTF-80