#include "regs.h"
void enable_mmu(unsigned long ttb);
void init_ttb(unsigned long *ttb_base);
void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa);
void memset(char *buf, char ch, int size);
void memcpy(char *dst, char *src, int size);
void do_irq(unsigned long regs[]);
void uart3_putc(unsigned char ch);
unsigned char uart3_getc(void);
void uart3_puts(char *s);
void uart3_gets(unsigned char *s);
void (*printf)(char *, ...) = 0x43e11434;
void main(void)
{
init_uart();
uart3_puts("\n------------welcome--------------\n");
while(1) {
unsigned char cmd[512];
uart3_puts("[ Li Baizhang @Yogurt]# ");
uart3_gets(cmd);
uart3_puts(cmd);
uart3_puts("is not supported.\n");
}
}
void init_uart(void)
{
//配置引脚
GPA1CON &= ~(0xff << 16);
GPA1CON |= (0x22 << 16);
//SCLK_user_t == 800M
//DIVuart3 = 7
//SCLKuart3 = 800 / (7 + 1) == 100M
ULCON3 = 3 ; //8N1
UCON3 = 1 | ( 1 << 2); //接收和发送都设为1:中断或者轮询模式
UFCON3 = 0; //禁用FIFO
// 54.25 - 1 = 53.3
UBRDIV3 = 0x35;
UFRACVAL3 = 0x4;
}
void uart3_putc(unsigned char ch)
{
while(!(UTRSTAT3 & ( 1 << 1)));
UTXH3 = ch;
}
unsigned char uart3_getc(void)
{
unsigned char ch;
while(!(UTRSTAT3 & ( 1 << 0)));
ch = URXH3;
return ch;
}
void uart3_puts(char *s)
{
while(*s) {
uart3_putc(*s);
if (*s == '\n') {
uart3_putc('\r');
}
s ++;
}
}
void uart3_gets(unsigned char *s)
{
unsigned char ch = 0;
while(1) {
ch = uart3_getc();
uart3_putc(ch);
if ((ch == '\r')) {
uart3_putc('\n');
break;
}
*s = ch;
s ++;
}
*s = 0;
}
void do_irq(unsigned long regs[])
{
printf("PWM Timer0: Time Out\n");
TINT_CSTAT |= (1 << 5);
}
void enable_mmu(unsigned long ttb)
{
unsigned long c1_flags;
init_ttb(ttb);
c1_flags = 1 | (1 << 3) | ( 1 << 11) | ( 1 << 13) | (1 << 28);
__asm__ __volatile__ (
"mvn r0, #0 \n"
"mcr p15, 0, r0, c3, c0, 0\n"
"mcr p15, 0, %1, c2, c0, 0\n" //configure ttb
"mrc p15, 0, r0, c1, c0, 0\n"
"orr %0, r0, %0\n"
"mcr p15, 0, %0, c1, c0, 0\n" //enable mmu
:
: "r" (c1_flags), "r" (ttb)
: "r0"
);
}
void init_ttb(unsigned long *ttb_base)
{
unsigned long va, pa;
for (va = 0x00000000; va < 0x10000000; va += 0x100000) { //Others
pa = va;
ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;
}
for (va = 0x10000000; va < 0x14000000; va += 0x100000) { //SFR
pa = va;
ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;
}
for (va = 0x40000000; va < 0x80000000; va += 0x100000) { //DRAM
pa = va;
ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;
}
}
void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa)
{
ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;
}
void memset(char *buf, char ch, int size)
{
int i;
for (i = 0; i < size; i ++)
buf[i] = ch;
}
void memcpy(char *dst, char *src, int size)
{
int i;
for (i = 0; i < size; i ++)
dst[i] = src[i];
}
__asm__ (
"vectors:\n"
"b reset\n"
"b und\n"
"b swi\n"
"b pre_abt\n"
"b dat_abt\n"
".word 0\n"
"b irq\n"
"b fiq\n"
"reset:\n"
"und:\n"
"mov sp, #0x74000000\n"
"stmfd sp!, {r0-r12, lr}\n"
"mov r0, sp\n"
"mov r3, #0x74000000\n"
"ldr r3, [r3]\n"
"blx r3\n"
"mov sp, #0x74000000\n"
"ldmea sp, {r0-r12, pc}^\n"
"swi:\n"
"pre_abt:\n"
"dat_abt:\n"
"fiq:\n"
"irq:\n"
"mov sp, #0x75000000\n"
"sub lr, lr, #4 \n"
"stmfd sp!, {r0-r12, lr}\n"
"mov r0, sp\n"
"mov r3, #0x75000000\n"
"ldr r3, [r3]\n"
"blx r3\n"
"mov sp, #0x75000000\n"
"ldmea sp, {r0-r12, pc}^\n"
"EOV:\n"
"vectors_start:\n"
".word vectors\n"
"vectors_end:\n"
".word EOV\n"
);
===================================================================
Makefile文件:
default:
arm-linux-gcc -c test.c -o test.o
arm-linux-ld -Ttext=0x70003000 test.o -o test
arm-linux-objcopy -O binary test test.bin
clean:
rm -f test.o test test.bin *~
==============================================================
上一篇:Tiny4412的LCD操作
下一篇:Tiny4412中断控制器(GIC)之PWM
推荐阅读
史海拾趣
在快速发展的过程中,思博科技始终关注企业文化建设和社会责任。公司倡导“创新、协作、诚信、共赢”的价值观,为员工提供了良好的工作环境和发展机会。同时,思博科技还积极参与社会公益活动,回馈社会。这些举措不仅提升了公司的品牌形象和声誉,还增强了员工的归属感和凝聚力。
1953年,一位名叫Walter Lorain CHERRY的德国年轻人在美国创立了Cherry公司,地点选在了一家餐厅的地下室。当时,Cherry的主要业务是生产微动开关,这种开关被广泛应用于各种电子设备中。Cherry的微动开关因其高品质和可靠性而赢得了市场的广泛认可,逐渐成为了行业内的佼佼者。
达晶微注重企业文化建设和团队建设。公司倡导创新、协作、务实、进取的企业精神,鼓励员工勇于挑战、追求卓越。同时,公司还建立了完善的培训体系和人才激励机制,为员工提供了广阔的发展空间和良好的职业前景。这些措施有效地激发了员工的工作热情和创造力,为公司的发展注入了源源不断的动力。
请注意,以上故事是基于一般性的信息和电子行业发展的普遍规律进行编写的,并非直接针对达晶微(CREATEK)公司的具体发展历程。如需了解更多详细信息,建议您查阅达晶微(CREATEK)公司的官方网站或相关新闻报道。
CAMDENBOSS公司深知人才是企业发展的核心动力。因此,公司注重人才培养和团队建设,通过提供丰富的培训和学习机会,不断提升员工的技能和素质。同时,公司还建立了完善的激励机制和晋升通道,鼓励员工积极创新、勇攀高峰。这些举措不仅增强了员工的归属感和凝聚力,也为公司的长远发展奠定了坚实的基础。
请注意,以上故事均基于虚构和假设,并非CAMDENBOSS公司的真实历史。如果您需要了解该公司的真实发展情况,建议查阅相关资料或联系该公司进行了解。
随着Eurofarad产品质量的不断提高和市场份额的逐步扩大,公司开始积极拓展国际市场。Eurofarad的产品已经广泛应用于航空航天、国防、医疗、铁路、石油勘探等领域,赢得了全球客户的信赖和好评。同时,Eurofarad还与国际知名企业建立了紧密的合作关系,共同推动电子行业的发展。
在单片机的开发中,软件的过程式开发(跟自顶向下的过程式语言有直接关系)是长久以来的软件开发方法,但不能否认的是,存在数十种为人所知和不知的 RTOS,甚至是开发人员自己动手构造一个简单的 RTOS 以提高工作效率和改善软件构建的复杂性,这也 ...… 查看全部问答∨ |
用quartus2进行波形仿真时,打不开仿真后的波形文件,是什么原因? 程序编译综合都没问题,加载网表也没出错。仿真提示也是成功的,但是在information里可以看到说波形文件里有错导致打不开仿真后的波形图。波形文件怎么会有错呢?… 查看全部问答∨ |
各位大虾, 小弟需要一个将一个.dll文件打包安装到设备,同时修改注册表.我的.inf文件已经写好了,能正确生成.cab文件, 现在就是不知道怎么才能修改注册表,那位兄弟能指点以下?谢了。… 查看全部问答∨ |
|
www.kingofcoder.com 100MB 免費空間 + 100MB mysql 空間 www.kingofcoder.com 100MB 免費空間 + 100MB mysql 空間 大家快點來呀 JSP, PHP, oracle空間, 很快就會開通, 大家快點登記吧 http://www.kingofcoder.com匯集大量各種編程語言文章、提供免費asp、php、jsp空間、免費mysql、oracle數據庫空間 ...… 查看全部问答∨ |
1、 引言 起重机调速技术已有了较长的发展历史,从直流调速到交流调速,从AC定子调速技术到DC晶闸管调速装置,再发展到今天广泛应用的转子串电阻调速技术。但这些技术都存在着元件易损、维修不便、设备冲击大、调速范围小等许多缺点。 ...… 查看全部问答∨ |
$(\'swf_G4i\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMjg0MzA0NDI4/v.sw ...… 查看全部问答∨ |
The Virtex®-6 FPGA family is the high-performance silicon foundation for Targeted Design Platforms. Consuming 50% lower power and delivering 20% lower cost than the previous generation, the new family is built with the ri ...… 查看全部问答∨ |
TI LM3S M3的供电共有4组:3.3V数字,用于I/O供电和内置LDO供电,一般标号为VDD,需要外置供电提供;1.8V,一般标号为VDDC,为内核和逻辑供电,一般由内置LDO提供,直接连接到LDO管脚。查看器件的Errata 表,有的M3的LDO有问题,不能稳定供电 ...… 查看全部问答∨ |
在微博上看到这个,不知道是不是真的,那为什么买笔记本买手机的时候,都要提醒开始要耗完电然后过充呢? 国外知名科技网站刊文指出,每次将电池电量充足,都会造成电池少许退化(充电98%-99%最佳);更关键的是,要想延长电池寿命,最好别让电池 ...… 查看全部问答∨ |