1.将A27新UI文件夹重命名为CANUI 2.A272O新版本发布
This commit is contained in:
@ -0,0 +1,190 @@
|
||||
#include "FreeRTOS.h"
|
||||
#include "board.h"
|
||||
#include "sysinfo.h"
|
||||
#include "chip.h"
|
||||
|
||||
static const char* abort_status[][2]=
|
||||
{
|
||||
// IFSR status , DFSR status
|
||||
{"Unknown(reserved status)", "Unknown(reserved status)" },//0
|
||||
{"Unknown(reserved status)", "Alignment Fault" },//1
|
||||
{"Debug Event", "Debug Event" },//2
|
||||
{"Access flag - section", "Access flag - section" },//3
|
||||
{"Unknown(reserved status)", "Instruction cache maintenance" },//4
|
||||
{"Translation fault - section", "Translation fault - section" },//5
|
||||
{"Access flag - Page", "Access flag - Page" },//6
|
||||
{"Translation fault -Page", "Translation fault -Page" },//7
|
||||
{"Synchronous external abort", "Synchronous external abort, nontranslation" },//8
|
||||
{"Domain fault - Section", "Domain fault - Section" },//9
|
||||
{"Unknown(reserved status)", "Unknown(reserved status)" },//10
|
||||
{"Domain fault - Page", "Domain fault - Page" },//11
|
||||
{"Synchronous external abort - L1 Translation", "Synchronous external abort - L1 Translation" },//12
|
||||
{"Permission fault - Section", "Permission fault - Section" },//13
|
||||
{"Synchronous external abort - L2 Translation", "Synchronous external abort - L2 Translation" },//14
|
||||
{"Permission fault - Page", "Permission fault - Page" },//15
|
||||
{"Unknown(reserved status)", "Unknown(reserved status)" },//16
|
||||
{"Unknown(reserved status)", "Unknown(reserved status)" },//17
|
||||
{"Unknown(reserved status)", "Unknown(reserved status)" },//18
|
||||
{"Unknown(reserved status)", "Unknown(reserved status)" },//19
|
||||
{"Unknown(reserved status)", "Unknown(reserved status)" },//20
|
||||
{"Unknown(reserved status)", "Unknown(reserved status)" },//21
|
||||
{"Unknown(reserved status)", "Asynchronous external abort"}
|
||||
|
||||
};
|
||||
|
||||
void LowLevelInit( void )
|
||||
{
|
||||
}
|
||||
|
||||
void Abort_C_Handler( void)
|
||||
{
|
||||
uint32_t v1,v2, dfsr;
|
||||
v1= 0;
|
||||
v2= 0;
|
||||
asm("mrc p15, 0, %0, c5, c0, 0" : : "r"(v1));
|
||||
asm("mrc p15, 0, %0, c6, c0, 0" : : "r"(v2));
|
||||
|
||||
dfsr = ((v1 >> 4) & 0x0F);
|
||||
printf("\n\r######################################################################\n\r");
|
||||
printf("Data Abort occured in %x domain\n\r", (unsigned int)dfsr);
|
||||
dfsr = (((v1 & 0x400) >> 6) | (v1 & 0x0F));
|
||||
printf("Data abort fault reason is: %s\n\r", (char*)abort_status[dfsr][1]);
|
||||
printf("Data fault occured at Address = 0x%08x\n\n\r",(unsigned int)v2);
|
||||
|
||||
|
||||
printf("-[Info]-Data fault status register value = 0x%x\n\r",(unsigned int)v1);
|
||||
|
||||
while(1);
|
||||
|
||||
}
|
||||
|
||||
void Prefetch_C_Handler( void)
|
||||
{
|
||||
uint32_t v1,v2, ifsr;
|
||||
v1= 0;
|
||||
v2= 0;
|
||||
|
||||
asm("mrc p15, 0, %0, c5, c0, 1" : : "r"(v1));
|
||||
asm("mrc p15, 0, %0, c6, c0, 2" : : "r"(v2));
|
||||
|
||||
ifsr = (((v1 & 0x400) >> 6) | (v1 & 0x0F));
|
||||
printf("\n\r######################################################################\n\r");
|
||||
printf("Instruction prefetch abort reason is: %s\n\r", (char*)abort_status[ifsr][0]);
|
||||
printf("Instruction prefetch Fault occured at Address = 0x%08x\n\n\r",(unsigned int)v2);
|
||||
|
||||
printf("-[INFO]- Prefetch Fault status register value by = 0x%x\n\r",(unsigned int)v1);
|
||||
|
||||
while(1);
|
||||
|
||||
}
|
||||
|
||||
void Undefined_C_Handler( void)
|
||||
{
|
||||
printf("Undefined abort \n\r");
|
||||
while(1);
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
VBUF_STATUS_FREE = 0,
|
||||
VBUF_STATUS_USED,
|
||||
VBUF_STATUS_RENDERED,
|
||||
} VIDEO_BUFFER_STATUS;
|
||||
|
||||
typedef struct {
|
||||
uint32_t addr;
|
||||
int status;
|
||||
}VideoBufInfo;
|
||||
|
||||
static SemaphoreHandle_t vdisbuf_mutex = NULL;
|
||||
static VideoBufInfo vdisbufs[VIDEO_DISPLAY_BUF_NUM] = {0};
|
||||
|
||||
void VideoDisplayBufInit(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
vdisbuf_mutex = xSemaphoreCreateRecursiveMutex();
|
||||
|
||||
for (i = 0; i < VIDEO_DISPLAY_BUF_NUM; i++) {
|
||||
vdisbufs[i].addr = (uint32_t)pvPortMalloc(VIDEO_DISPLAY_WIDTH * VIDEO_DISPLAY_HEIGHT * 2);
|
||||
vdisbufs[i].status = VBUF_STATUS_FREE;
|
||||
}
|
||||
}
|
||||
|
||||
int xVideoDisplayBufTake(uint32_t xTicksToWait)
|
||||
{
|
||||
return xSemaphoreTakeRecursive(vdisbuf_mutex, xTicksToWait);
|
||||
}
|
||||
|
||||
void vVideoDisplayBufGive(void)
|
||||
{
|
||||
xSemaphoreGiveRecursive(vdisbuf_mutex);
|
||||
}
|
||||
|
||||
uint32_t ulVideoDisplayBufGet(void)
|
||||
{
|
||||
uint32_t bufaddr = 0;
|
||||
int i;
|
||||
|
||||
xSemaphoreTakeRecursive(vdisbuf_mutex, portMAX_DELAY);
|
||||
|
||||
for (i = 0; i < VIDEO_DISPLAY_BUF_NUM; i++) {
|
||||
if (vdisbufs[i].status == VBUF_STATUS_FREE) {
|
||||
bufaddr = vdisbufs[i].addr;
|
||||
vdisbufs[i].status = VBUF_STATUS_USED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
xSemaphoreGiveRecursive(vdisbuf_mutex);
|
||||
|
||||
configASSERT(bufaddr != 0);
|
||||
|
||||
return bufaddr;
|
||||
}
|
||||
|
||||
uint32_t ulVideoDisplayBufGetSize(void)
|
||||
{
|
||||
return VIDEO_DISPLAY_WIDTH * VIDEO_DISPLAY_HEIGHT * 2;
|
||||
}
|
||||
|
||||
void vVideoDisplayBufRender(uint32_t buf_addr)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
xSemaphoreTakeRecursive(vdisbuf_mutex, portMAX_DELAY);
|
||||
|
||||
for (i = 0; i < VIDEO_DISPLAY_BUF_NUM; i++) {
|
||||
if (vdisbufs[i].addr == buf_addr) {
|
||||
for (j = 0; j < VIDEO_DISPLAY_BUF_NUM; j++) {
|
||||
if (vdisbufs[j].status == VBUF_STATUS_RENDERED)
|
||||
vdisbufs[j].status = VBUF_STATUS_FREE;
|
||||
}
|
||||
vdisbufs[i].status = VBUF_STATUS_RENDERED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
xSemaphoreGiveRecursive(vdisbuf_mutex);
|
||||
}
|
||||
|
||||
void vVideoDisplayBufFree(uint32_t buf_addr)
|
||||
{
|
||||
int i;
|
||||
|
||||
xSemaphoreTakeRecursive(vdisbuf_mutex, portMAX_DELAY);
|
||||
|
||||
for (i = 0; i < VIDEO_DISPLAY_BUF_NUM; i++) {
|
||||
if (vdisbufs[i].addr == buf_addr) {
|
||||
vdisbufs[i].status = VBUF_STATUS_FREE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
xSemaphoreGiveRecursive(vdisbuf_mutex);
|
||||
}
|
||||
|
||||
unsigned int ulVideoDisplayGetBufferAddr(int index)
|
||||
{
|
||||
configASSERT(index < VIDEO_DISPLAY_BUF_NUM);
|
||||
return vdisbufs[index].addr;
|
||||
}
|
Reference in New Issue
Block a user