引用 cccyl:
哈哈,这个不错!玩出水平了,够牛逼!
KC-LS1u开机启动程序源码和ROM文件.
V1.0版本(不建议使用):
KC-LS1u开机启动程序.rar
399.37KB
RAR
82次下载
V1.1版本(可以不插4片VGA):
KC-LS1u开机启动程序V1.1.rar
399.81KB
RAR
93次下载
把开机启动程序ROM二进制文件烧到27c020, 然后装上... 从此就可以告别烧写器/编程器了~
开机启动程序说明:
开机启动程序的作用是-->在上电之后自动从外部存储器(TF/SD内存卡)加载程序数据到内存, 然后执行这个加载进来的程序;
1. 在内存卡根目录新建两个txt文本, "KC_LS1u_boot_0.txt" 和 "KC_LS1u_boot_1.txt" , 内存卡文件系统格式为FAT32;
2. 编辑 "KC_LS1u_boot_0.txt" 这个引导文本, 文本存放的是程序文件的路径, 路径格式为, 设备名称:文件路径, 比如, spi_device0:XXXXXXn, spi_device0的意思是选择SPI设备0(硬件SPI控制器上面有8根片选信号线, 接"S_CS0" 片选信号的设备会被选中), XXXXXXn就是根目录下的XXXXXXn二进制程序文件;
3. 插上内存卡, 通电开机, 这时机器会把 "XXXXXXn" 这个文件加载到内存里面并运行;
在这里, SPI设备0(spi_device0:) 和 SPI设备1(spi_device1:) 作为开机引导的对象,也就是可以接两张内存卡, 两张内存卡的片选信号(CS)分别接硬件SPI控制器的 "S_CS0" 片选信号 和 "S_CS1" 片选信号;
txt引导文本的路径可以写成如下几种格式,文件名称或文件夹名称可以有空格,但是路径前后不能有空格或换行.
spi_device0:XXXXXXn 指定从SPI设备0加载根目录的程序文件
spi_device1:XXXXXXn 指定从SPI设备1加载根目录的程序文件
spi_device_:XXXXXXn 机器会从当前设备加载根目录的程序文件
spi_device0:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\XXXXXXn 指定从SPI设备0加载指定目录的程序文件
spi_device1:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\XXXXXXn 指定从SPI设备1加载指定目录的程序文件
spi_device_:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\XXXXXXn 机器会从当前设备加载指定目录的程序文件
在有两张内存卡的情况下,开机的时候机器会先搜索SPI设备0根目录下的txt引导文本,如果没有找到文本,这时会搜索SPI设备1, 如果SPI设备1的txt引导文本里面路径指定的是SPI设备0(spi_device0:), 那么机器会从SPI设备0搜索程序文件, 也就是引导文本在SPI设备1,程序文件在SPI设备0;
如果txt引导文本里的设备名称写成 "spi_device_:" , 这时机器只会搜索存放这个引导文本的设备, 也就是引导文本在SPI设备0, 机器就在SPI设备0搜索程序文件, 文本在SPI设备1,机器就在SPI设备1搜索程序文件;
注意: 引导文本内容的大小不能超过512字节
"KC_LS1u_boot_0.txt" 是作为开机时候的引导文本, 那 "KC_LS1u_boot_1.txt" 是干嘛用的~, 是给操作系统启动程序用的, 那么怎么控制呢..
内存地址C00007H是一个系统控制寄存器, 上电复位的时候会全部清0, 注意有两个空出来的"用户位";
bit0的这个用户位是控制开机画面的, 运行开机程序的时候, 程序会判断这个位, 如果为0, 就会出现外星人开机画面, 如果为1, 就不会出现外星人开机画面;
bit4这个用户位是控制txt引导文本的, 当开机程序执行到搜索txt引导文本这一步的时候, 会判断这个位, 如果为0, 就搜索 "KC_LS1u_boot_0.txt", 如果为1, 则搜索 "KC_LS1u_boot_1.txt" ;
顶楼资料有介绍, 本机有两组ROM, 分别为EPROM和SROM(由SRAM芯片组成), ROM就是装程序(机器码)的麻..
EPROM这组ROM里面的程序是按下开机键的时候, 立刻就运行的, 开机程序就装在这组ROM里面;
SROM这组ROM要先装程序进去, 装完了之后, 再通过硬件切换机制, 让CPU跳到SROM, 执行SROM里面的程序, 当然, CPU也可以跳回EPROM, 执行EPROM里的程序, 那么问题就来了, EPROM装的是外星人开机程序, 跳回去有什么用呢, ~ -_,- ~ 这个是我觉得设计得比较得意的地方~~~, 由于在SROM里面运行的用户程序是不能读写SROM的, 只有在EPROM运行的程序才可以访问SROM, 那么, 如果现在SROM里面运行的程序想从外部存储器加载一个程序进来运行怎么办呢,
可以这样做,
第1步,修改SPI设备0内存卡的 "KC_LS1u_boot_1.txt" 引导文本, 把这个文本的路径修改为需要启动运行的程序文件的路径;
第2步,往内存地址C00007H这个系统控制寄存器写入0x11, 这时两个用户位都被置1;
第3步,执行 "rom_run;" 语句, 这时CPU会跳到EPROM里面执行程序, 由于bit0和bit4两个用户位被置1, EPROM里面的开机程序将不执行外星人开机画面, 而直接执行 "SROM数据装载服务程序" , 这时程序会搜索 "KC_LS1u_boot_1.txt" 引导文本, 然后按照路径把目标程序文件装载到SROM, 然后运行;
经过上面3个步骤, 已经达到了用户程序加载程序运行的目的;
假设EPROM和SROM都装有下图所示的程序,将会出现什么现象呢,结果就是CPU在EPROM里面执行到 "rom_run;" 的时候会跳到SROM执行程序,然后CPU在SROM执行到 "rom_run;" 的时候,又会跳回EPROM执行"rom_run;" 然后又跳到SROM执行"rom_run;" 。。。。。。死循环, 切来切去。。
200字以内,仅用于支线交流,主线讨论请采用回复功能。