⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.c

📁 飞利浦公司的LPC2468的芯片 USB BOOTLOADER
💻 C
字号:
/*----------------------------------------------------------------------------
 * Name:    demo.c
 * Purpose: USB HID Demo
 * Version: V1.00
 * Note(s):
 *----------------------------------------------------------------------------
 * This file is part of the uVision/ARM development tools.
 * This software may only be used under the terms of a valid, current,
 * end user licence from KEIL for a compatible version of KEIL software
 * development tools. Nothing else gives you the right to use this software.
 *
 * This software is supplied "AS IS" without warranties of any kind.
 *
 * Copyright (c) 2008 Keil - An ARM Company. All rights reserved.
 *----------------------------------------------------------------------------
 * History:
 *          V1.00 Initial Version
 *----------------------------------------------------------------------------*/

#include <LPC23xx.H>                        // LPC23xx/LPC24xx definitions

#include "type.h"

#include "usb.h"
#include "usbcfg.h"
#include "usbhw.h"
#include "usbcore.h"

#include "demo.h"


// I2C definitions
#define I2C_AA      0x00000004              // I2C Assert acknowledge flag
#define I2C_SI      0x00000008              // I2C interrupt flag
#define I2C_STO     0x00000010              // I2C STOP flag
#define I2C_STA     0x00000020              // I2C START flag
#define I2C_I2EN    0x00000040              // I2C enable


BYTE InReport;                              // HID Input Report
                                            //   Bit0..3: Buttons

BYTE OutReport;                             // HID Out Report
                                            //   Bit0..3: LEDs

/*------------------------------------------------------------------------------
  Initialize the I2C interface
 *------------------------------------------------------------------------------*/
void I2C_Init (void) {
  PCONP    |=  (1 << 7);                    // Enable clock for I2C0

  PINSEL1  &= ~0x03C00000;                  // P0.27 SDA, P0.28 SCL
  PINSEL1  |=  0x01400000;                  // PINSEL1 22.23, 24.25
  
  I20CONCLR =  I2C_AA  | I2C_SI | 
               I2C_STA | I2C_I2EN;          // Clear I2C state machine

  I20SCLL   =  0x80;                        // Setup I2C clock speed
  I20SCLH   =  0x80;

  I20CONSET =  I2C_I2EN;
  I20CONSET =  I2C_STO;
}


/*------------------------------------------------------------------------------
  Set value to LEDs
 *------------------------------------------------------------------------------*/
void LED_Set (unsigned int value) {
  unsigned int val = (value & 0x0F);        // only 4 bits are used

  I20CONCLR =  I2C_AA | I2C_SI | I2C_STA | I2C_STO;
  I20CONSET =  I2C_STA;
  while (!(I20CONSET & I2C_SI));            // Wait for START
  I20DAT    =  0xC0;                        // write to device 0xC0
  I20CONCLR =  I2C_SI | I2C_STA;
  while (!(I20CONSET & I2C_SI));            // Wait for ADDRESS send
  I20DAT    =  0x18;                        // select LS2 register
  I20CONCLR =  I2C_SI;
  while (!(I20CONSET & I2C_SI));            // Wait for DATA send
  I20DAT    =  (0x01 * ((val >> 0) & 1)) |	// set data
               (0x04 * ((val >> 1) & 1)) |
               (0x10 * ((val >> 2) & 1)) |
               (0x40 * ((val >> 3) & 1)) ;
	I20CONCLR =  I2C_SI;
  while (!(I20CONSET & I2C_SI));            // Wait for DATA send
  I20CONSET =  I2C_STO;
  I20CONCLR =  I2C_SI;
  while (I20CONSET & I2C_STO);              // Wait for STOP
}


/*------------------------------------------------------------------------------
  Get value from the Push Buttons
 *------------------------------------------------------------------------------*/
unsigned int PUB_Get (void) {
  unsigned int val;


  I20CONCLR =  I2C_AA | I2C_SI | I2C_STA | I2C_STO;
  I20CONSET =  I2C_STA;
  while (!(I20CONSET & I2C_SI));            // Wait for START
  I20DAT    =  0xC0;						// write to device 0xC0
  I20CONCLR =  I2C_SI | I2C_STA;
  while (!(I20CONSET & I2C_SI));            // Wait for ADDRESS send
  I20DAT    =  0x00;                        // select input register 0
  I20CONCLR =  I2C_SI;
  while (!(I20CONSET & I2C_SI));            // Wait for DATA send

  I20CONSET =  I2C_STA;
  I20CONCLR =  I2C_SI;
  while (!(I20CONSET & I2C_SI));            // Wait for START
  I20DAT    =  0xC1;						// read from device 0xC0
  I20CONCLR =  I2C_SI | I2C_STA;
  while (!(I20CONSET & I2C_SI));            // Wait for ADDRESS send

  I20CONCLR =  I2C_SI;
  while (!(I20CONSET & I2C_SI));            // Wait for DATA received
  val = I20DAT;                             // read data

  I20CONSET =  I2C_STO;
  I20CONCLR =  I2C_SI;
  while (I20CONSET & I2C_STO);              // Wait for STOP

  return (val & 0x0F);                      // only 4 bits are used
}


/*------------------------------------------------------------------------------
  Get HID Input Report -> InReport
 *------------------------------------------------------------------------------*/
void GetInReport (void) {

  InReport = 0x0F ^ PUB_Get();              // Get Button status, 0 = Button pressed
}


/*------------------------------------------------------------------------------
  Set HID Output Report <- OutReport
 *------------------------------------------------------------------------------*/
void SetOutReport (void) {

  LED_Set(OutReport);	
}


/*------------------------------------------------------------------------------
  Main Program
 *------------------------------------------------------------------------------*/
int main (void) {

  I2C_Init();                               // LED Push Button interface

  USB_Init();                               // USB Initialization
  USB_Connect(TRUE);                        // USB Connect

  while (1);                                // Loop forever
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -