mirror of
https://github.com/eddyem/stm32samples.git
synced 2026-02-28 03:44:30 +03:00
restructuring
This commit is contained in:
133
deprecated/F1/2.8TFT/Makefile
Normal file
133
deprecated/F1/2.8TFT/Makefile
Normal file
@@ -0,0 +1,133 @@
|
||||
BINARY = dma_gpio
|
||||
BOOTPORT ?= /dev/ttyUSB0
|
||||
BOOTSPEED ?= 115200
|
||||
# change this linking script depending on particular MCU model,
|
||||
# for example, if you have STM32F103VBT6, you should write:
|
||||
LDSCRIPT = ld/stm32f103x8.ld
|
||||
LIBNAME = opencm3_stm32f1
|
||||
DEFS = -DSTM32F1 -DEBUG
|
||||
|
||||
OBJDIR = mk
|
||||
INDEPENDENT_HEADERS=
|
||||
|
||||
FP_FLAGS ?= -msoft-float
|
||||
ARCH_FLAGS = -mthumb -mcpu=cortex-m3 $(FP_FLAGS) -mfix-cortex-m3-ldrd
|
||||
|
||||
###############################################################################
|
||||
# Executables
|
||||
PREFIX ?= arm-none-eabi
|
||||
|
||||
RM := rm -f
|
||||
RMDIR := rmdir
|
||||
CC := $(PREFIX)-gcc
|
||||
LD := $(PREFIX)-gcc
|
||||
AR := $(PREFIX)-ar
|
||||
AS := $(PREFIX)-as
|
||||
OBJCOPY := $(PREFIX)-objcopy
|
||||
OBJDUMP := $(PREFIX)-objdump
|
||||
GDB := $(PREFIX)-gdb
|
||||
STFLASH = $(shell which st-flash)
|
||||
STBOOT = $(shell which stm32flash)
|
||||
|
||||
###############################################################################
|
||||
# Source files
|
||||
LDSCRIPT ?= $(BINARY).ld
|
||||
SRC = $(wildcard *.c)
|
||||
OBJS = $(addprefix $(OBJDIR)/, $(SRC:%.c=%.o))
|
||||
|
||||
ifeq ($(strip $(OPENCM3_DIR)),)
|
||||
OPENCM3_DIR := /usr/local/arm-none-eabi
|
||||
$(info Using $(OPENCM3_DIR) path to library)
|
||||
endif
|
||||
|
||||
INCLUDE_DIR = $(OPENCM3_DIR)/include
|
||||
LIB_DIR = $(OPENCM3_DIR)/lib
|
||||
SCRIPT_DIR = $(OPENCM3_DIR)/scripts
|
||||
|
||||
###############################################################################
|
||||
# C flags
|
||||
CFLAGS += -Os -g
|
||||
CFLAGS += -Wall -Wextra -Wshadow -Wimplicit-function-declaration
|
||||
CFLAGS += -Wredundant-decls
|
||||
# -Wmissing-prototypes -Wstrict-prototypes
|
||||
CFLAGS += -fno-common -ffunction-sections -fdata-sections
|
||||
|
||||
###############################################################################
|
||||
# C & C++ preprocessor common flags
|
||||
CPPFLAGS += -MD
|
||||
CPPFLAGS += -Wall -Werror
|
||||
CPPFLAGS += -I$(INCLUDE_DIR) $(DEFS)
|
||||
|
||||
###############################################################################
|
||||
# Linker flags
|
||||
LDFLAGS += --static -nostartfiles
|
||||
LDFLAGS += -L$(LIB_DIR)
|
||||
LDFLAGS += -T$(LDSCRIPT)
|
||||
LDFLAGS += -Wl,-Map=$(*).map
|
||||
LDFLAGS += -Wl,--gc-sections
|
||||
|
||||
###############################################################################
|
||||
# Used libraries
|
||||
LDLIBS += -l$(LIBNAME)
|
||||
LDLIBS += -Wl,--start-group -lc -lgcc -Wl,--end-group
|
||||
|
||||
.SUFFIXES: .elf .bin .hex .srec .list .map .images
|
||||
.SECONDEXPANSION:
|
||||
.SECONDARY:
|
||||
|
||||
ELF := $(OBJDIR)/$(BINARY).elf
|
||||
LIST := $(OBJDIR)/$(BINARY).list
|
||||
BIN := $(BINARY).bin
|
||||
HEX := $(BINARY).hex
|
||||
|
||||
all: bin
|
||||
|
||||
elf: $(ELF)
|
||||
bin: $(BIN)
|
||||
hex: $(HEX)
|
||||
list: $(LIST)
|
||||
|
||||
$(OBJDIR):
|
||||
mkdir $(OBJDIR)
|
||||
|
||||
$(OBJDIR)/%.o: %.c
|
||||
@printf " CC $<\n"
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $@ -c $<
|
||||
|
||||
$(SRC) : %.c : %.h $(INDEPENDENT_HEADERS)
|
||||
@touch $@
|
||||
|
||||
%.h: ;
|
||||
|
||||
$(BIN): $(ELF)
|
||||
@printf " OBJCOPY $(BIN)\n"
|
||||
$(OBJCOPY) -Obinary $(ELF) $(BIN)
|
||||
|
||||
$(HEX): $(ELF)
|
||||
@printf " OBJCOPY $(HEX)\n"
|
||||
$(OBJCOPY) -Oihex $(ELF) $(HEX)
|
||||
|
||||
$(LIST): $(ELF)
|
||||
@printf " OBJDUMP $(LIST)\n"
|
||||
$(OBJDUMP) -S $(ELF) > $(LIST)
|
||||
|
||||
$(ELF): $(OBJDIR) $(OBJS) $(LDSCRIPT) $(LIB_DIR)/lib$(LIBNAME).a
|
||||
@printf " LD $(ELF)\n"
|
||||
$(LD) $(LDFLAGS) $(ARCH_FLAGS) $(OBJS) $(LDLIBS) -o $(ELF)
|
||||
|
||||
clean:
|
||||
@printf " CLEAN\n"
|
||||
$(RM) $(OBJS) $(OBJDIR)/*.d $(ELF) $(HEX) $(LIST) $(OBJDIR)/*.map
|
||||
$(RMDIR) $(OBJDIR)
|
||||
|
||||
flash: $(BIN)
|
||||
@printf " FLASH $(BIN)\n"
|
||||
$(STFLASH) write $(BIN) 0x8000000
|
||||
|
||||
boot: $(BIN)
|
||||
@printf " LOAD $(BIN) through bootloader\n"
|
||||
$(STBOOT) -b$(BOOTSPEED) $(BOOTPORT) -w $(BIN)
|
||||
|
||||
.PHONY: clean elf hex list flash boot
|
||||
|
||||
#-include $(OBJS:.o=.d)
|
||||
5
deprecated/F1/2.8TFT/README
Normal file
5
deprecated/F1/2.8TFT/README
Normal file
@@ -0,0 +1,5 @@
|
||||
Template of USB-CDC
|
||||
|
||||
written for chinese devboard based on STM32F103R8T6
|
||||
|
||||
Press H for help
|
||||
310
deprecated/F1/2.8TFT/cdcacm.c
Normal file
310
deprecated/F1/2.8TFT/cdcacm.c
Normal file
@@ -0,0 +1,310 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2010 Gareth McMullin <gareth@blacksphere.co.nz>
|
||||
* Copyright 2014 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "cdcacm.h"
|
||||
#include "user_proto.h"
|
||||
#include "main.h"
|
||||
|
||||
// Buffer for USB Tx
|
||||
static uint8_t USB_Tx_Buffer[USB_TX_DATA_SIZE];
|
||||
static uint8_t USB_Tx_ptr = 0;
|
||||
// connection flag
|
||||
uint8_t USB_connected = 0;
|
||||
static const struct usb_device_descriptor dev = {
|
||||
.bLength = USB_DT_DEVICE_SIZE,
|
||||
.bDescriptorType = USB_DT_DEVICE,
|
||||
.bcdUSB = 0x0200,
|
||||
.bDeviceClass = USB_CLASS_CDC,
|
||||
.bDeviceSubClass = 0,
|
||||
.bDeviceProtocol = 0,
|
||||
.bMaxPacketSize0 = 64,
|
||||
.idVendor = 0x0483,
|
||||
.idProduct = 0x5740,
|
||||
.bcdDevice = 0x0200,
|
||||
.iManufacturer = 1,
|
||||
.iProduct = 2,
|
||||
.iSerialNumber = 3,
|
||||
.bNumConfigurations = 1,
|
||||
};
|
||||
|
||||
uint8_t usbdatabuf[USB_RX_DATA_SIZE]; // buffer for received data
|
||||
int usbdatalen = 0; // lenght of received data
|
||||
|
||||
/*
|
||||
* This notification endpoint isn't implemented. According to CDC spec its
|
||||
* optional, but its absence causes a NULL pointer dereference in Linux
|
||||
* cdc_acm driver.
|
||||
*/
|
||||
static const struct usb_endpoint_descriptor comm_endp[] = {{
|
||||
.bLength = USB_DT_ENDPOINT_SIZE,
|
||||
.bDescriptorType = USB_DT_ENDPOINT,
|
||||
.bEndpointAddress = 0x83,
|
||||
.bmAttributes = USB_ENDPOINT_ATTR_INTERRUPT,
|
||||
.wMaxPacketSize = 16,
|
||||
.bInterval = 255,
|
||||
}};
|
||||
|
||||
static const struct usb_endpoint_descriptor data_endp[] = {{
|
||||
.bLength = USB_DT_ENDPOINT_SIZE,
|
||||
.bDescriptorType = USB_DT_ENDPOINT,
|
||||
.bEndpointAddress = 0x01,
|
||||
.bmAttributes = USB_ENDPOINT_ATTR_BULK,
|
||||
.wMaxPacketSize = 64,
|
||||
.bInterval = 1,
|
||||
}, {
|
||||
.bLength = USB_DT_ENDPOINT_SIZE,
|
||||
.bDescriptorType = USB_DT_ENDPOINT,
|
||||
.bEndpointAddress = 0x82,
|
||||
.bmAttributes = USB_ENDPOINT_ATTR_BULK,
|
||||
.wMaxPacketSize = 64,
|
||||
.bInterval = 1,
|
||||
}};
|
||||
|
||||
static const struct {
|
||||
struct usb_cdc_header_descriptor header;
|
||||
struct usb_cdc_call_management_descriptor call_mgmt;
|
||||
struct usb_cdc_acm_descriptor acm;
|
||||
struct usb_cdc_union_descriptor cdc_union;
|
||||
} __attribute__((packed)) cdcacm_functional_descriptors = {
|
||||
.header = {
|
||||
.bFunctionLength = sizeof(struct usb_cdc_header_descriptor),
|
||||
.bDescriptorType = CS_INTERFACE,
|
||||
.bDescriptorSubtype = USB_CDC_TYPE_HEADER,
|
||||
.bcdCDC = 0x0110,
|
||||
},
|
||||
.call_mgmt = {
|
||||
.bFunctionLength =
|
||||
sizeof(struct usb_cdc_call_management_descriptor),
|
||||
.bDescriptorType = CS_INTERFACE,
|
||||
.bDescriptorSubtype = USB_CDC_TYPE_CALL_MANAGEMENT,
|
||||
.bmCapabilities = 0,
|
||||
.bDataInterface = 1,
|
||||
},
|
||||
.acm = {
|
||||
.bFunctionLength = sizeof(struct usb_cdc_acm_descriptor),
|
||||
.bDescriptorType = CS_INTERFACE,
|
||||
.bDescriptorSubtype = USB_CDC_TYPE_ACM,
|
||||
.bmCapabilities = 0,
|
||||
},
|
||||
.cdc_union = {
|
||||
.bFunctionLength = sizeof(struct usb_cdc_union_descriptor),
|
||||
.bDescriptorType = CS_INTERFACE,
|
||||
.bDescriptorSubtype = USB_CDC_TYPE_UNION,
|
||||
.bControlInterface = 0,
|
||||
.bSubordinateInterface0 = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct usb_interface_descriptor comm_iface[] = {{
|
||||
.bLength = USB_DT_INTERFACE_SIZE,
|
||||
.bDescriptorType = USB_DT_INTERFACE,
|
||||
.bInterfaceNumber = 0,
|
||||
.bAlternateSetting = 0,
|
||||
.bNumEndpoints = 1,
|
||||
.bInterfaceClass = USB_CLASS_CDC,
|
||||
.bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
|
||||
.bInterfaceProtocol = USB_CDC_PROTOCOL_AT,
|
||||
.iInterface = 0,
|
||||
|
||||
.endpoint = comm_endp,
|
||||
|
||||
.extra = &cdcacm_functional_descriptors,
|
||||
.extralen = sizeof(cdcacm_functional_descriptors),
|
||||
}};
|
||||
|
||||
static const struct usb_interface_descriptor data_iface[] = {{
|
||||
.bLength = USB_DT_INTERFACE_SIZE,
|
||||
.bDescriptorType = USB_DT_INTERFACE,
|
||||
.bInterfaceNumber = 1,
|
||||
.bAlternateSetting = 0,
|
||||
.bNumEndpoints = 2,
|
||||
.bInterfaceClass = USB_CLASS_DATA,
|
||||
.bInterfaceSubClass = 0,
|
||||
.bInterfaceProtocol = 0,
|
||||
.iInterface = 0,
|
||||
|
||||
.endpoint = data_endp,
|
||||
}};
|
||||
|
||||
static const struct usb_interface ifaces[] = {{
|
||||
.num_altsetting = 1,
|
||||
.altsetting = comm_iface,
|
||||
}, {
|
||||
.num_altsetting = 1,
|
||||
.altsetting = data_iface,
|
||||
}};
|
||||
|
||||
static const struct usb_config_descriptor config = {
|
||||
.bLength = USB_DT_CONFIGURATION_SIZE,
|
||||
.bDescriptorType = USB_DT_CONFIGURATION,
|
||||
.wTotalLength = 0,
|
||||
.bNumInterfaces = 2,
|
||||
.bConfigurationValue = 1,
|
||||
.iConfiguration = 0,
|
||||
.bmAttributes = 0x80,
|
||||
.bMaxPower = 0x32,
|
||||
|
||||
.interface = ifaces,
|
||||
};
|
||||
|
||||
static const char *usb_strings[] = {
|
||||
"Organisation, author",
|
||||
"device",
|
||||
"version",
|
||||
};
|
||||
|
||||
// default line coding: B115200, 1stop, 8bits, parity none
|
||||
struct usb_cdc_line_coding linecoding = {
|
||||
.dwDTERate = 115200,
|
||||
.bCharFormat = USB_CDC_1_STOP_BITS,
|
||||
.bParityType = USB_CDC_NO_PARITY,
|
||||
.bDataBits = 8,
|
||||
};
|
||||
|
||||
/* Buffer to be used for control requests. */
|
||||
uint8_t usbd_control_buffer[128];
|
||||
|
||||
/**
|
||||
* This function runs every time it gets a request for control parameters get/set
|
||||
* parameter SET_LINE_CODING used to change USART1 parameters: if you want to
|
||||
* change them, just connect through USB with required parameters
|
||||
*/
|
||||
static int cdcacm_control_request(usbd_device *usbd_dev, struct usb_setup_data *req, uint8_t **buf,
|
||||
uint16_t *len, void (**complete)(usbd_device *usbd_dev, struct usb_setup_data *req)){
|
||||
(void)complete;
|
||||
(void)buf;
|
||||
(void)usbd_dev;
|
||||
char local_buf[10];
|
||||
struct usb_cdc_line_coding lc;
|
||||
|
||||
switch (req->bRequest) {
|
||||
case SET_CONTROL_LINE_STATE:{
|
||||
if(req->wValue){ // terminal is opened
|
||||
USB_connected = 1;
|
||||
}else{ // terminal is closed
|
||||
USB_connected = 0;
|
||||
}
|
||||
/*
|
||||
* This Linux cdc_acm driver requires this to be implemented
|
||||
* even though it's optional in the CDC spec, and we don't
|
||||
* advertise it in the ACM functional descriptor.
|
||||
*/
|
||||
struct usb_cdc_notification *notif = (void *)local_buf;
|
||||
/* We echo signals back to host as notification. */
|
||||
notif->bmRequestType = 0xA1;
|
||||
notif->bNotification = USB_CDC_NOTIFY_SERIAL_STATE;
|
||||
notif->wValue = 0;
|
||||
notif->wIndex = 0;
|
||||
notif->wLength = 2;
|
||||
local_buf[8] = req->wValue & 3;
|
||||
local_buf[9] = 0;
|
||||
usbd_ep_write_packet(usbd_dev, 0x83, local_buf, 10);
|
||||
}break;
|
||||
case SET_LINE_CODING:
|
||||
if (!len || (*len != sizeof(struct usb_cdc_line_coding)))
|
||||
return 0;
|
||||
memcpy((void *)&lc, (void *)*buf, *len);
|
||||
// Mark & Space parity don't support by hardware, check it
|
||||
if(lc.bParityType == USB_CDC_MARK_PARITY || lc.bParityType == USB_CDC_SPACE_PARITY){
|
||||
return 0; // error
|
||||
}
|
||||
break;
|
||||
case GET_LINE_CODING: // return linecoding buffer
|
||||
if(len && *len == sizeof(struct usb_cdc_line_coding))
|
||||
memcpy((void *)*buf, (void *)&linecoding, sizeof(struct usb_cdc_line_coding));
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void cdcacm_data_rx_cb(usbd_device *usbd_dev, uint8_t ep){
|
||||
(void)ep;
|
||||
int len = usbd_ep_read_packet(usbd_dev, 0x01, usbdatabuf + usbdatalen, USB_RX_DATA_SIZE - usbdatalen);
|
||||
usbdatalen += len;
|
||||
if(usbdatalen >= USB_RX_DATA_SIZE){ // buffer overflow - drop all its contents
|
||||
usbdatalen = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void cdcacm_data_tx_cb(usbd_device *usbd_dev, uint8_t ep){
|
||||
(void)ep;
|
||||
(void)usbd_dev;
|
||||
|
||||
usb_send_buffer();
|
||||
}
|
||||
|
||||
static void cdcacm_set_config(usbd_device *usbd_dev, uint16_t wValue)
|
||||
{
|
||||
(void)wValue;
|
||||
(void)usbd_dev;
|
||||
|
||||
usbd_ep_setup(usbd_dev, 0x01, USB_ENDPOINT_ATTR_BULK, USB_RX_DATA_SIZE, cdcacm_data_rx_cb);
|
||||
usbd_ep_setup(usbd_dev, 0x82, USB_ENDPOINT_ATTR_BULK, USB_TX_DATA_SIZE, cdcacm_data_tx_cb);
|
||||
usbd_ep_setup(usbd_dev, 0x83, USB_ENDPOINT_ATTR_INTERRUPT, 16, NULL);
|
||||
|
||||
usbd_register_control_callback(
|
||||
usbd_dev,
|
||||
USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
|
||||
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
|
||||
cdcacm_control_request);
|
||||
}
|
||||
|
||||
static usbd_device *current_usb = NULL;
|
||||
|
||||
usbd_device *USB_init(){
|
||||
current_usb = usbd_init(&stm32f103_usb_driver, &dev, &config,
|
||||
usb_strings, 3, usbd_control_buffer, sizeof(usbd_control_buffer));
|
||||
if(!current_usb) return NULL;
|
||||
usbd_register_set_config_callback(current_usb, cdcacm_set_config);
|
||||
return current_usb;
|
||||
}
|
||||
|
||||
mutex_t send_block_mutex = MUTEX_UNLOCKED;
|
||||
/**
|
||||
* Put byte into USB buffer to send
|
||||
* @param byte - a byte to put into a buffer
|
||||
*/
|
||||
void usb_send(uint8_t byte){
|
||||
mutex_lock(&send_block_mutex);
|
||||
USB_Tx_Buffer[USB_Tx_ptr++] = byte;
|
||||
mutex_unlock(&send_block_mutex);
|
||||
if(USB_Tx_ptr == USB_TX_DATA_SIZE){ // buffer can be overflowed - send it!
|
||||
usb_send_buffer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send all data in buffer over USB
|
||||
* this function runs when buffer is full or on SysTick
|
||||
*/
|
||||
void usb_send_buffer(){
|
||||
if(MUTEX_LOCKED == mutex_trylock(&send_block_mutex)) return;
|
||||
if(USB_Tx_ptr){
|
||||
if(current_usb && USB_connected){
|
||||
// usbd_ep_write_packet return 0 if previous packet isn't transmit yet
|
||||
while(USB_Tx_ptr != usbd_ep_write_packet(current_usb, 0x82, USB_Tx_Buffer, USB_Tx_ptr));
|
||||
usbd_poll(current_usb);
|
||||
}
|
||||
USB_Tx_ptr = 0;
|
||||
}
|
||||
mutex_unlock(&send_block_mutex);
|
||||
}
|
||||
54
deprecated/F1/2.8TFT/cdcacm.h
Normal file
54
deprecated/F1/2.8TFT/cdcacm.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* ccdcacm.h
|
||||
*
|
||||
* Copyright 2014 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef __CCDCACM_H__
|
||||
#define __CCDCACM_H__
|
||||
|
||||
#include <libopencm3/usb/usbd.h>
|
||||
|
||||
// commands through EP0
|
||||
#define SEND_ENCAPSULATED_COMMAND 0x00
|
||||
#define GET_ENCAPSULATED_RESPONSE 0x01
|
||||
#define SET_COMM_FEATURE 0x02
|
||||
#define GET_COMM_FEATURE 0x03
|
||||
#define CLEAR_COMM_FEATURE 0x04
|
||||
#define SET_LINE_CODING 0x20
|
||||
#define GET_LINE_CODING 0x21
|
||||
#define SET_CONTROL_LINE_STATE 0x22
|
||||
#define SEND_BREAK 0x23
|
||||
|
||||
// Size of input/output buffers
|
||||
#define USB_TX_DATA_SIZE 64
|
||||
#define USB_RX_DATA_SIZE 64
|
||||
|
||||
// USB connection flag
|
||||
extern uint8_t USB_connected;
|
||||
extern struct usb_cdc_line_coding linecoding;
|
||||
|
||||
extern uint8_t usbdatabuf[];
|
||||
extern int usbdatalen;
|
||||
|
||||
usbd_device *USB_init();
|
||||
void usb_send(uint8_t byte);
|
||||
void usb_send_buffer();
|
||||
|
||||
#endif // __CCDCACM_H__
|
||||
BIN
deprecated/F1/2.8TFT/dma_gpio.bin
Normal file
BIN
deprecated/F1/2.8TFT/dma_gpio.bin
Normal file
Binary file not shown.
74
deprecated/F1/2.8TFT/dmagpio.c
Normal file
74
deprecated/F1/2.8TFT/dmagpio.c
Normal file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* dmagpio.c
|
||||
*
|
||||
* Copyright 2016 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "dmagpio.h"
|
||||
#include "user_proto.h"
|
||||
|
||||
int transfer_complete = 0;
|
||||
static uint16_t gpiobuff[128] = {0};
|
||||
|
||||
void dmagpio_init(){
|
||||
// init TIM2 & DMA1ch2 (TIM2UP)
|
||||
rcc_periph_clock_enable(RCC_TIM2);
|
||||
rcc_periph_clock_enable(RCC_DMA1);
|
||||
timer_reset(TIM2);
|
||||
// timer have frequency of 1MHz
|
||||
timer_set_mode(TIM2, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP);
|
||||
// 72MHz div 18 = 4MHz
|
||||
TIM2_PSC = 0; // prescaler is (div - 1)
|
||||
TIM2_ARR = 1; // 36MHz (6.25)
|
||||
TIM2_DIER = TIM_DIER_UDE;// | TIM_DIER_UIE;
|
||||
dma_channel_reset(DMA1, DMA_CHANNEL2);
|
||||
// mem2mem, medium prio, 8bits, memory increment, read from mem, transfer complete en
|
||||
DMA1_CCR2 = DMA_CCR_PL_MEDIUM | DMA_CCR_MSIZE_16BIT |
|
||||
DMA_CCR_PSIZE_16BIT | DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE | DMA_CCR_TEIE ;
|
||||
nvic_enable_irq(NVIC_DMA1_CHANNEL2_IRQ);
|
||||
// target address:
|
||||
DMA1_CPAR2 = DMAGPIO_TARGADDR;
|
||||
DMA1_CMAR2 = (uint32_t) gpiobuff;
|
||||
}
|
||||
|
||||
void dmagpio_transfer(uint8_t *databuf, uint32_t length){
|
||||
while(DMA1_CCR2 & DMA_CCR_EN);
|
||||
transfer_complete = 0;
|
||||
DMA1_IFCR = 0xff00; // clear all flags for ch2
|
||||
// buffer length
|
||||
DMA1_CNDTR2 = length;
|
||||
uint32_t i;
|
||||
for(i = 0; i < length; ++i) gpiobuff[i] = databuf[i];
|
||||
TIM2_CR1 |= TIM_CR1_CEN; // run timer
|
||||
DMA1_CCR2 |= DMA_CCR_EN;
|
||||
}
|
||||
|
||||
void dma1_channel2_isr(){
|
||||
if(DMA1_ISR & DMA_ISR_TCIF2){
|
||||
transfer_complete = 1;
|
||||
// stop timer & turn off DMA
|
||||
TIM2_CR1 &= ~TIM_CR1_CEN;
|
||||
DMA1_CCR2 &= ~DMA_CCR_EN;
|
||||
DMA1_IFCR = DMA_IFCR_CTCIF2; // clear flag
|
||||
}else if(DMA1_ISR & DMA_ISR_TEIF2){
|
||||
P("Error\n");
|
||||
DMA1_IFCR = DMA_IFCR_CTEIF2;
|
||||
TIM2_CR1 &= ~TIM_CR1_CEN;
|
||||
DMA1_CCR2 &= ~DMA_CCR_EN;
|
||||
}
|
||||
}
|
||||
32
deprecated/F1/2.8TFT/dmagpio.h
Normal file
32
deprecated/F1/2.8TFT/dmagpio.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* dmagpio.h
|
||||
*
|
||||
* Copyright 2016 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef __DMAGPIO_H__
|
||||
#define __DMAGPIO_H__
|
||||
|
||||
#include "main.h"
|
||||
#include "hardware_ini.h"
|
||||
|
||||
void dmagpio_init();
|
||||
void dmagpio_transfer(uint8_t *databuf, uint32_t length);
|
||||
extern int transfer_complete;
|
||||
|
||||
#endif // __DMAGPIO_H__
|
||||
72
deprecated/F1/2.8TFT/hardware_ini.c
Normal file
72
deprecated/F1/2.8TFT/hardware_ini.c
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* hardware_ini.c - functions for HW initialisation
|
||||
*
|
||||
* Copyright 2014 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* All hardware-dependent initialisation & definition should be placed here
|
||||
* and in hardware_ini.h
|
||||
*
|
||||
*/
|
||||
|
||||
#include "main.h"
|
||||
#include "hardware_ini.h"
|
||||
|
||||
/**
|
||||
* GPIO initialisaion: clocking + pins setup
|
||||
*/
|
||||
void GPIO_init(){
|
||||
rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN |
|
||||
RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_IOPDEN |
|
||||
RCC_APB2ENR_IOPEEN);
|
||||
// DMAGPIO
|
||||
gpio_set_mode(LCD_CONTROL_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL,
|
||||
LCD_CS_PIN | LCD_RD_PIN | LCD_RS_PIN | LCD_WR_PIN | LCD_RST_PIN);
|
||||
LCD_write(); // set pins as out
|
||||
/*
|
||||
// Buttons: pull-up input
|
||||
gpio_set_mode(BTNS_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN,
|
||||
BTN_S2_PIN | BTN_S3_PIN);
|
||||
// turn on pull-up
|
||||
gpio_set(BTNS_PORT, BTN_S2_PIN | BTN_S3_PIN);
|
||||
// LEDS: opendrain output
|
||||
gpio_set_mode(LEDS_PORT, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN,
|
||||
LED_D1_PIN | LED_D2_PIN);
|
||||
// turn off LEDs
|
||||
gpio_set(LEDS_PORT, LED_D1_PIN | LED_D2_PIN);
|
||||
*/
|
||||
/*
|
||||
// USB_DISC: push-pull
|
||||
gpio_set_mode(USB_DISC_PORT, GPIO_MODE_OUTPUT_2_MHZ,
|
||||
GPIO_CNF_OUTPUT_PUSHPULL, USB_DISC_PIN);
|
||||
// USB_POWER: open drain, externall pull down with R7 (22k)
|
||||
gpio_set_mode(USB_POWER_PORT, GPIO_MODE_INPUT,
|
||||
GPIO_CNF_INPUT_FLOAT, USB_POWER_PIN);
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
* SysTick used for system timer with period of 1ms
|
||||
*/
|
||||
void SysTick_init(){
|
||||
systick_set_clocksource(STK_CSR_CLKSOURCE_AHB_DIV8); // Systyck: 72/8=9MHz
|
||||
systick_set_reload(8999); // 9000 pulses: 1kHz
|
||||
systick_interrupt_enable();
|
||||
systick_counter_enable();
|
||||
}
|
||||
95
deprecated/F1/2.8TFT/hardware_ini.h
Normal file
95
deprecated/F1/2.8TFT/hardware_ini.h
Normal file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* hardware_ini.h
|
||||
*
|
||||
* Copyright 2014 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef __HARDWARE_INI_H__
|
||||
#define __HARDWARE_INI_H__
|
||||
|
||||
/*
|
||||
* Timers:
|
||||
* SysTick - system time
|
||||
*/
|
||||
|
||||
|
||||
void GPIO_init();
|
||||
void SysTick_init();
|
||||
|
||||
/*
|
||||
* DMA to GPIO port & pins (mask) - PA0..PA7
|
||||
*/
|
||||
#define DMAGPIO_PORT GPIOA
|
||||
#define DMAGPIO_PINS 0xff
|
||||
#define DMAGPIO_TARGADDR ((uint32_t)&(GPIOA_ODR))
|
||||
|
||||
#define LCD_write() do{gpio_set_mode(DMAGPIO_PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, DMAGPIO_PINS);}while(0)
|
||||
//#define LCD_read() do{gpio_set_mode(DMAGPIO_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, DMAGPIO_PINS);}while(0)
|
||||
#define LCD_read() do{gpio_set_mode(DMAGPIO_PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, DMAGPIO_PINS); GPIO_ODR(DMAGPIO_PORT) = 0;}while(0)
|
||||
// LCD control pins (PB10..PB14)
|
||||
#define LCD_CONTROL_PORT GPIOB
|
||||
#define LCD_CS_PIN GPIO12
|
||||
#define LCD_RS_PIN GPIO11
|
||||
#define LCD_WR_PIN GPIO14
|
||||
#define LCD_RD_PIN GPIO13
|
||||
#define LCD_RST_PIN GPIO10
|
||||
|
||||
// macro for control pins manipulation
|
||||
#define CS_set do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_CS_PIN;}while(0)
|
||||
#define RS_set do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_RS_PIN;}while(0)
|
||||
#define RD_set do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_RD_PIN;}while(0)
|
||||
#define WR_set do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_WR_PIN;}while(0)
|
||||
#define CS_clear do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_CS_PIN << 16;}while(0)
|
||||
#define RS_clear do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_RS_PIN << 16;}while(0)
|
||||
#define RD_clear do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_RD_PIN << 16;}while(0)
|
||||
#define WR_clear do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_WR_PIN << 16;}while(0)
|
||||
#define RST_set do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_RST_PIN;}while(0)
|
||||
#define RST_clear do{GPIO_BSRR(LCD_CONTROL_PORT) = LCD_RST_PIN << 16;}while(0)
|
||||
|
||||
#define LCD_wrbyte(x) do{GPIO_ODR(DMAGPIO_PORT) = x;}while(0)
|
||||
/*
|
||||
#define LCD_wrbyte(x) do{GPIO_BSRR(DMAGPIO_PORT) = DMAGPIO_PINS << 16; \
|
||||
GPIO_BSRR(DMAGPIO_PORT) = x;}while(0)
|
||||
*/
|
||||
#define LCD_rdbyte() (GPIO_IDR(DMAGPIO_PORT) & DMAGPIO_PINS)
|
||||
|
||||
/*
|
||||
* USB interface
|
||||
* connect boot1 jumper to gnd, boot0 to gnd; and reconnect boot0 to +3.3 to boot flash
|
||||
*/
|
||||
/*
|
||||
// USB_DICS (disconnect) - PC11
|
||||
#define USB_DISC_PIN GPIO11
|
||||
#define USB_DISC_PORT GPIOC
|
||||
// USB_POWER (high level when USB connected to PC)
|
||||
#define USB_POWER_PIN GPIO10
|
||||
#define USB_POWER_PORT GPIOC
|
||||
// change signal level on USB diconnect pin
|
||||
#define usb_disc_high() gpio_set(USB_DISC_PORT, USB_DISC_PIN)
|
||||
#define usb_disc_low() gpio_clear(USB_DISC_PORT, USB_DISC_PIN)
|
||||
// in case of n-channel FET on 1.5k pull-up change on/off disconnect means low level
|
||||
// in case of pnp bipolar transistor or p-channel FET on 1.5k pull-up disconnect means high level
|
||||
#define usb_disconnect() usb_disc_high()
|
||||
#define usb_connect() usb_disc_low()
|
||||
*/
|
||||
// my simple devboard have no variants for programmed connection/disconnection of USB
|
||||
#define usb_disconnect()
|
||||
#define usb_connect()
|
||||
|
||||
#endif // __HARDWARE_INI_H__
|
||||
433
deprecated/F1/2.8TFT/lcd.c
Normal file
433
deprecated/F1/2.8TFT/lcd.c
Normal file
@@ -0,0 +1,433 @@
|
||||
/*
|
||||
* lcd.c
|
||||
*
|
||||
* Copyright 2016 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "main.h"
|
||||
#include "lcd.h"
|
||||
#include "hardware_ini.h"
|
||||
#include "dmagpio.h"
|
||||
#include "registers.h"
|
||||
|
||||
static uint16_t LCD_id = 0;
|
||||
#define nop() __asm__("nop")
|
||||
uint8_t readbyte(){
|
||||
RD_clear;
|
||||
nop();
|
||||
uint8_t byte = LCD_rdbyte();
|
||||
RD_set;
|
||||
nop();
|
||||
return byte;
|
||||
}
|
||||
void writebyte(uint8_t b){
|
||||
LCD_wrbyte(b);
|
||||
WR_clear;
|
||||
nop();
|
||||
WR_set;
|
||||
nop();
|
||||
}
|
||||
void writereg(uint16_t r){
|
||||
LCD_wrbyte(r >> 8);
|
||||
RS_clear;
|
||||
WR_clear;
|
||||
nop();
|
||||
WR_set;
|
||||
LCD_wrbyte(r & 0xff);
|
||||
nop();
|
||||
WR_clear;
|
||||
nop();
|
||||
WR_set;
|
||||
RS_set;
|
||||
}
|
||||
|
||||
uint16_t read_reg(uint16_t reg){
|
||||
uint32_t dat = 0;
|
||||
CS_clear; // active
|
||||
writereg(reg);
|
||||
LCD_read();
|
||||
dat = readbyte() << 8;
|
||||
dat |= readbyte();
|
||||
CS_set;
|
||||
LCD_write(); // restore dir to out
|
||||
return dat;
|
||||
}
|
||||
|
||||
void write_reg(uint16_t reg, uint16_t dat){
|
||||
CS_clear; // active
|
||||
writereg(reg);
|
||||
RS_set; // data
|
||||
writebyte(dat >> 8);
|
||||
writebyte(dat && 0xff);
|
||||
CS_set;
|
||||
}
|
||||
|
||||
/*
|
||||
typedef union{
|
||||
uint8_t bytes[4];
|
||||
uint32_t word;
|
||||
}word32;
|
||||
|
||||
void write16_16(uint16_t reg, uint16_t dat){
|
||||
CS_clear; // active
|
||||
RS_clear; // register
|
||||
LCD_write(); // dir: out
|
||||
writebyte(reg >> 8);
|
||||
writebyte(reg && 0xff);
|
||||
RS_set; // data
|
||||
writebyte(dat >> 8);
|
||||
writebyte(dat && 0xff);
|
||||
CS_set;
|
||||
}
|
||||
|
||||
void write_reg16_var(uint16_t reg, uint32_t dat, uint8_t len){
|
||||
int i;
|
||||
CS_clear; // active
|
||||
RS_clear; // register
|
||||
LCD_write(); // dir: out
|
||||
writebyte(reg >> 8);
|
||||
writebyte(reg && 0xff);
|
||||
RS_set; // data
|
||||
word32 w;
|
||||
w.word = dat;
|
||||
--len;
|
||||
for(i = len; i > -1; --i){
|
||||
writebyte(w.bytes[i]);
|
||||
}
|
||||
CS_set;
|
||||
}
|
||||
|
||||
void write_reg_var(uint8_t reg, uint32_t dat, uint8_t len){
|
||||
int i;
|
||||
CS_clear; // active
|
||||
RS_clear; // register
|
||||
LCD_write(); // dir: out
|
||||
writebyte(reg);
|
||||
RS_set; // data
|
||||
word32 w;
|
||||
w.word = dat;
|
||||
--len;
|
||||
for(i = len; i > -1; --i){
|
||||
writebyte(w.bytes[i]);
|
||||
}
|
||||
CS_set;
|
||||
}
|
||||
|
||||
uint32_t read_reg_var(uint8_t reg, uint8_t len){
|
||||
uint32_t dat = 0;
|
||||
int i;
|
||||
CS_clear; // active
|
||||
RS_clear; // register
|
||||
LCD_write(); // dir: out
|
||||
writebyte(reg);
|
||||
LCD_read();
|
||||
RS_set; // data
|
||||
for(i = 0; i < len; ++i){
|
||||
dat <<= 8;
|
||||
dat = dat | readbyte();
|
||||
}
|
||||
CS_set;
|
||||
return dat;
|
||||
}
|
||||
uint32_t read16_reg_var(uint16_t reg, uint8_t len){
|
||||
uint32_t dat = 0;
|
||||
int i;
|
||||
CS_clear; // active
|
||||
RS_clear; // register
|
||||
LCD_write(); // dir: out
|
||||
writebyte(reg >> 8);
|
||||
writebyte(reg & 0xff);
|
||||
LCD_read();
|
||||
RS_set; // data
|
||||
for(i = 0; i < len; ++i){
|
||||
dat <<= 8;
|
||||
dat = dat | readbyte();
|
||||
}
|
||||
CS_set;
|
||||
return dat;
|
||||
}
|
||||
*/
|
||||
|
||||
uint16_t LCD_status_read(){
|
||||
uint16_t dat;
|
||||
LCD_read();
|
||||
CS_clear;
|
||||
RS_clear;
|
||||
dat = readbyte() << 8;
|
||||
dat |= readbyte();
|
||||
RS_set;
|
||||
CS_set;
|
||||
LCD_write();
|
||||
return dat;
|
||||
}
|
||||
|
||||
void LCD_reset(){
|
||||
CS_set; RS_set; WR_set; RD_set;
|
||||
LCD_write();
|
||||
LCD_wrbyte(0xff);
|
||||
RST_clear;
|
||||
Delay(300);
|
||||
RST_set;
|
||||
Delay(100);
|
||||
write_reg(0,1);
|
||||
Delay(100);
|
||||
/* CS_clear; RS_clear;
|
||||
int i;
|
||||
for(i = 0; i < 4; ++i) writebyte(0);
|
||||
RS_set; CS_set;
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* read LCD identification
|
||||
*/
|
||||
uint16_t LCD_read_id(){
|
||||
write_reg(0,0);
|
||||
LCD_id = read_reg(0);
|
||||
write_reg(0,1);
|
||||
/*if(read8_32(0x04) == 0x8000){
|
||||
write8_24(HX8357D_SETC, 0xFF8357);
|
||||
Delay(10);
|
||||
if(read8_32(0xD0) == 0x990000){
|
||||
LCD_id = 0x8357;
|
||||
return 0x8357;
|
||||
}
|
||||
}
|
||||
if(read8_32(0xD3) == 0x9341){
|
||||
LCD_id = 0x9341;
|
||||
return 0x9341;
|
||||
}*/
|
||||
return LCD_id;
|
||||
}
|
||||
|
||||
#define TFTLCD_DELAY 0xfff
|
||||
|
||||
static const uint16_t ILI932x_regValues[] = {
|
||||
ILI932X_START_OSC , 0x0001, // 0x00
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_DISP_CTRL1 , 0x0121, // 0x07
|
||||
ILI932X_DRIV_OUT_CTRL , 0x0100, // 0x01
|
||||
ILI932X_DRIV_WAV_CTRL , 0x0700, // 0x02
|
||||
ILI932X_ENTRY_MOD , 0x0030, // 0x03
|
||||
ILI932X_RESIZE_CTRL , 0x0000, // 0x04
|
||||
ILI932X_DISP_CTRL2 , 0x0202, // 0x08
|
||||
ILI932X_DISP_CTRL3 , 0x0000, // 0x09
|
||||
ILI932X_DISP_CTRL4 , 0x0000, // 0x0A
|
||||
ILI932X_RGB_DISP_IF_CTRL1, 0x0001, // 0x0C
|
||||
ILI932X_FRM_MARKER_POS , 0x0000, // 0x0D
|
||||
ILI932X_RGB_DISP_IF_CTRL2, 0x0000, // 0x0F
|
||||
/*
|
||||
ILI932X_POW_CTRL1 , 0x0000, // 0x10
|
||||
ILI932X_POW_CTRL2 , 0x0007, // 0x11
|
||||
ILI932X_POW_CTRL3 , 0x0000, // 0x12
|
||||
ILI932X_POW_CTRL4 , 0x0000, // 0x13
|
||||
TFTLCD_DELAY , 200,
|
||||
ILI932X_POW_CTRL1 , 0x1690, // 0x10
|
||||
ILI932X_POW_CTRL2 , 0x0227, // 0x11
|
||||
TFTLCD_DELAY , 50,
|
||||
//ILI932X_POW_CTRL3 , 0x001A, // 0x12
|
||||
ILI932X_POW_CTRL3 , 0x001D, // 0x12
|
||||
TFTLCD_DELAY , 50,
|
||||
//ILI932X_POW_CTRL4 , 0x1800, // 0x13
|
||||
ILI932X_POW_CTRL4 , 0x0800, // 0x13
|
||||
//ILI932X_POW_CTRL7 , 0x002A, // 0x29
|
||||
ILI932X_POW_CTRL7 , 0x0012, // 0x29
|
||||
*/
|
||||
ILI932X_POW_CTRL1 , 0x16b0, // 0x10
|
||||
ILI932X_POW_CTRL2 , 0x0007, // 0x11
|
||||
ILI932X_POW_CTRL3 , 0x0138, // 0x12
|
||||
ILI932X_POW_CTRL4 , 0x0b00, // 0x13
|
||||
ILI932X_POW_CTRL7 , 0x0000, // 0x29
|
||||
TFTLCD_DELAY , 200,
|
||||
ILI932X_FRM_RATE_COL_CTRL, 0x0000, // 0x2B (100Hz)
|
||||
TFTLCD_DELAY , 50,
|
||||
ILI932X_GAMMA_CTRL1 , 0x0000, // 0x30
|
||||
ILI932X_GAMMA_CTRL2 , 0x0000, // 0x31
|
||||
ILI932X_GAMMA_CTRL3 , 0x0000, // 0x32
|
||||
ILI932X_GAMMA_CTRL4 , 0x0206, // 0x35
|
||||
ILI932X_GAMMA_CTRL5 , 0x0808, // 0x36
|
||||
ILI932X_GAMMA_CTRL6 , 0x0007, // 0x37
|
||||
ILI932X_GAMMA_CTRL7 , 0x0201, // 0x38
|
||||
ILI932X_GAMMA_CTRL8 , 0x0000, // 0x39
|
||||
ILI932X_GAMMA_CTRL9 , 0x0000, // 0x3C
|
||||
ILI932X_GAMMA_CTRL10 , 0x0000, // 0x3D
|
||||
ILI932X_GRAM_HOR_AD , 0x0000, // 0x20
|
||||
ILI932X_GRAM_VER_AD , 0x0000, // 0x21
|
||||
ILI932X_HOR_START_AD , 0x0000, // 0x50
|
||||
ILI932X_HOR_END_AD , TFTWIDTH-1, // 0x51
|
||||
ILI932X_VER_START_AD , 0x0000, // 0x52
|
||||
ILI932X_VER_END_AD , TFTHEIGHT-1, // 0x53
|
||||
//ILI932X_GATE_SCAN_CTRL1 , 0xA700, // 0x60
|
||||
ILI932X_GATE_SCAN_CTRL1 , 0x2700, // 0x60
|
||||
//ILI932X_GATE_SCAN_CTRL2 , 0x0003, // 0x61
|
||||
ILI932X_GATE_SCAN_CTRL2 , 0x0001, // 0x61
|
||||
ILI932X_GATE_SCAN_CTRL3 , 0x0000, // 0x6A
|
||||
ILI932X_PANEL_IF_CTRL1 , 0x0010, // 0x90
|
||||
ILI932X_PANEL_IF_CTRL2 , 0x0000, // 0x92
|
||||
ILI932X_PANEL_IF_CTRL3 , 0x0003, // 0x93
|
||||
ILI932X_PANEL_IF_CTRL4 , 0x0110, // 0x95
|
||||
ILI932X_PANEL_IF_CTRL5 , 0x0000, // 0x97
|
||||
ILI932X_PANEL_IF_CTRL6 , 0x0000, // 0x98
|
||||
TFTLCD_DELAY , 50,
|
||||
//ILI932X_DISP_CTRL1 , 0x013b, // 0x07 - 8bit color
|
||||
ILI932X_DISP_CTRL1 , 0x0133, // 0x07
|
||||
};
|
||||
/*
|
||||
static const uint16_t ILI932x_regValues[] = {
|
||||
ILI932X_START_OSC , 0x0001, // 0x00
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_DRIV_OUT_CTRL , 0x0000, // 0x01
|
||||
ILI932X_DRIV_WAV_CTRL , 0x0700, // 0x02
|
||||
ILI932X_ENTRY_MOD , 0x1030, // 0x03
|
||||
ILI932X_RESIZE_CTRL , 0x0000, // 0x04
|
||||
ILI932X_DISP_CTRL2 , 0x0202, // 0x08
|
||||
ILI932X_DISP_CTRL3 , 0x0000, // 0x09
|
||||
ILI932X_DISP_CTRL4 , 0x0000, // 0x0A
|
||||
ILI932X_RGB_DISP_IF_CTRL1, 0x0003, // 0x0C
|
||||
ILI932X_FRM_MARKER_POS , 0x0000, // 0x0D
|
||||
ILI932X_RGB_DISP_IF_CTRL2, 0x0000, // 0x0F
|
||||
ILI932X_DISP_CTRL1 , 0x0021, // 0x07
|
||||
TFTLCD_DELAY , 10,
|
||||
ILI932X_POW_CTRL1 , 0x0000, // 0x10
|
||||
ILI932X_POW_CTRL2 , 0x0007, // 0x11
|
||||
ILI932X_POW_CTRL3 , 0x0000, // 0x12
|
||||
ILI932X_POW_CTRL4 , 0x0000, // 0x13
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_POW_CTRL1 , 0x1690, // 0x10
|
||||
ILI932X_POW_CTRL2 , 0x0007, // 0x11
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_POW_CTRL3 , 0x0118, // 0x12
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_POW_CTRL4 , 0x0b00, // 0x13
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_POW_CTRL7 , 0x0012, // 0x29
|
||||
ILI932X_FRM_RATE_COL_CTRL, 0x000B, // 0x2B
|
||||
ILI932X_GRAM_HOR_AD , 0x0000, // 0x20
|
||||
ILI932X_GRAM_VER_AD , 0x0000, // 0x21
|
||||
ILI932X_HOR_START_AD , 0x0000, // 0x50
|
||||
ILI932X_HOR_END_AD , TFTWIDTH-1, // 0x51
|
||||
ILI932X_VER_START_AD , 0x0000, // 0x52
|
||||
ILI932X_VER_END_AD , TFTHEIGHT-1, // 0x53
|
||||
ILI932X_GATE_SCAN_CTRL1 , 0x2700, // 0x60
|
||||
ILI932X_GATE_SCAN_CTRL2 , 0x0001, // 0x61
|
||||
ILI932X_GATE_SCAN_CTRL3 , 0x0000, // 0x6A
|
||||
ILI932X_PANEL_IF_CTRL1 , 0x0010, // 0x90
|
||||
ILI932X_PANEL_IF_CTRL2 , 0x0000, // 0x92
|
||||
ILI932X_PANEL_IF_CTRL3 , 0x0001, // 0x93
|
||||
ILI932X_PANEL_IF_CTRL4 , 0x0110, // 0x95
|
||||
ILI932X_PANEL_IF_CTRL5 , 0x0000, // 0x97
|
||||
ILI932X_PANEL_IF_CTRL6 , 0x0000, // 0x98
|
||||
ILI932X_DISP_CTRL1 , 0x0133, // 0x07
|
||||
};*/
|
||||
/*
|
||||
static const uint16_t ILI932x_regValues[] = {
|
||||
ILI932X_START_OSC , 0x0001, // 0x00
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_DRIV_OUT_CTRL , 0x0000, // 0x01
|
||||
ILI932X_DRIV_WAV_CTRL , 0x0700, // 0x02
|
||||
ILI932X_ENTRY_MOD , 0x1030, // 0x03
|
||||
ILI932X_RESIZE_CTRL , 0x0000, // 0x04
|
||||
ILI932X_DISP_CTRL2 , 0x0202, // 0x08
|
||||
ILI932X_DISP_CTRL3 , 0x0000, // 0x09
|
||||
ILI932X_DISP_CTRL4 , 0x0000, // 0x0A
|
||||
ILI932X_RGB_DISP_IF_CTRL1, 0x0003, // 0x0C
|
||||
ILI932X_FRM_MARKER_POS , 0x0000, // 0x0D
|
||||
ILI932X_RGB_DISP_IF_CTRL2, 0x0000, // 0x0F
|
||||
ILI932X_DISP_CTRL1 , 0x0011, // 0x07
|
||||
TFTLCD_DELAY , 10,
|
||||
ILI932X_POW_CTRL1 , 0x0000, // 0x10
|
||||
ILI932X_POW_CTRL2 , 0x0007, // 0x11
|
||||
ILI932X_POW_CTRL3 , 0x0000, // 0x12
|
||||
ILI932X_POW_CTRL4 , 0x0000, // 0x13
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_POW_CTRL1 , 0x1690, // 0x10
|
||||
ILI932X_POW_CTRL2 , 0x0007, // 0x11
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_POW_CTRL3 , 0x0118, // 0x12
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_POW_CTRL4 , 0x0b00, // 0x13
|
||||
TFTLCD_DELAY , 100,
|
||||
ILI932X_POW_CTRL7 , 0x0012, // 0x29
|
||||
ILI932X_FRM_RATE_COL_CTRL, 0x000B, // 0x2B
|
||||
ILI932X_GRAM_HOR_AD , 0x0000, // 0x20
|
||||
ILI932X_GRAM_VER_AD , 0x0000, // 0x21
|
||||
ILI932X_HOR_START_AD , 0x0000, // 0x50
|
||||
ILI932X_HOR_END_AD , TFTWIDTH-1, // 0x51
|
||||
ILI932X_VER_START_AD , 0x0000, // 0x52
|
||||
ILI932X_VER_END_AD , TFTHEIGHT-1, // 0x53
|
||||
ILI932X_GATE_SCAN_CTRL1 , 0x2700, // 0x60
|
||||
ILI932X_GATE_SCAN_CTRL2 , 0x0001, // 0x61
|
||||
ILI932X_GATE_SCAN_CTRL3 , 0x0000, // 0x6A
|
||||
ILI932X_PANEL_IF_CTRL1 , 0x0010, // 0x90
|
||||
ILI932X_PANEL_IF_CTRL2 , 0x0000, // 0x92
|
||||
ILI932X_PANEL_IF_CTRL3 , 0x0001, // 0x93
|
||||
ILI932X_PANEL_IF_CTRL4 , 0x0110, // 0x95
|
||||
ILI932X_PANEL_IF_CTRL5 , 0x0000, // 0x97
|
||||
ILI932X_PANEL_IF_CTRL6 , 0x0000, // 0x98
|
||||
ILI932X_DISP_CTRL1 , 0x0133, // 0x07
|
||||
};
|
||||
*/
|
||||
/**
|
||||
* try to init display
|
||||
* return 0 if failed
|
||||
*/
|
||||
uint16_t LCD_init(){
|
||||
//if(LCD_id == 0)
|
||||
LCD_read_id();
|
||||
if(LCD_id > 0x931f && LCD_id < 0x932a){ // 932x
|
||||
// LCD_id = 0x9320; // make it simple!
|
||||
int i, s = sizeof(ILI932x_regValues)/sizeof(uint16_t);
|
||||
for(i = 0; i < s;){
|
||||
uint16_t a = ILI932x_regValues[i++];
|
||||
uint16_t b = ILI932x_regValues[i++];
|
||||
if(a == TFTLCD_DELAY) Delay(b);
|
||||
else write_reg(a, b);
|
||||
}
|
||||
uint16_t addr;
|
||||
for(addr = 0x80; addr < 0x86; ++addr)
|
||||
write_reg(addr, 0);
|
||||
Delay(300);
|
||||
return LCD_id;
|
||||
}
|
||||
//LCD_reset();
|
||||
return LCD_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* put point to current position incrementing coordinates
|
||||
*/
|
||||
void putpoint(uint16_t colr){
|
||||
int i;
|
||||
if(LCD_id == 0) return;
|
||||
LCD_write(); // dir: out
|
||||
CS_clear; // active
|
||||
writereg(ILI932X_RW_GRAM);
|
||||
for(i = 0; i < 500; ++i){
|
||||
writebyte(colr >> 8);
|
||||
writebyte(colr && 0xff);
|
||||
}
|
||||
CS_set;
|
||||
//if(LCD_id == 0x9320){
|
||||
//}
|
||||
}
|
||||
|
||||
void setpix(uint16_t x, uint16_t y, uint16_t colr){
|
||||
write_reg(ILI932X_GRAM_HOR_AD, x);
|
||||
write_reg(ILI932X_GRAM_VER_AD, y);
|
||||
write_reg(ILI932X_RW_GRAM, colr);
|
||||
}
|
||||
68
deprecated/F1/2.8TFT/lcd.h
Normal file
68
deprecated/F1/2.8TFT/lcd.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* lcd.h
|
||||
*
|
||||
* Copyright 2016 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef __LCD_H__
|
||||
#define __LCD_H__
|
||||
|
||||
#define TFTWIDTH 240
|
||||
#define TFTHEIGHT 320
|
||||
|
||||
#define DWT_CYCCNT *(volatile uint32_t *)0xE0001004
|
||||
#define DWT_CONTROL *(volatile uint32_t *)0xE0001000
|
||||
#define SCB_DEMCR *(volatile uint32_t *)0xE000EDFC
|
||||
// pause for 150ns
|
||||
|
||||
#define pause() do{SCB_DEMCR |= 0x01000000; DWT_CYCCNT = 0; DWT_CONTROL|= 1; \
|
||||
while(DWT_CYCCNT < 3);}while(0)
|
||||
|
||||
//#define pause() do{}while(0)
|
||||
|
||||
uint16_t read_reg(uint16_t reg);
|
||||
void write_reg(uint16_t reg, uint16_t dat);
|
||||
|
||||
/*
|
||||
uint32_t read_reg_var(uint8_t reg, uint8_t len);
|
||||
uint32_t read16_reg_var(uint16_t reg, uint8_t len);
|
||||
|
||||
#define write8_32(r,d) do{write_reg_var(r,d,4);}while(0)
|
||||
#define write8_24(r,d) do{write_reg_var(r,d,3);}while(0)
|
||||
#define write8_16(r,d) do{write_reg_var(r,d,2);}while(0)
|
||||
#define write16_32(r,d) do{write_reg16_var(r,d,4);}while(0)
|
||||
#define write16_24(r,d) do{write_reg16_var(r,d,3);}while(0)
|
||||
//#define write16_16(r,d) do{write_reg16_var(r,d,2);}while(0)
|
||||
void write16_16(uint16_t reg, uint16_t dat);
|
||||
#define read8_32(x) (read_reg_var(x, 4))
|
||||
#define read8_16(x) ((uint16_t)(read_reg_var(x, 2)))
|
||||
#define read16_32(x) (read16_reg_var(x, 4))
|
||||
#define read16_16(x) ((uint16_t)(read16_reg_var(x, 2)))
|
||||
*/
|
||||
|
||||
uint16_t LCD_status_read();
|
||||
uint16_t LCD_read_id();
|
||||
void LCD_reset();
|
||||
uint16_t LCD_init();
|
||||
void putpoint(uint16_t colr);
|
||||
void setpix(uint16_t x, uint16_t y, uint16_t colr);
|
||||
|
||||
|
||||
|
||||
#endif // __LCD_H__
|
||||
9
deprecated/F1/2.8TFT/ld/devices.data
Normal file
9
deprecated/F1/2.8TFT/ld/devices.data
Normal file
@@ -0,0 +1,9 @@
|
||||
stm32f103?4* stm32f1 ROM=16K RAM=6K
|
||||
stm32f103?6* stm32f1 ROM=32K RAM=10K
|
||||
stm32f103?8* stm32f1 ROM=64K RAM=20K
|
||||
stm32f103?b* stm32f1 ROM=128K RAM=20K
|
||||
stm32f103?c* stm32f1 ROM=256K RAM=48K
|
||||
stm32f103?d* stm32f1 ROM=384K RAM=64K
|
||||
stm32f103?e* stm32f1 ROM=512K RAM=64K
|
||||
stm32f103?f* stm32f1 ROM=768K RAM=96K
|
||||
stm32f103?g* stm32f1 ROM=1024K RAM=96K
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103x4.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103x4.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 16K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 6K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103x6.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103x6.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 10K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103x8.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103x8.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 64K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103xB.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103xB.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 128K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103xC.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103xC.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 256K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103xD.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103xD.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 384K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103xE.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103xE.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 512K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103xF.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103xF.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 768K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 96K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
31
deprecated/F1/2.8TFT/ld/stm32f103xG.ld
Normal file
31
deprecated/F1/2.8TFT/ld/stm32f103xG.ld
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Karl Palsson <karlp@tweak.net.au>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Linker script for STM32F100x4, 16K flash, 4K RAM. */
|
||||
|
||||
/* Define memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
|
||||
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 96K
|
||||
}
|
||||
|
||||
/* Include the common ld script. */
|
||||
INCLUDE libopencm3_stm32f1.ld
|
||||
|
||||
128
deprecated/F1/2.8TFT/main.c
Normal file
128
deprecated/F1/2.8TFT/main.c
Normal file
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* main.c
|
||||
*
|
||||
* Copyright 2014 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "main.h"
|
||||
#include "hardware_ini.h"
|
||||
#include "cdcacm.h"
|
||||
#include "dmagpio.h"
|
||||
#include "lcd.h"
|
||||
#include "registers.h"
|
||||
|
||||
volatile uint32_t Timer = 0; // global timer (milliseconds)
|
||||
usbd_device *usbd_dev;
|
||||
|
||||
int main(){
|
||||
uint32_t Old_timer = 0;
|
||||
|
||||
// RCC clocking: 8MHz oscillator -> 72MHz system
|
||||
rcc_clock_setup_in_hse_8mhz_out_72mhz();
|
||||
// SysTick is a system timer with 1ms period
|
||||
SysTick_init();
|
||||
// disable JTAG to use PA13/PA14
|
||||
gpio_primary_remap(AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_OFF, 0);
|
||||
GPIO_init();
|
||||
|
||||
usb_disconnect(); // turn off USB while initializing all
|
||||
|
||||
// USB
|
||||
usbd_dev = USB_init();
|
||||
|
||||
dmagpio_init();
|
||||
|
||||
usb_connect(); // turn on USB
|
||||
|
||||
LCD_reset();
|
||||
|
||||
int oldusblen = 0, x = 0, y = 0;
|
||||
int id = LCD_init();
|
||||
if(!id) P("failed to init LCD\n");
|
||||
uint16_t colr = 0;
|
||||
while(1){
|
||||
usbd_poll(usbd_dev);
|
||||
if(usbdatalen != oldusblen){ // there's something in USB buffer
|
||||
parse_incoming_buf(usbdatabuf, &usbdatalen);
|
||||
oldusblen = usbdatalen;
|
||||
id = 0;
|
||||
}
|
||||
if(transfer_complete){
|
||||
P("transfered\n");
|
||||
transfer_complete = 0;
|
||||
}
|
||||
setpix(x++, y++, colr);
|
||||
if(x > 200) x = 0;
|
||||
if(y > 200) y = 0;
|
||||
if(Timer - Old_timer > 999){ // one-second cycle
|
||||
Old_timer += 1000;
|
||||
P("Display id: ");
|
||||
print_hex((uint8_t*)&id, 2);
|
||||
newline();
|
||||
//write_reg(ILI932X_DISP_CTRL1, 0x0133);
|
||||
if(id){
|
||||
uint16_t r = read_reg(ILI932X_RW_GRAM);
|
||||
print_hex((uint8_t*)&r, 2);
|
||||
/*P(", status: ");
|
||||
r = LCD_status_read();
|
||||
print_hex((uint8_t*)&r, 2);*/
|
||||
newline();
|
||||
uint16_t i;
|
||||
for(i = 0; i < 0x29; ++i){
|
||||
r = read_reg(i);
|
||||
print_hex((uint8_t*)&i, 2); P(" = ");
|
||||
print_hex((uint8_t*)&r, 2); usb_send(' ');
|
||||
r = read_reg(i); print_hex((uint8_t*)&r, 2);
|
||||
newline();
|
||||
}
|
||||
putpoint(colr);
|
||||
colr += 32;
|
||||
}else{
|
||||
LCD_reset();
|
||||
id = LCD_init();
|
||||
if(!id) P("failed to init LCD\n");
|
||||
}
|
||||
}else if(Timer < Old_timer){ // Timer overflow
|
||||
Old_timer = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* SysTick interrupt: increment global time & send data buffer through USB
|
||||
*/
|
||||
void sys_tick_handler(){
|
||||
Timer++;
|
||||
usbd_poll(usbd_dev);
|
||||
usb_send_buffer();
|
||||
}
|
||||
|
||||
// pause function, delay in ms
|
||||
void Delay(uint16_t _U_ time){
|
||||
uint32_t waitto = Timer + time;
|
||||
while(Timer < waitto);
|
||||
}
|
||||
|
||||
/**
|
||||
* print current time in milliseconds: 4 bytes for ovrvlow + 4 bytes for time
|
||||
* with ' ' as delimeter
|
||||
*/
|
||||
void print_time(){
|
||||
print_int(Timer);
|
||||
}
|
||||
53
deprecated/F1/2.8TFT/main.h
Normal file
53
deprecated/F1/2.8TFT/main.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* main.h
|
||||
*
|
||||
* Copyright 2014 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
#pragma once
|
||||
#ifndef __MAIN_H__
|
||||
#define __MAIN_H__
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h> // memcpy
|
||||
#include <libopencm3/stm32/gpio.h>
|
||||
#include <libopencm3/stm32/usart.h>
|
||||
#include <libopencm3/cm3/nvic.h>
|
||||
#include <libopencm3/usb/cdc.h>
|
||||
#include <libopencm3/usb/usbd.h>
|
||||
#include <libopencm3/cm3/systick.h>
|
||||
#include <libopencm3/stm32/rcc.h>
|
||||
#include <libopencm3/stm32/adc.h>
|
||||
#include <libopencm3/stm32/dma.h>
|
||||
#include <libopencm3/stm32/spi.h>
|
||||
#include <libopencm3/stm32/timer.h>
|
||||
|
||||
#include "sync.h" // mutexes
|
||||
#include "user_proto.h"
|
||||
|
||||
#define _U_ __attribute__((__unused__))
|
||||
#define U8(x) ((uint8_t) x)
|
||||
#define U16(x) ((uint16_t) x)
|
||||
#define U32(x) ((uint32_t) x)
|
||||
|
||||
extern volatile uint32_t Timer; // global timer (milliseconds)
|
||||
void Delay(uint16_t time);
|
||||
|
||||
#endif // __MAIN_H__
|
||||
|
||||
172
deprecated/F1/2.8TFT/registers.h
Normal file
172
deprecated/F1/2.8TFT/registers.h
Normal file
@@ -0,0 +1,172 @@
|
||||
// Register names from Peter Barrett's Microtouch code
|
||||
#define ILI932X_START_OSC 0x00
|
||||
#define ILI932X_DRIV_OUT_CTRL 0x01
|
||||
#define ILI932X_DRIV_WAV_CTRL 0x02
|
||||
#define ILI932X_ENTRY_MOD 0x03
|
||||
#define ILI932X_RESIZE_CTRL 0x04
|
||||
#define ILI932X_DISP_CTRL1 0x07
|
||||
#define ILI932X_DISP_CTRL2 0x08
|
||||
#define ILI932X_DISP_CTRL3 0x09
|
||||
#define ILI932X_DISP_CTRL4 0x0A
|
||||
#define ILI932X_RGB_DISP_IF_CTRL1 0x0C
|
||||
#define ILI932X_FRM_MARKER_POS 0x0D
|
||||
#define ILI932X_RGB_DISP_IF_CTRL2 0x0F
|
||||
#define ILI932X_POW_CTRL1 0x10
|
||||
#define ILI932X_POW_CTRL2 0x11
|
||||
#define ILI932X_POW_CTRL3 0x12
|
||||
#define ILI932X_POW_CTRL4 0x13
|
||||
#define ILI932X_GRAM_HOR_AD 0x20
|
||||
#define ILI932X_GRAM_VER_AD 0x21
|
||||
#define ILI932X_RW_GRAM 0x22
|
||||
#define ILI932X_POW_CTRL7 0x29
|
||||
#define ILI932X_FRM_RATE_COL_CTRL 0x2B
|
||||
#define ILI932X_GAMMA_CTRL1 0x30
|
||||
#define ILI932X_GAMMA_CTRL2 0x31
|
||||
#define ILI932X_GAMMA_CTRL3 0x32
|
||||
#define ILI932X_GAMMA_CTRL4 0x35
|
||||
#define ILI932X_GAMMA_CTRL5 0x36
|
||||
#define ILI932X_GAMMA_CTRL6 0x37
|
||||
#define ILI932X_GAMMA_CTRL7 0x38
|
||||
#define ILI932X_GAMMA_CTRL8 0x39
|
||||
#define ILI932X_GAMMA_CTRL9 0x3C
|
||||
#define ILI932X_GAMMA_CTRL10 0x3D
|
||||
#define ILI932X_HOR_START_AD 0x50
|
||||
#define ILI932X_HOR_END_AD 0x51
|
||||
#define ILI932X_VER_START_AD 0x52
|
||||
#define ILI932X_VER_END_AD 0x53
|
||||
#define ILI932X_GATE_SCAN_CTRL1 0x60
|
||||
#define ILI932X_GATE_SCAN_CTRL2 0x61
|
||||
#define ILI932X_GATE_SCAN_CTRL3 0x6A
|
||||
#define ILI932X_PART_IMG1_DISP_POS 0x80
|
||||
#define ILI932X_PART_IMG1_START_AD 0x81
|
||||
#define ILI932X_PART_IMG1_END_AD 0x82
|
||||
#define ILI932X_PART_IMG2_DISP_POS 0x83
|
||||
#define ILI932X_PART_IMG2_START_AD 0x84
|
||||
#define ILI932X_PART_IMG2_END_AD 0x85
|
||||
#define ILI932X_PANEL_IF_CTRL1 0x90
|
||||
#define ILI932X_PANEL_IF_CTRL2 0x92
|
||||
#define ILI932X_PANEL_IF_CTRL3 0x93
|
||||
#define ILI932X_PANEL_IF_CTRL4 0x95
|
||||
#define ILI932X_PANEL_IF_CTRL5 0x97
|
||||
#define ILI932X_PANEL_IF_CTRL6 0x98
|
||||
|
||||
#define HX8347G_COLADDRSTART_HI 0x02
|
||||
#define HX8347G_COLADDRSTART_LO 0x03
|
||||
#define HX8347G_COLADDREND_HI 0x04
|
||||
#define HX8347G_COLADDREND_LO 0x05
|
||||
#define HX8347G_ROWADDRSTART_HI 0x06
|
||||
#define HX8347G_ROWADDRSTART_LO 0x07
|
||||
#define HX8347G_ROWADDREND_HI 0x08
|
||||
#define HX8347G_ROWADDREND_LO 0x09
|
||||
#define HX8347G_MEMACCESS 0x16
|
||||
|
||||
|
||||
|
||||
#define ILI9341_SOFTRESET 0x01
|
||||
#define ILI9341_SLEEPIN 0x10
|
||||
#define ILI9341_SLEEPOUT 0x11
|
||||
#define ILI9341_NORMALDISP 0x13
|
||||
#define ILI9341_INVERTOFF 0x20
|
||||
#define ILI9341_INVERTON 0x21
|
||||
#define ILI9341_GAMMASET 0x26
|
||||
#define ILI9341_DISPLAYOFF 0x28
|
||||
#define ILI9341_DISPLAYON 0x29
|
||||
#define ILI9341_COLADDRSET 0x2A
|
||||
#define ILI9341_PAGEADDRSET 0x2B
|
||||
#define ILI9341_MEMORYWRITE 0x2C
|
||||
#define ILI9341_PIXELFORMAT 0x3A
|
||||
#define ILI9341_FRAMECONTROL 0xB1
|
||||
#define ILI9341_DISPLAYFUNC 0xB6
|
||||
#define ILI9341_ENTRYMODE 0xB7
|
||||
#define ILI9341_POWERCONTROL1 0xC0
|
||||
#define ILI9341_POWERCONTROL2 0xC1
|
||||
#define ILI9341_VCOMCONTROL1 0xC5
|
||||
#define ILI9341_VCOMCONTROL2 0xC7
|
||||
#define ILI9341_MEMCONTROL 0x36
|
||||
#define ILI9341_MADCTL 0x36
|
||||
|
||||
#define ILI9341_MADCTL_MY 0x80
|
||||
#define ILI9341_MADCTL_MX 0x40
|
||||
#define ILI9341_MADCTL_MV 0x20
|
||||
#define ILI9341_MADCTL_ML 0x10
|
||||
#define ILI9341_MADCTL_RGB 0x00
|
||||
#define ILI9341_MADCTL_BGR 0x08
|
||||
#define ILI9341_MADCTL_MH 0x04
|
||||
|
||||
|
||||
|
||||
#define HX8357_NOP 0x00
|
||||
#define HX8357_SWRESET 0x01
|
||||
#define HX8357_RDDID 0x04
|
||||
#define HX8357_RDDST 0x09
|
||||
|
||||
#define HX8357B_RDPOWMODE 0x0A
|
||||
#define HX8357B_RDMADCTL 0x0B
|
||||
#define HX8357B_RDCOLMOD 0x0C
|
||||
#define HX8357B_RDDIM 0x0D
|
||||
#define HX8357B_RDDSDR 0x0F
|
||||
|
||||
#define HX8357_SLPIN 0x10
|
||||
#define HX8357_SLPOUT 0x11
|
||||
#define HX8357B_PTLON 0x12
|
||||
#define HX8357B_NORON 0x13
|
||||
|
||||
#define HX8357_INVOFF 0x20
|
||||
#define HX8357_INVON 0x21
|
||||
#define HX8357_DISPOFF 0x28
|
||||
#define HX8357_DISPON 0x29
|
||||
|
||||
#define HX8357_CASET 0x2A
|
||||
#define HX8357_PASET 0x2B
|
||||
#define HX8357_RAMWR 0x2C
|
||||
#define HX8357_RAMRD 0x2E
|
||||
|
||||
#define HX8357B_PTLAR 0x30
|
||||
#define HX8357_TEON 0x35
|
||||
#define HX8357_TEARLINE 0x44
|
||||
#define HX8357_MADCTL 0x36
|
||||
#define HX8357_COLMOD 0x3A
|
||||
|
||||
#define HX8357_SETOSC 0xB0
|
||||
#define HX8357_SETPWR1 0xB1
|
||||
#define HX8357B_SETDISPLAY 0xB2
|
||||
#define HX8357_SETRGB 0xB3
|
||||
#define HX8357D_SETCOM 0xB6
|
||||
|
||||
#define HX8357B_SETDISPMODE 0xB4
|
||||
#define HX8357D_SETCYC 0xB4
|
||||
#define HX8357B_SETOTP 0xB7
|
||||
#define HX8357D_SETC 0xB9
|
||||
|
||||
#define HX8357B_SET_PANEL_DRIVING 0xC0
|
||||
#define HX8357D_SETSTBA 0xC0
|
||||
#define HX8357B_SETDGC 0xC1
|
||||
#define HX8357B_SETID 0xC3
|
||||
#define HX8357B_SETDDB 0xC4
|
||||
#define HX8357B_SETDISPLAYFRAME 0xC5
|
||||
#define HX8357B_GAMMASET 0xC8
|
||||
#define HX8357B_SETCABC 0xC9
|
||||
#define HX8357_SETPANEL 0xCC
|
||||
|
||||
|
||||
#define HX8357B_SETPOWER 0xD0
|
||||
#define HX8357B_SETVCOM 0xD1
|
||||
#define HX8357B_SETPWRNORMAL 0xD2
|
||||
|
||||
#define HX8357B_RDID1 0xDA
|
||||
#define HX8357B_RDID2 0xDB
|
||||
#define HX8357B_RDID3 0xDC
|
||||
#define HX8357B_RDID4 0xDD
|
||||
|
||||
#define HX8357D_SETGAMMA 0xE0
|
||||
|
||||
#define HX8357B_SETGAMMA 0xC8
|
||||
#define HX8357B_SETPANELRELATED 0xE9
|
||||
|
||||
#define HX8357B_MADCTL_MY 0x80
|
||||
#define HX8357B_MADCTL_MX 0x40
|
||||
#define HX8357B_MADCTL_MV 0x20
|
||||
#define HX8357B_MADCTL_ML 0x10
|
||||
#define HX8357B_MADCTL_RGB 0x00
|
||||
#define HX8357B_MADCTL_BGR 0x08
|
||||
#define HX8357B_MADCTL_MH 0x04
|
||||
93
deprecated/F1/2.8TFT/sync.c
Normal file
93
deprecated/F1/2.8TFT/sync.c
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Fergus Noble <fergusnoble@gmail.com>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
* implement mutexes for other type of MCU (which doesn't have strex & ldrex)
|
||||
*/
|
||||
|
||||
#include <libopencm3/cm3/sync.h>
|
||||
|
||||
/* DMB is supported on CM0 */
|
||||
void __dmb()
|
||||
{
|
||||
__asm__ volatile ("dmb");
|
||||
}
|
||||
|
||||
/* Those are defined only on CM3 or CM4 */
|
||||
#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
|
||||
|
||||
uint32_t __ldrex(volatile uint32_t *addr)
|
||||
{
|
||||
uint32_t res;
|
||||
__asm__ volatile ("ldrex %0, [%1]" : "=r" (res) : "r" (addr));
|
||||
return res;
|
||||
}
|
||||
|
||||
uint32_t __strex(uint32_t val, volatile uint32_t *addr)
|
||||
{
|
||||
uint32_t res;
|
||||
__asm__ volatile ("strex %0, %2, [%1]"
|
||||
: "=&r" (res) : "r" (addr), "r" (val));
|
||||
return res;
|
||||
}
|
||||
|
||||
void mutex_lock(mutex_t *m)
|
||||
{
|
||||
uint32_t status = 0;
|
||||
|
||||
do {
|
||||
/* Wait until the mutex is unlocked. */
|
||||
while (__ldrex(m) != MUTEX_UNLOCKED);
|
||||
|
||||
/* Try to acquire it. */
|
||||
status = __strex(MUTEX_LOCKED, m);
|
||||
|
||||
/* Did we get it? If not then try again. */
|
||||
} while (status != 0);
|
||||
|
||||
/* Execute the mysterious Data Memory Barrier instruction! */
|
||||
__dmb();
|
||||
}
|
||||
|
||||
void mutex_unlock(mutex_t *m)
|
||||
{
|
||||
/* Ensure accesses to protected resource are finished */
|
||||
__dmb();
|
||||
|
||||
/* Free the lock. */
|
||||
*m = MUTEX_UNLOCKED;
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to lock mutex
|
||||
* if it's already locked or there was error in STREX, return MUTEX_LOCKED
|
||||
* else return MUTEX_UNLOCKED
|
||||
*/
|
||||
mutex_t mutex_trylock(mutex_t *m){
|
||||
uint32_t status = 0;
|
||||
mutex_t old_lock = __ldrex(m); // get mutex value
|
||||
// set mutex
|
||||
status = __strex(MUTEX_LOCKED, m);
|
||||
if(status == 0) __dmb();
|
||||
else old_lock = MUTEX_LOCKED;
|
||||
return old_lock;
|
||||
}
|
||||
|
||||
#endif
|
||||
53
deprecated/F1/2.8TFT/sync.h
Normal file
53
deprecated/F1/2.8TFT/sync.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* This file is part of the libopencm3 project.
|
||||
*
|
||||
* Copyright (C) 2012 Fergus Noble <fergusnoble@gmail.com>
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef LIBOPENCM3_CM3_SYNC_H
|
||||
#define LIBOPENCM3_CM3_SYNC_H
|
||||
|
||||
void __dmb(void);
|
||||
|
||||
/* Implements synchronisation primitives as discussed in the ARM document
|
||||
* DHT0008A (ID081709) "ARM Synchronization Primitives" and the ARM v7-M
|
||||
* Architecture Reference Manual.
|
||||
*/
|
||||
|
||||
/* --- Exclusive load and store instructions ------------------------------- */
|
||||
|
||||
/* Those are defined only on CM3 or CM4 */
|
||||
#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
|
||||
|
||||
uint32_t __ldrex(volatile uint32_t *addr);
|
||||
uint32_t __strex(uint32_t val, volatile uint32_t *addr);
|
||||
|
||||
/* --- Convenience functions ----------------------------------------------- */
|
||||
|
||||
/* Here we implement some simple synchronisation primitives. */
|
||||
|
||||
typedef uint32_t mutex_t;
|
||||
|
||||
#define MUTEX_UNLOCKED 0
|
||||
#define MUTEX_LOCKED 1
|
||||
|
||||
void mutex_lock(mutex_t *m);
|
||||
void mutex_unlock(mutex_t *m);
|
||||
mutex_t mutex_trylock(mutex_t *m);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
93
deprecated/F1/2.8TFT/user_proto.c
Normal file
93
deprecated/F1/2.8TFT/user_proto.c
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* user_proto.c
|
||||
*
|
||||
* Copyright 2014 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "cdcacm.h"
|
||||
#include "main.h"
|
||||
#include "hardware_ini.h"
|
||||
#include "dmagpio.h"
|
||||
|
||||
/**
|
||||
* parce command buffer buf with length len
|
||||
* return 0 if buffer processed or len if there's not enough data in buffer
|
||||
*/
|
||||
void parse_incoming_buf(uint8_t *buf, int *len){
|
||||
static int lastidx = 0;
|
||||
int l = *len;
|
||||
for(; lastidx < l; ++lastidx){
|
||||
uint8_t cmd = buf[lastidx];
|
||||
usb_send(cmd);
|
||||
if(cmd == '\n'){
|
||||
dmagpio_transfer(buf, *len);
|
||||
*len = 0;
|
||||
lastidx = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send char array wrd thru USB
|
||||
*/
|
||||
void prnt(uint8_t *wrd){
|
||||
if(!wrd) return;
|
||||
while(*wrd) usb_send(*wrd++);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print buff as hex values
|
||||
* @param buf - buffer to print
|
||||
* @param l - buf length
|
||||
* @param s - function to send a byte
|
||||
*/
|
||||
void print_hex(uint8_t *buff, uint8_t l){
|
||||
void putc(uint8_t c){
|
||||
if(c < 10)
|
||||
usb_send(c + '0');
|
||||
else
|
||||
usb_send(c + 'a' - 10);
|
||||
}
|
||||
usb_send('0'); usb_send('x'); // prefix 0x
|
||||
while(l--){
|
||||
putc(buff[l] >> 4);
|
||||
putc(buff[l] & 0x0f);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print decimal integer value
|
||||
* @param N - value to print
|
||||
* @param s - function to send a byte
|
||||
*/
|
||||
void print_int(int32_t N){
|
||||
uint8_t buf[10], L = 0;
|
||||
if(N < 0){
|
||||
usb_send('-');
|
||||
N = -N;
|
||||
}
|
||||
if(N){
|
||||
while(N){
|
||||
buf[L++] = N % 10 + '0';
|
||||
N /= 10;
|
||||
}
|
||||
while(L--) usb_send(buf[L]);
|
||||
}else usb_send('0');
|
||||
}
|
||||
|
||||
47
deprecated/F1/2.8TFT/user_proto.h
Normal file
47
deprecated/F1/2.8TFT/user_proto.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* user_proto.h
|
||||
*
|
||||
* Copyright 2014 Edward V. Emelianov <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef __USER_PROTO_H__
|
||||
#define __USER_PROTO_H__
|
||||
|
||||
#include "cdcacm.h"
|
||||
|
||||
// shorthand for prnt
|
||||
#define P(arg) do{prnt((uint8_t*)arg);}while(0)
|
||||
// debug message - over USB
|
||||
#ifdef EBUG
|
||||
#define DBG(a) do{prnt((uint8_t*)a);}while(0)
|
||||
#else
|
||||
#define DBG(a)
|
||||
#endif
|
||||
|
||||
typedef uint8_t (*intfun)(int32_t);
|
||||
|
||||
void prnt(uint8_t *wrd);
|
||||
#define newline() usb_send('\n')
|
||||
|
||||
void print_int(int32_t N);
|
||||
void print_hex(uint8_t *buff, uint8_t l);
|
||||
|
||||
void parse_incoming_buf(uint8_t *buf, int *len);
|
||||
|
||||
#endif // __USER_PROTO_H__
|
||||
Reference in New Issue
Block a user