📄 main_logicanl.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 + -