修复开关控制组控的控制异常问题
修改PB开关状态组控处理,解决后32路的开关状态会复用上前32个回路的数据
This commit is contained in:
143
Source/arch/apt32f102_iostring.c
Normal file
143
Source/arch/apt32f102_iostring.c
Normal file
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
* @file apt32f102_iostring.c
|
||||
* @author APT AE Team
|
||||
* @version V1.00
|
||||
* @date 2020/05/21
|
||||
******************************************************************************
|
||||
*THIS SOFTWARE WHICH IS FOR ILLUSTRATIVE PURPOSES ONLY WHICH PROVIDES
|
||||
*CUSTOMER WITH CODING INFORMATION REGARDING THEIR PRODUCTS.
|
||||
*APT CHIP SHALL NOT BE HELD RESPONSIBILITY ADN LIABILITY FOR ANY DIRECT,
|
||||
*INDIRECT DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF
|
||||
*SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
|
||||
*CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.AND APT CHIP RESERVES
|
||||
*THE RIGHT TO MAKE CHANGES IN THE SOFTWARE WITHOUT NOTIFICATION
|
||||
******************************************************************************
|
||||
*/
|
||||
/******************************************************************************
|
||||
* Include Files
|
||||
******************************************************************************/
|
||||
#include "apt32f102.h"
|
||||
#include "apt32f102_uart.h"
|
||||
#include "stdarg.h"
|
||||
#include "stddef.h"
|
||||
#include "stdio.h"
|
||||
#define LDCC_DATA_P 0xe001105c /* LDCC Register. */
|
||||
#define LDCC_BIT_STATUS 0x80000000 /* LDCC Status bit. */
|
||||
//#define _debug_uart_io
|
||||
/******************************************************************************
|
||||
* Main code
|
||||
******************************************************************************/
|
||||
void __putchar__ (char ch)
|
||||
{
|
||||
#ifdef _debug_uart_io
|
||||
//UARTTxByte(UART0,s); //uart 0
|
||||
UARTTxByte(UART1,s); //uart 1
|
||||
#else
|
||||
//select debug serial Pane
|
||||
volatile unsigned int *pdata = (unsigned int *)LDCC_DATA_P;
|
||||
while (*pdata & LDCC_BIT_STATUS); //Waiting for data read.
|
||||
*pdata = ch;
|
||||
#endif
|
||||
}
|
||||
|
||||
int *myitoa(int value, int* string, int radix)
|
||||
{
|
||||
|
||||
int tmp[33];
|
||||
int* tp = tmp;
|
||||
int i;
|
||||
unsigned v;
|
||||
int sign;
|
||||
int* sp;
|
||||
|
||||
if (radix > 36 || radix <= 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
sign = (radix == 10 && value < 0);
|
||||
if (sign)
|
||||
v = -value;
|
||||
else
|
||||
v = (unsigned)value;
|
||||
while (v || tp == tmp)
|
||||
{
|
||||
i = v % radix;
|
||||
v = v / radix;
|
||||
if (i < 10) {
|
||||
*tp++ = i+'0';
|
||||
|
||||
} else {
|
||||
*tp++ = i + 'a' - 10;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sp = string;
|
||||
|
||||
if (sign)
|
||||
*sp++ = '-';
|
||||
while (tp > tmp)
|
||||
*sp++ = *--tp;
|
||||
*sp = 0;
|
||||
return string;
|
||||
}
|
||||
|
||||
|
||||
void my_printf(const char *fmt, ...)
|
||||
{
|
||||
|
||||
// const char *s;
|
||||
const int *s;
|
||||
int d;
|
||||
//char ch, *pbuf, buf[16];
|
||||
char ch, *pbuf;
|
||||
int buf[16];
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
while (*fmt) {
|
||||
if (*fmt != '%') {
|
||||
__putchar__(*fmt++);
|
||||
continue;
|
||||
}
|
||||
switch (*++fmt) {
|
||||
case 's':
|
||||
s = va_arg(ap, const int *);
|
||||
for ( ; *s; s++) {
|
||||
__putchar__(*s);
|
||||
}
|
||||
break;
|
||||
case 'd':
|
||||
d = va_arg(ap, int);
|
||||
myitoa(d, buf, 10);
|
||||
for (s = buf; *s; s++) {
|
||||
__putchar__(*s);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
case 'X':
|
||||
d = va_arg(ap, int);
|
||||
myitoa(d, buf, 16);
|
||||
for (s = buf; *s; s++) {
|
||||
__putchar__(*s);
|
||||
}
|
||||
break;
|
||||
// Add other specifiers here...
|
||||
case 'c':
|
||||
case 'C':
|
||||
ch = (unsigned char)va_arg(ap, int);
|
||||
pbuf = &ch;
|
||||
__putchar__(*pbuf);
|
||||
break;
|
||||
default:
|
||||
__putchar__(*fmt);
|
||||
break;
|
||||
}
|
||||
fmt++;
|
||||
}
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
3453
Source/arch/apt32f102a.svc
Normal file
3453
Source/arch/apt32f102a.svc
Normal file
File diff suppressed because it is too large
Load Diff
213
Source/arch/crt0.S
Normal file
213
Source/arch/crt0.S
Normal file
@@ -0,0 +1,213 @@
|
||||
//start from __start,
|
||||
//(0)initialize vector table
|
||||
//(1)initialize all registers
|
||||
//(2)prepare initial reg values for user process
|
||||
//(3)initialize supervisor mode stack pointer
|
||||
//(4)construct ASID Table
|
||||
//(5)prepare PTE entry for user process start virtual address
|
||||
//(6)creat a mapping between VPN:0 and PFN:0 for kernel
|
||||
//(7)set VBR register
|
||||
//(8)enable EE and MMU
|
||||
//(9)jump to the main procedure using jsri main
|
||||
|
||||
|
||||
#define UserOption 0x55aa0005
|
||||
.export vector_table
|
||||
//.import VecTable
|
||||
.align 10
|
||||
vector_table: //totally 256 entries
|
||||
// .long __start
|
||||
// .rept 128
|
||||
// .long __dummy
|
||||
// .endr
|
||||
|
||||
.long __start
|
||||
.long MisalignedHandler
|
||||
.long AccessErrHandler
|
||||
.long DummyHandler
|
||||
.long IllegalInstrHandler
|
||||
.long PriviledgeVioHandler
|
||||
.long DummyHandler
|
||||
.long BreakPointHandler
|
||||
.long UnrecExecpHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long Trap0Handler
|
||||
.long Trap1Handler
|
||||
.long Trap2Handler
|
||||
.long Trap3Handler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long DummyHandler
|
||||
.long PendTrapHandler
|
||||
.long CORETHandler
|
||||
.long SYSCONIntHandler
|
||||
.long IFCIntHandler
|
||||
.long ADCIntHandler
|
||||
.long EPT0IntHandler
|
||||
.long DummyHandler//EPT0EMIntHandler
|
||||
.long WWDTHandler
|
||||
.long EXI0IntHandler
|
||||
.long EXI1IntHandler
|
||||
.long GPT0IntHandler
|
||||
.long DummyHandler//GPT1IntHandler
|
||||
.long DummyHandler
|
||||
.long RTCIntHandler
|
||||
.long UART0IntHandler
|
||||
.long UART1IntHandler
|
||||
.long UART2IntHandler//USARTIntHandler
|
||||
.long DummyHandler
|
||||
.long I2CIntHandler
|
||||
.long DummyHandler
|
||||
.long SPI0IntHandler
|
||||
.long SIO0IntHandler
|
||||
.long EXI2to3IntHandler
|
||||
.long EXI4to9IntHandler
|
||||
.long EXI10to15IntHandler
|
||||
.long CNTAIntHandler
|
||||
.long TKEYIntHandler
|
||||
.long LPTIntHandler
|
||||
.long DummyHandler//LEDIntHandler
|
||||
.long BT0IntHandler
|
||||
.long BT1IntHandler
|
||||
.long DummyHandler//BT2IntHandler
|
||||
.long DummyHandler//BT3IntHandler
|
||||
.long UserOption
|
||||
|
||||
.text
|
||||
.export __start
|
||||
.long 0x00000000
|
||||
.long 0x00000000
|
||||
// .long __start
|
||||
__start:
|
||||
|
||||
|
||||
//initialize all registers
|
||||
movi r0, 0
|
||||
movi r1, 0
|
||||
movi r2, 0
|
||||
movi r3, 0
|
||||
movi r4, 0
|
||||
movi r5, 0
|
||||
movi r6, 0
|
||||
movi r7, 0
|
||||
//movi r8, 0
|
||||
//movi r9, 0
|
||||
//movi r10, 0
|
||||
//movi r11, 0
|
||||
//movi r12, 0
|
||||
//movi r13, 0
|
||||
//movi r14, 0
|
||||
//movi r15, 0
|
||||
|
||||
//set VBR
|
||||
lrw r2, vector_table
|
||||
mtcr r2, cr<1,0>
|
||||
|
||||
//enable EE bit of psr
|
||||
mfcr r2, cr<0,0>
|
||||
bseti r2, r2, 8
|
||||
mtcr r2, cr<0,0>
|
||||
|
||||
////set rom access delay
|
||||
// lrw r1, 0xe00000
|
||||
// lrw r2, 0x7
|
||||
// st.w r2, (r1,0x0)
|
||||
|
||||
////enable cache
|
||||
// lrw r1, 0xe000f000
|
||||
// movi r2, 0x2
|
||||
// st.w r2, (r1,0x0)
|
||||
// lrw r2, 0x29
|
||||
// st.w r2, (r1,0x4)
|
||||
// movi r2, 0x1
|
||||
// st.w r2, (r1,0x0)
|
||||
|
||||
//disable power peak
|
||||
lrw r1, 0xe000ef90
|
||||
movi r2, 0x0
|
||||
st.w r2, (r1, 0x0)
|
||||
|
||||
|
||||
|
||||
//initialize kernel stack
|
||||
lrw r7, __kernel_stack
|
||||
mov r14,r7
|
||||
subi r6,r7,0x4
|
||||
|
||||
//lrw r3, 0x40
|
||||
lrw r3, 0x04
|
||||
|
||||
subu r4, r7, r3
|
||||
lrw r5, 0x0
|
||||
INIT_KERLE_STACK:
|
||||
addi r4, 0x4
|
||||
st.w r5, (r4)
|
||||
//cmphs r7, r4
|
||||
cmphs r6, r4
|
||||
bt INIT_KERLE_STACK
|
||||
|
||||
__to_main:
|
||||
lrw r0,__main
|
||||
jsr r0
|
||||
mov r0, r0
|
||||
mov r0, r0
|
||||
|
||||
|
||||
|
||||
lrw r15, __exit
|
||||
lrw r0,main
|
||||
jmp r0
|
||||
mov r0, r0
|
||||
mov r0, r0
|
||||
mov r0, r0
|
||||
mov r0, r0
|
||||
mov r0, r0
|
||||
|
||||
.export __exit
|
||||
__exit:
|
||||
|
||||
lrw r4, 0x20003000
|
||||
//lrw r5, 0x0
|
||||
mov r5, r0
|
||||
st.w r5, (r4)
|
||||
|
||||
mfcr r1, cr<0,0>
|
||||
lrw r1, 0xFFFF
|
||||
mtcr r1, cr<11,0>
|
||||
lrw r1, 0xFFF
|
||||
movi r0, 0x0
|
||||
st r1, (r0)
|
||||
|
||||
.export __fail
|
||||
__fail:
|
||||
lrw r1, 0xEEEE
|
||||
mtcr r1, cr<11,0>
|
||||
lrw r1, 0xEEE
|
||||
movi r0, 0x0
|
||||
st r1, (r0)
|
||||
|
||||
__dummy:
|
||||
br __fail
|
||||
|
||||
.export DummyHandler
|
||||
DummyHandler:
|
||||
br __fail
|
||||
|
||||
|
||||
.data
|
||||
.align 10
|
||||
.long __start
|
||||
44
Source/arch/mem_init.c
Normal file
44
Source/arch/mem_init.c
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Filename : mem_init.c
|
||||
*
|
||||
* Memory Initialization
|
||||
*
|
||||
* Copyrights 2015 @ APTCHIP
|
||||
*
|
||||
*
|
||||
*/
|
||||
#include "string.h"
|
||||
|
||||
extern char _end_rodata[];
|
||||
extern char _start_data[];
|
||||
extern char _end_data[];
|
||||
|
||||
extern char _bss_start[];
|
||||
extern char _ebss[];
|
||||
|
||||
|
||||
void __main( void )
|
||||
{
|
||||
|
||||
char *dst = _start_data;
|
||||
char *src = _end_rodata;
|
||||
|
||||
/* if the start of data (dst)
|
||||
is not equal to end of text (src) then
|
||||
copy it, else it's already in the right place
|
||||
*/
|
||||
if( _start_data != _end_rodata ) {
|
||||
// __memcpy_fast( dst, src, (_end_data - _start_data));
|
||||
memcpy( dst, src, (_end_data - _start_data));
|
||||
}
|
||||
|
||||
/* zero the bss
|
||||
*/
|
||||
if( _ebss - _bss_start ) {
|
||||
// __memset_fast( _bss_start, 0x00, ( _ebss - _bss_start ));
|
||||
memset( _bss_start, 0x00, ( _ebss - _bss_start ));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user