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

📄 main_logicanl.c

📁 可用来自做的AVR-USB-ISP的源码,内符电路图,用AVR M8来模拟USB接口
💻 C
字号:
#include "config.h"

#include <avr/io.h>
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/wdt.h>
#include "usbdrv.h"
#include "usbconfig.h"
#include "usb_uart.h"
#include "isp.h"
#include "led.h"
#include "timer.h"
#include "main.h"

#ifndef USBASP_COMPATIBLE
led_t leds[] =  {{4,LED_OFF,LED_OFF},
                 {3,LED_OFF,LED_OFF},
                 {5,LED_OFF,LED_OFF}}; 
#else
led_t leds[] =  {{0,LED_OFF,LED_OFF},
                 {1,LED_OFF,LED_OFF},
                 {3,LED_OFF,LED_OFF}}; 
#endif
const uint8_t led_count = sizeof(leds)/sizeof(led_t);


#define CHANNELPORT1 PORTB
#define CHANNELPIN1  PINB
#define CHANNELDDR1  DDRB

#define CHANNEL_1 PB3
#define CHANNEL_2 PB2
#define CHANNEL_3 PB5
#define CHANNEL_4 PB4

#define CHANNELPORT2 PORTD
#define CHANNELPIN2  PIND
#define CHANNELDDR2  DDRD

#define CHANNEL_5 PD0
#define CHANNEL_6 PD1

#define DATA_SIZE 700

uint8_t data[DATA_SIZE];
uint16_t data_ptr = 0;

uint8_t channel1trigger = 0xFF;
uint8_t channel2trigger = 0xFF;

uint8_t logmode = 0x0;

uint8_t DATA_trigger(void)
{
  uint8_t tmp1 = CHANNELPIN1; 
  uint8_t tmp2 = CHANNELPIN1;
  TIMER_start(40); //we must poll usb every 50ms 
 
  while (TIMER_timeout)
    {
      if (((channel1trigger & tmp1) == channel1trigger) || ((channel2trigger & tmp2) == channel2trigger))
        return 1;
      tmp1 = CHANNELPIN1;
	  tmp2 = CHANNELPIN2;
    }
  return 0;
}

void DATA_collect(void)
{

}

void DATA_send(void)
{
  uint16_t i;
  for (i = 0;i<DATA_SIZE;i++)
    UART_putc(data[i]);
}

uint8_t chridx = 0;
uint8_t chrcommand = 0;

void Oncharrecived(uint8_t c)
{
  leds[LED_BLUE].counter = 10; 
  leds[LED_BLUE].frequency = LED_FLASH_NEG;
 
  if (chridx == 0)
    {
	  if ((c == 'l')
	  ||  (c == 't'))
	    {
	      chridx++;
		  chrcommand = c;
		}
	}
  else if (chridx == 1)
    {
	  if (chrcommand == 'l')
	    logmode = c-48;
	}
}

void uartDisconnect(void)
{
  logmode = 0;
  leds[LED_BLUE].frequency = LED_OFF;
}

void uartReset(void)
{
  leds[LED_BLUE].frequency = LED_ON;
}

int main(void)
{
  uint8_t i;
  PRR=0;
  logmode = 0;
  leds[LED_RED].frequency = LED_ON;
  LED_init();
  for (i=0;i<3;i++)
    TIMER_delay(250);
  CDC_charrecived = Oncharrecived;
  CDC_init();
  leds[LED_RED].frequency = LED_OFF;
  CDC_ondisconnect = uartDisconnect;
  CDC_uartreset = uartReset;  

  while(1)
    {
	  MAIN_tasks();
	}
}

void MAIN_tasks(void)
{
  LED_poll();
  MAIN_critical_tasks();
  if ((logmode > 0) && (DATA_trigger()))
    {
      leds[LED_GREEN].counter = 10; 
      leds[LED_GREEN].frequency = LED_FLASH;
	  DATA_collect();
	  DATA_send();
	}
}

void MAIN_critical_tasks(void)
{
  CDC_poll();
}

uint8_t usbFunctionSetup(uint8_t data[8]){
  return CDC_usbFunctionSetup(data);
}
uint8_t usbFunctionRead( uint8_t *data, uint8_t len ){
  return CDC_usbFunctionRead(data,len);}uint8_t usbFunctionWrite( uint8_t *data, uint8_t len ){  return CDC_usbFunctionWrite(data,len);
}void usbFunctionWriteOut( uint8_t *data, uint8_t len ){  return CDC_usbFunctionWriteOut(data,len);}
uint8_t usbFunctionDescriptor(usbRequest_t *rq)
{
  return CDC_usbFunctionDescriptor(rq);
}

⌨️ 快捷键说明

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