├── .gitignore ├── COA ├── CH1-ComputerOrganiation&Architecture.md ├── CH1-ComputerOrganiation&Architecture.pdf ├── README.md └── img │ ├── README.md │ ├── computer.png │ ├── hil-computer.png │ ├── hl-computer.png │ ├── ias.png │ ├── io-module-structure.png │ └── ram_comparision.png ├── DataBase └── principle_of_database │ ├── README.md │ ├── data_independence_and_relationship_pattern_normalization.md │ ├── database_design.md │ ├── img │ ├── 5.1.PNG │ └── 5.2.PNG │ ├── introduction.md │ ├── query_processing_and_optimization.md │ ├── relationship_model.md │ ├── 《数据库系统原理》综合实验报告.pdf │ ├── 《数据库系统原理》综合实验报告.tex │ ├── 数据库期末考试复习规划.md │ └── 数据库系统原理复习.md ├── DigitalLogic ├── img │ ├── 74163逻辑符号.png │ ├── D串行计数器.png │ ├── D并行计数器.png │ ├── D电路图.png │ ├── D逻辑符号.png │ ├── ROM-PLA-PAL异同.png │ ├── S-R电路图.png │ ├── S-R逻辑符号.png │ ├── T电路图1.png │ ├── T电路图2.png │ ├── T逻辑符号.png │ ├── 三种二进制代码关系图.png │ ├── 主从J-K.png │ ├── 主从S-R.png │ ├── 二进制码向格雷码的转换.png │ ├── 原码表示.png │ ├── 反码表示.png │ ├── 多项式替代法进制转换.png │ ├── 数字系统基本模型.png │ ├── 格雷码向二进制码的转换.png │ ├── 状态分配判别方式.png │ ├── 组合电路分析步骤.png │ ├── 组合电路设计步骤.png │ ├── 补码表示.png │ ├── 边沿触发D.png │ ├── 边沿触发J-K.png │ └── 边沿触发J-K逻辑符号.png ├── 数字逻辑知识点-概念-重点-解题思路归纳总结.md ├── 数字逻辑考试时间规划.md └── 答疑暴露的问题.md ├── EmbeddedSystem ├── PartofAndroid │ ├── AndroidUI.md │ └── Android进程,生命周期与四大组件浅析.md ├── UART_and_KeyBoard │ ├── 04_UART_Test │ │ ├── Include │ │ │ └── uart_test.h │ │ ├── NOR FLASH │ │ │ ├── 2410lib.crf │ │ │ ├── 2410lib.d │ │ │ ├── 2410lib.txt │ │ │ ├── S3C2410A.lst │ │ │ ├── UART_Test.axf │ │ │ ├── UART_Test.htm │ │ │ ├── UART_Test.lnp │ │ │ ├── UART_Test.map │ │ │ ├── UART_Test.plg │ │ │ ├── UART_Test.sct │ │ │ ├── UART_Test.tra │ │ │ ├── main.crf │ │ │ ├── main.d │ │ │ ├── main.txt │ │ │ ├── sys_init.crf │ │ │ ├── sys_init.d │ │ │ ├── sys_init.txt │ │ │ ├── uart_test.crf │ │ │ ├── uart_test.d │ │ │ └── uart_test.txt │ │ ├── S3C2410A.s │ │ ├── SDRAM.ini │ │ ├── SDRAM │ │ │ ├── 2410lib.crf │ │ │ ├── 2410lib.d │ │ │ ├── 2410lib.txt │ │ │ ├── ExtDll.iex │ │ │ ├── S3C2410A.lst │ │ │ ├── UART_Test.axf │ │ │ ├── UART_Test.htm │ │ │ ├── UART_Test.lnp │ │ │ ├── UART_Test.map │ │ │ ├── UART_Test.plg │ │ │ ├── UART_Test.sct │ │ │ ├── UART_Test.tra │ │ │ ├── main.crf │ │ │ ├── main.d │ │ │ ├── main.txt │ │ │ ├── sys_init.crf │ │ │ ├── sys_init.d │ │ │ ├── sys_init.txt │ │ │ ├── uart_test.crf │ │ │ ├── uart_test.d │ │ │ └── uart_test.txt │ │ ├── Source │ │ │ ├── main.c │ │ │ └── uart_test.c │ │ ├── UART_Test.Opt │ │ ├── UART_Test.Uv2 │ │ ├── UART_Test_Opt.Bak │ │ ├── UART_Test_UART_Test IN FLASH.dep │ │ ├── UART_Test_UART_Test IN RAM.dep │ │ ├── readme.txt │ │ └── readme.txt.bak │ ├── 12_KeyBoardTest │ │ ├── KeyBoardTest.Opt │ │ ├── KeyBoardTest.Uv2 │ │ ├── KeyBoardTest.map │ │ ├── KeyBoardTest.plg │ │ ├── KeyBoardTest_KeyBoardTestInFlash.dep │ │ ├── KeyBoardTest_KeyBoradTestInRam.dep │ │ ├── KeyBoardTest_Opt.Bak │ │ ├── KeyBoardTest_Target 1.dep │ │ ├── KeyBoardTest_Uv2.Bak │ │ ├── NOR FLASH │ │ │ ├── 2410lib.crf │ │ │ ├── 2410lib.d │ │ │ ├── 2410lib.txt │ │ │ ├── KeyBoardTest.axf │ │ │ ├── KeyBoardTest.htm │ │ │ ├── KeyBoardTest.lnp │ │ │ ├── KeyBoardTest.plg │ │ │ ├── KeyBoardTest.sct │ │ │ ├── KeyBoardTest.tra │ │ │ ├── iic_8led.crf │ │ │ ├── iic_8led.d │ │ │ ├── iic_8led.txt │ │ │ ├── iic_keybd.crf │ │ │ ├── iic_keybd.d │ │ │ ├── iic_keybd.txt │ │ │ ├── keyboard_test.crf │ │ │ ├── keyboard_test.d │ │ │ ├── keyboard_test.txt │ │ │ ├── main.crf │ │ │ ├── main.d │ │ │ ├── main.txt │ │ │ ├── sys_init.crf │ │ │ ├── sys_init.d │ │ │ └── sys_init.txt │ │ ├── S3C2410A.lst │ │ ├── S3C2410A.s │ │ ├── SDRAM.ini │ │ ├── SDRAM │ │ │ ├── 2410lib.crf │ │ │ ├── 2410lib.d │ │ │ ├── 2410lib.txt │ │ │ ├── ExtDll.iex │ │ │ ├── KeyBoardTest.htm │ │ │ ├── KeyBoardTest.lnp │ │ │ ├── KeyBoardTest.plg │ │ │ ├── KeyBoardTest.sct │ │ │ ├── KeyBoardTest.tra │ │ │ ├── iic_8led.crf │ │ │ ├── iic_8led.d │ │ │ ├── iic_8led.txt │ │ │ ├── iic_keybd.crf │ │ │ ├── iic_keybd.d │ │ │ ├── iic_keybd.txt │ │ │ ├── keyboard_test.crf │ │ │ ├── keyboard_test.d │ │ │ ├── main.crf │ │ │ ├── main.d │ │ │ ├── sys_init.crf │ │ │ ├── sys_init.d │ │ │ └── sys_init.txt │ │ ├── iic_8led.c │ │ ├── iic_keybd.c │ │ ├── keyboard_test.c │ │ ├── main.c │ │ └── readme.txt │ └── 串口通信与键盘控制.pptx └── embedded_software_design │ ├── ARM_architecture.md │ ├── ARM_programming.md │ ├── README.md │ ├── introduction.md │ └── 串口通信与键盘控制.pptx ├── Git ├── Base_information_about_Github.md ├── github问题.txt └── pic │ └── 20160812 │ ├── 1.jpg │ ├── 2.jpg │ ├── 3.jpg │ ├── 4.jpg │ ├── 5.jpg │ ├── 6.jpg │ ├── 7.jpg │ └── 8.jpg ├── LICENSE ├── OS └── OS.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | *.smod 19 | 20 | # Compiled Static libraries 21 | *.lai 22 | *.la 23 | *.a 24 | *.lib 25 | 26 | # Executables 27 | *.exe 28 | *.out 29 | *.app 30 | -------------------------------------------------------------------------------- /COA/CH1-ComputerOrganiation&Architecture.md: -------------------------------------------------------------------------------- 1 | # 第一章: Computer Organization and Architecture 2 | ## 核心要点 3 | ### **computer organization 和 computer architecture的比较** 4 | 5 | ||可见性|设计方式| 6 | |---|---|---| 7 | |Organization|性质被系统设计者(system designer)可见|逻辑设计的一种实现(an implementation)| 8 | |Architecture|性质被编程者(programmer)可见|计算机的逻辑设计(logic design)| 9 | 10 | ### **Transparency 基本概念** 11 | 12 | 对于存在的事物或者某些性质,从一个视角来看,它们就像不存在一样。就比如说,我们知道QQ收发消息过程经过了复杂的操作,但是从用户角度来看,只看到了消息的收发,复杂的信息传递方式以及协议就好像不存在一样。 13 | 14 | ### **Compatibility 基本概念** 15 | 16 | 兼容性包含向上兼容和向后兼容两方面的内容。向上兼容是指较为低级的计算机能够不加修改地在较为高级的计算机上运行;向后兼容指的是当前的程序可以不加修改的在未来的程序上运行。 17 | 18 | 值得注意的是,上述两种兼容性的表述仅仅针对的是同一种结构的计算机,也就是序列机。 19 | 20 | **序列机(Sequence Machine)**: 相同architecture而不同organization的计算机的集合。 21 | 22 | ### **computer structure 和 computer functions 基本概念** 23 | 24 | - structure. 不同组分(components)之间交互的方式(the way in which the components are related to each other). 25 | 26 | - function. structure中的每个组分的操作(the operation of each individual compoent as part of the structure). 27 | 28 | computer function 包含如下四个方面的内容: 29 | 30 | - 数据处理(Data Processing) 31 | - 数据存储(Data Storage) 32 | - 数据转移(Data Movement) 33 | - 控制(control) 34 | 35 | ### **一个normal computer 的主要构成(main components)**以及**CPU 和 CU的主要构成** 36 | 37 | ![](./img/computer.png) 38 | 39 | # 第二章: Computer Evolution and Performance 40 | ## 核心要点 41 | ### 世界第一台电脑的基本情况 42 | 世界第一台通用计算机是ENIAC, 其设计制造开始于1943年,完成于1946年。其能够实现条件跳转,并且是可编程的。同时其仿照人的习惯,采取的是十进制数据存储。 43 | 44 | ### 冯诺依曼机的基本特征及其结构 45 | 冯诺依曼机也就是IAS计算机的结构,虽然最后宣告失败,但是冯诺依曼机的思想却广受使用,典型的冯诺依曼机由MM, ALU, I/O, CU四部分构成。如下图: 46 | 47 |

48 |   49 |

50 |
51 | 52 | **关于IAS计算机的细节以及其扩展结构的了解掌握程度?** 53 | 54 | ### 摩尔定律 55 | 摩尔定律的最经典形式为: Numbers of transistors on a chip will double every year. 表示的是硬件发展规律的实验性结论。 56 | 57 | ### 典型计算机分类 58 | - Chip Microcomputer 59 | - Single Board Computer 60 | - Embedded Computer 61 | - Microcomputer 62 | - Server 63 | - Super Computer 64 | 65 | 以上按照其规模以及处理能力进行的典型计算机的分类。 66 | 67 | # 第三章: A Top-Level View of Computer Function and Interconnection 68 | ### 冯诺依曼机的三个核心概念: 69 | 70 | - 数据和指令存储在同一个可读可写内存中 (Data and instruction are stored in a single read-write memory) 71 | 72 | - 内存中的内容通过具体位置来寻址 (The contents of the memory are addressed by location) 73 | 74 | - 指令序列化执行 (Execution occurs in a sequence fashion) 75 | 76 | ### High-level Programming Model 77 | 78 | ![](./img/hil-computer.png) 79 | 80 | ### 中断与指令周期 (Interrupt and Instruction Cycles) 81 | 指令周期是执行一条指令所需要的CPU时间,其由取指周期(Fetch Cycle)和执行周期(Execute Cycle) 两部分构成。 82 | 83 | 中断是一种允许其他模块打断CPU常规执行序列的机制 (A mechanism allowing other module to break CPU executing sequence)。 84 | 85 | **中断的优势**: 86 | 87 | - 提高了CPU的利用率 88 | - 允许CPU执行更为重要的任务 89 | 90 | **中断的类型**: 91 | 92 | - 程序中断:溢出,除零等 93 | - 时间片中断: 单CPU并发执行多个任务 94 | - I/O 中断:I/O 控制问题 95 | - 硬件失效: 存储异常等 96 | 97 | **Short I/O Wait & Long I/O Wait** 98 | 99 | 短时I/O中断是 100 | 101 | **中断发生程序完成的事项** 102 | 103 | # 第四章:Cache Memory 104 | ## 核心要点 105 | ### 内存访问的四种方式 106 | - 顺序访问(Sequential): 从头开始,然后按照一定的顺序访问。如磁带。 107 | - 直接访问(Direct): 每个内存块都要独立的地址,可以直接进行跳转。如光盘,磁盘。 108 | - 随机访问(Random): 不从头开始,随即开始,access time与位置和之前位置无关。如DRAM。 109 | - 关联访问(Associative): 随机访问的一种,将部分内容进行比对,然后访问。如cache。 110 | 111 | ### 内存访问的几个关键时间 112 | - Access Time: 将数据从内存中取出的时间(the time of getting data out of memory) 113 | 114 | - Memory Cycle Time: access time + Address transient change time(地址顺变时间) -- 在随机内存访问中使用. 115 | 116 | - Transfer Rate: 每秒钟将数据换入或者换出主存单元数。 117 | 118 | ### 什么是Memory Hierarchy, 其根据什么执行 119 | Memory Hierarchy 是为了权衡主存速度、价格和容量之间的矛盾而设计的。其具有external memory --> main memory --> caceh的层次结构,访问速度逐渐提升,存储容量逐渐减小。 120 | 121 | 实现内存的层级结构的实践依据是内存的局部性原理(principle of locality of reference)。 122 | 123 | **内存的局部性原理**:在程序执行的过程中,CPU是对指令和数据进行批量获取的。 124 | 125 | 其理论依据为:一方面程序可能有较多的循环以及子程序,或者是以表的形式或数组的形式访问,其需要聚类的数据;另外一方面,程序和数据往往是序列化放置的,因此 126 | 127 | ### Block 能够被放在 Cache的哪里 128 | ### Block如何在Cache中找到 129 | ### 如果发生Cache中Block的缺失,哪个Block将被替换 130 | ### Cache中的写机制怎么样 131 | 132 | # 第五章: Internal Memory 133 | ## 核心要点 134 | ### 几种主要存储器 135 | ![](./img/ram_comparision.png) 136 | 137 | ### SRAM与DRAM差异性 138 | Static Random-Access Memory & Dynamic Random-Access Memory. 139 | 140 | ||SRAM|DRAM| 141 | |---|---|---| 142 | |共同点|volatile memory|| 143 | |价格|便宜|| 144 | |密度|Dense|| 145 | |制造难度|易于制造|| 146 | |存储单元大小|更大|| 147 | |速度|更快|| 148 | |材料|Cache|MM| 149 | 150 | ### EPROM 与 Flash Memory差异性 151 | EPROM means Erasable Programmable ROM. 152 | 153 | ||EPROM|Flash Memory| 154 | |---|---|---| 155 | |价格|昂贵|更贵| 156 | |擦除模式|完全擦除|块擦除| 157 | 158 | ### SDRAM概念及其应用领域 159 | SDRAM是指Synchronous DRAM, 也就是同步动态随机访问存储器。 其应用领域如何描述? 160 | 161 | ### Parallel DRAM 技术 162 | single bank multiple words, multibank multiple words技术,通常在大型计算机中使用。 163 | 164 | ## 基于已知RAM和ROM的主存扩展和主存与CPU物理连接 165 | 这篇博客将主要讨论的是如何利用已知的RAM和ROM对主存进行扩展以及主存与CPU进行物理连接。 166 | 167 | ### 基于已知RAM和ROM的字扩展与位扩展 168 | 由于RAM与ROM实现的字扩展与位扩展大致相同,因此以下仅仅针对RAM进行分析。 169 | 170 | 首先来明确以下什么是字扩展,什么是位扩展。假设某RAM是256K × 16bit的,那么如果我们将其扩展为512K × 16bit,那么就称之为字扩展;如果将其扩展为256K × 32bit,那么就是位扩展。如果同时需要进行字扩展和位扩展,首先将进行位扩展,然后再进行字扩展,详情在后面的内容中进行具体分析。 171 | 172 | 以下将以1K × 8bitRAM为例来说明如何进行字扩展和位扩展。 173 | 174 | #### 位扩展 175 | 目标,`将1K × 8bitRAM扩展为1K × 16bitRAM` 176 | 177 | 我们如果需要进行位扩展,那么直接将其输入并联,然后输出串联,CS使能控制并联即可。如图所示: 178 | 179 | ![这里写图片描述](http://img.blog.csdn.net/20171008151819258?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 180 | #### 字扩展 181 | 目标,`将1K × 8bitRAM扩展为2K × 8bitRAM`。 182 | 183 | 我们知道,原RAM共有10根数据线(2**10=1K),如果将其扩展为2K,那么需要增加一根数据线,同时明确需要两个原始的RAM进行扩展。我们可以通过一个选择逻辑来实现最高位的选择操作,然后关于其输出直接设置并行即可。 184 | 185 | 如图所示: 186 | 187 | ![这里写图片描述](http://img.blog.csdn.net/20171008151703400?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 188 | #### 混合扩展 189 | 对于既要进行字扩展,又要进行位扩展的情况,我们首先使用除法计算出需要的RAM的数量,然后首先进行位扩展,将位扩展得到的原件逻辑上封装为一个整体,接着对这个整体进行字扩展。 190 | 191 | 如果字扩展的选择逻辑较为复杂,则可以使用译码器进行选择,将1K × 8bitRAM扩展为4K × 16bit的实现如图所示: 192 | 193 | ![这里写图片描述](http://img.blog.csdn.net/20171008152306086?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 194 | 195 | ### 主存与CPU的物理连接设计 196 | 主存与CPU的物理连接设计是该部分的一个主要难点。主要难的是地址的初始位选择。 197 | 198 | 其选择的思路如下所示: 199 | 200 | #### 决定主存的容量 201 | 通过需要的area来计算得到主存的容量 202 | #### 选择芯片 203 | 根据得到的主存容量选择合适的芯片,系统线使用ROM,用户线使用RAM 204 | #### 挂载CPU地址线 205 | 合理地使用ROM和RAM进行主存和CPU之间的物理连接 206 | 207 | 关于主存与CPU的物理连接设计将依据PPT内容进行分析: 208 | 209 | ![这里写图片描述](http://img.blog.csdn.net/20171008152850393?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 210 | ![这里写图片描述](http://img.blog.csdn.net/20171008152902667?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 211 | ![这里写图片描述](http://img.blog.csdn.net/20171008152911970?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 212 | ![这里写图片描述](http://img.blog.csdn.net/20171008152920700?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 213 | 214 | # 第六章: External Memory 215 | ## 核心要点 216 | ### Organization of Disk System 217 | ### Disk Performance Parameters 218 | ### Common characteristics of RAID and different applications of different RAID levels 219 | ### Types of optical memory 220 | 221 | # 第七章: Input/Output 222 | ## 核心要点 223 | ### Functions of I/O Module 224 | ### I/O module structure 225 | ![](img/io-module-structure.png) 226 | ### Input Output Modes 227 | ### What is 82c59a 228 | Intel 82C59A 是个中断控制器芯片,CPU和设备之间通过该控制器进行通信。关于其需要掌握到的程度。 229 | ### DMA & channel 230 | ### SCSI 231 | ### Firewire 232 | 233 | # 第九章: Computer Arithmetric 234 | ## 核心要点 235 | ### Complement representation and arithmetic of signed binary 236 | ### Negatee 237 | ### +-x/ of integer 238 | ### Float point representation and arithmetic 239 | 240 | # 第十章: Instruction Sets: Characteristics and Functions 241 | ## 核心要点 242 | ### Relationships between Instruction set, CPU and high-level language 243 | ### Instruction types 244 | ### What is 0 address instruction? 245 | ### Which are types of operands? 246 | ### Which are types of operations? 247 | ### Shift 248 | ### MMX Instructions and applications 249 | ### Data types 250 | ### Functions of MMX instructions 251 | 252 | # 第十一章: Instruction Sets: Addressing Modes and Formats 253 | ## 核心要点 254 | ### Common addressing modes 255 | ### PII addressing modes 256 | ### PII instruction format 257 | 258 | # 第十二章:CPU Structure and Function 259 | ## 核心要点 260 | ### Internal structure of CPU 261 | ### Register organization 262 | ### Pipelining 263 | ### How to process the branches 264 | 265 | # 第十三章: Reduced Instruction Set Computers 266 | ## 核心要点 267 | ### Characteristics of RISC computer 268 | ### Large registers &Organization of registers 269 | ### Optimized pipelining 270 | 271 | # 第十四章: Instruction Level Parallelism and Superscalar Processors 272 | ## 核心要点 273 | ### What is superscalar? Which elements may limit its performance? How to improve the performance? 274 | ### Instruction-issue Policy 275 | ### Register Renaming 276 | ### Superscalar organization of PII & P4 277 | 278 | # 第十六章: Control Unit Operation 279 | ## 核心要点 280 | ### Concept of micro operation 281 | ### Model and organization of control unit 282 | ### Implementing modes of CU 283 | 284 | # 第十七章: Micro-programmed Control 285 | ## 核心要点 286 | ### Concepts 287 | - Microinstruction 288 | - Microprogram 289 | - Firmware 290 | - Control word 291 | ### Key elements of the control unit 292 | ### Where does address of control memory come from 293 | ### Basic tasks of microprogrammed control unit 294 | ### Applications of microprogramming 295 | 296 | # 第十八章: Parallel Processing 297 | ## 核心要点 298 | ### Taxonomy of parallel processor architecture 299 | ### SMP 300 | - Characteristics 301 | - Organization modes 302 | - OS 303 | ### MESI protocol 304 | ###Clusters 305 | - Configurations 306 | - Applications 307 | - OS 308 | ### NUMA 309 | - Organization 310 | - Memory access 311 | ### Application of Supercomputer and Vector or array computer and Chaining Technique 312 | 313 | -------------------------------------------------------------------------------- /COA/CH1-ComputerOrganiation&Architecture.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/COA/CH1-ComputerOrganiation&Architecture.pdf -------------------------------------------------------------------------------- /COA/README.md: -------------------------------------------------------------------------------- 1 | computer organization and architecture. 2 | -------------------------------------------------------------------------------- /COA/img/README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /COA/img/computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/COA/img/computer.png -------------------------------------------------------------------------------- /COA/img/hil-computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/COA/img/hil-computer.png -------------------------------------------------------------------------------- /COA/img/hl-computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/COA/img/hl-computer.png -------------------------------------------------------------------------------- /COA/img/ias.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/COA/img/ias.png -------------------------------------------------------------------------------- /COA/img/io-module-structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/COA/img/io-module-structure.png -------------------------------------------------------------------------------- /COA/img/ram_comparision.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/COA/img/ram_comparision.png -------------------------------------------------------------------------------- /DataBase/principle_of_database/README.md: -------------------------------------------------------------------------------- 1 | ## 以下的所有内容是本人于2017年(大二下)对于《数据库系统原理》学习的笔记与个人心得与体会。 2 | -------------------------------------------------------------------------------- /DataBase/principle_of_database/data_independence_and_relationship_pattern_normalization.md: -------------------------------------------------------------------------------- 1 | # 关系模式设计中的问题 2 | ## 关系数据库设计要解决的主要问题 3 | 4 | - 什么样的数据库模式才合理? 5 | - 怎么分解才能满足要求? 6 | - 衡量的标准是什么? 7 | - 理论基础是什么? 8 | - 如何进行实现? 9 | 10 | ## 关于好的数据库模式 11 | 好的数据库模式是不会发生插入异常、删除异常、更新异常,同时数据冗余尽可能少的模式。 12 | 13 | 产生不好模式的**根本原因**是数据之间存在着**某些数据依赖**。 14 | 15 | **解决方法**是通过分解关系来消除其中不合适的数据依赖。 16 | # 数据依赖 17 | ## 数据依赖的定义 18 | 数据依赖是数据之间的相互制约关系,是一种**语义**体现。 19 | 20 | ## 数据依赖的类型 21 | 22 | - 函数依赖(FD) 23 | - 多值依赖(MVD) 24 | - 连接依赖(JD) 25 | 26 | ## 函数依赖的定义 27 | 两个实例化的属性集X,Y,如果属性集X中的两个元组取值相同,必有对应的另外一个属性集Y中元组取值相同,则称Y函数依赖于X函数。 28 | 29 | 特别值得注意的是,如果属性集X中不存在两个取值相同的元组集合,则Y必定依赖于函数X,且函数X的属性集为超键。 30 | 31 | ## 平凡函数依赖和非平凡函数依赖 32 | ### 平凡函数依赖 33 | 如果Y依赖于X,同时Y是X的子集,那么称X -> Y 为平凡函数依赖 34 | ### 非平凡函数依赖 35 | Y不是X的子集 36 | 37 | 对于任意关系模式而言,平凡函数依赖是必然成立的,其并不反映新的语义特征,因此我们一般不讨论平凡函数依赖。 38 | 39 | ## 完全函数依赖和部分函数依赖、 40 | 完全函数依赖表示的就是函数X的属性集构成了**候选键**。其中形式化的表示就是如果对于X的任何一个子集Z,都有Y不依赖于X,则称Y完全函数依赖于X。 41 | 如果Y不完全函数依赖于X,则称Y部分函数依赖于X。 42 | 43 | 完全函数依赖的左部构成主键,不包含冗余的属性。 44 | 45 | ## 传递函数依赖和直接函数依赖 46 | 如果Y函数依赖于X,Z函数依赖于Y,其Y不是X的子集,X不依赖于Y,则称Z**传递依赖**于X,否则称Z**直接函数依赖**于X。 47 | 48 | ## 函数依赖的逻辑蕴涵 49 | {X→Y,Y→Z} ⊨ X→Z 50 | 51 | 即对于关系模式上的函数依赖集合F,只要X→Y是一个函数依赖,那么必然可以推导认为F逻辑蕴涵X→Y。、 52 | 53 | ## 函数依赖集合的闭包 54 | 由函数依赖集合F所逻辑蕴涵的全部函数依赖所构成的集合称之为F的闭包。 55 | F+={ X→Y|F|=X→Y} 56 | 57 | ### 闭包的性质 58 | - F 属于 F+,这是因为根据闭包的定义F中的每个函数依赖必定也在中F+; 59 | - (F+)+=F+,该性质说明闭包运算是幂等的,即F经过任意多次的闭包运算后其结果仍然等于F+ 60 | - 如果F=F+,则称F是完备的 61 | 62 | 实际上函数依赖集合的闭包是**NP问题**,因此我们需要使用其他闭包。 63 | 64 | ## 函数依赖的推理规则(Armstrong公理) 65 | 设U是关系模式R的属性集,F是R上的函数依赖集,则有: 66 | **A1(自反律)**:如果Y X U,则X→Y成立; 67 | **A2(增广律)**:如果X→Y成立,且Z U,则XZ→YZ成立 68 | **A3(传递律)**:如果X→Y,Y→Z成立,则X→Z成立 69 | 70 | 以上三条合起来成为Armstrong公理。 71 | 72 | 由A1~A3易推出下面的三条推理规则也是正确的: 73 | - 合并规则:若X→Y,X→Z成立,则X→YZ成立; 74 | - 伪传递规则:若X→Y,WY→Z成立,则WX→Z成立; 75 | - 分解规则:若X→Y,且Z 属于 Y,则有X→Z; 76 | 77 | ## 函数依赖的逻辑导出 78 | 如果给定的关系模式中,函数依赖集合F由Armstrong公理能够推导出X→Y,则称X→Y是F的逻辑导出。记为F=>X→Y。 79 | 80 | 值得注意的是,逻辑蕴涵是显式存在的关系,而逻辑导出是隐含存在的关系。 81 | 82 | ## 属性集合的闭包 83 | X+F ={A|A∈U,F=> X→A} 84 | 85 | 值得注意的是,求解属性集合的闭包的计算量远远小于求解函数依赖集合的闭包,因为属性集合的闭包是可数的,最多就是属性全集本身。 86 | 87 | ### X→Y可由Armstrong公理推出的充分必要条件是Y 属于 X属性结合的闭包 88 | 89 | ### 算法:求解属性集X关于U上的函数依赖集F的闭包 90 | 关于数据库系统原理的数据依赖部分的所有算法,只需要能够将其应用于解决实际问题即可。 91 | 92 | **如:** 93 | 属性集U为ABCD,FD集为{ A→B,B→C,D→B }, 则A+=ABC; AD+=ABCD; BD+=BCD 94 | 95 | ## Armstrong公理的正确性和完备性 96 | - **Armstrong公理的正确性**是指“使用推理规则从FD集F推出的FD必定在F+中”即,如果F=>X→Y 则 F|=X→Y 97 | - **Armstrong公理的完备性**是指“F+中的FD都能从F集使用推理规则集导出” 98 | 即,如果F|=X→Y 则 F=>X→Y 99 | **Armstrong公理的正确性和完备性**保证了FD推导过程的有效性和可靠性 100 | 101 | Armstrong公理的正确性和完备性说明**逻辑导出**和**逻辑蕴涵**是两个等价的概念。 102 | 103 | ## 函数依赖集的等价覆盖 104 | 设F,G是两个函数依赖集合,如果F+=G+ ,则称F等价于G,或者F与G互相覆盖 105 | F与G等价的充分必要条件是F属于G+ 并且G属于F+。 106 | 107 | 要判定F 属于 G+,只须逐一对F中的函数依赖X→Y,考查Y是否属于XG+ + 108 | **关于等价覆盖的掌握需要到哪一个程度?** 109 | 110 | ## 最小函数依赖集 111 | 1. 右部均为单属性 112 | 2. 左部没有对于属性 113 | 3. F中没有对于的函数依赖 114 | 115 | **一个函数依赖集F均等价于一个最小函数依赖集Fmin ** 116 | 117 | ### **例:** 118 | R(A,B,C,D,E,H,I),F = {A→BE, AH→D, B→C, BD→E, C→D, H→I, I→H, H→BE},试求F的最小依赖集Fmin。 119 | 120 | **解**:⑴右部拆成单属性 121 | F={A→B, A→E ,AH→D, B→C, BD→E, C→D, H→I,I→H, H→B, H→E} 122 | ⑵考察左部不是单属性的函数依赖,消除多余属性 123 | AH→D ∵((AH)-H)F+=ABECD,D∈((AH)-H)F+ 124 | ∴以A→D取代AH→D 125 | BD→E ∵((BD)-D)F+=BCDE,E∈((BD)-D)F+ 126 | ∴以B→E取代BD→E 127 | 则 F={A→B, A→E ,A→D, B→C, B→E, C→D, H→I,I→H, H→B, H→E} 128 | 129 | ⑶消除多余的函数依赖 130 | A→B ∵AG+=AED,B∉ AG+(G=F-{A→B}) ∴保留该函数依赖 131 | A→E ∵AG+=ABCDE,E∈ AG+(G=F-{A→E}) ∴不保留该函数依赖 132 | A→D ∵(A)G+=ABCDE,D∈ (A)G+(G=F-{A→D}) ∴不保留该函数依赖 133 | B→C ∵BG+=B,C ∉ BG+(G=F-{B→C}) ∴保留该函数依赖 134 | B→E ∵(B)G+=BCD,E ∉ (B)G+(G=F-{B→E}) ∴保留该函数依赖 135 | C→D ∵CG+=AE,D∉CG+(G=F-{C→D})∴保留该函数依赖 136 | H→I ∵HG+=HBECD,I ∉HG+(G=F-{H→I}) ∴保留该函数依赖 137 | I→H ∵IG+=I,H ∉ IG+(G=F-{I→H}) ∴保留该函数依赖 138 | H→B ∵HG+=HIE,B∉ HG+(G=F-{H→B})∴保留该函数依赖 139 | H→E ∵HG+=HBCDE,E∈HG+(G=F-{H→E}) ∴不保留该函数依赖 140 | 最后剩下的F是最小函数依赖集: 141 | Fmin= {A→B, B→C, B→E,C→D, H→I, I→H, H→B} 142 | 143 | **F的最小依赖集Fmin不一定唯一,它和我们对各函数依赖FDi 及X→A中X各属性的处置顺序有关** 144 | 145 | ## 多值依赖 146 | ### 多值依赖的定义 147 | 对于某个关系上的三个属性A, B, C。如果属性B,C的取值都不单一,同时B的取值与C无关,也就是B依赖于A,随着A取值的变化可以取不同的值。 148 | 149 | ### 形式化描述 150 | 设R(U)是属性集U上的一个关系模式。X,Y,Z是的U的子集,并且Z=U-X-Y,如果对R(U)的任一关系r,都有如下性质:如果r中存在2个元组s、t,使得: 151 | s[X]=t[X] 152 | 则r中必存在元组u,使得: 153 | (1) s[X]=t[X]=u[X] 154 | (2) u[Y]=t[Y] 且 u[Z]=s[Z] 155 | (即交换s、t在Y上的值得到的2个元组必在r中) 156 | 则称关系模式R满足多值依赖X→→Y 157 | 158 | ### 多值依赖的注意事项 159 | 值得注意的是,多值依赖会导致数据冗余和更新异常,因此我们在进行数据模式设计的时候,要消除多值依赖。一般使用的方法是建立两个关系,让每个关系只存储一个多值属性的数据。 160 | 161 | ### 多值依赖的推导规则 162 | 与函数依赖一样,多值依赖也有一组推导规则: 163 | A4:互补律(MVD) 164 | 如果X→→Y,则X→→(U-XY) 165 | 以后如果需要,可用X→→Y|(U-XY)表示多值依赖,以强调其互补关系 166 | A5:扩展律(MVD) 167 | 如果X→→Y且VW,则WX→→VY 168 | A6:传递律(MVD) 169 | 如果X→→Y且Y→→Z,则X→→(Z-Y) 170 | 下面两条为(FD+MVD)公理: 171 | A7:如果X→Y,则X→→Y,即FD是MVD的特例 172 | A8:如果X→→Y、ZY且对某个与Y不相交的W有:W→Z,则X→Z 173 | 174 | 由上述公理,还可以得出下列四个有关MVD的推导规则: 175 | MVD合并规则 176 | 如果X→→Y、X→→Z,则X→→YZ 177 | MVD伪传递规则 178 | 如果X→→Y、WY→→Z,则WX→→(Z-WY) 179 | 混合伪传递规则 180 | 如果X→→Y、XY→→Z,则X→(Z-Y) 181 | MVD分解规则 182 | 如果X→→Y、X→→Z,则X→→(Y∩Z)、X→→(Y-Z) X→→(Z-Y)均成立。 183 | 184 | **关于多值依赖的具体内容,在学习深化的过程中去进行深入理解与记忆。** 185 | 186 | ## 多值依赖与函数依赖 187 | 函数依赖规定某些元组不能够出现在关系中,也被称之为**相等产生依赖**; 188 | 多值依赖要求某种形式的其他元组必须在关系中,称为**元组产生依赖**。 189 | 190 | ### 有效性范围 191 | **对于函数依赖** 192 | X→Y的有效性仅决定于X、Y属性集上的值,它在任何属性集W(XY 属于 W 属于 U)上都成立。 193 | 若X→Y在R(U)上成立,则对于任何Y′ 属于 Y,均有X→Y ′成立。 194 | 195 | **对于多值依赖** 196 | X→→Y在属性集W(XY 属于 W 属于 U)上成立,但在U上不一定成立 197 | 若X→→Y在R(U)上成立,则不能断言对于Y′ 属于 Y,是否有X→→Y ′成立 198 | 199 | ### 嵌入式多值依赖 200 | 嵌入式多值依赖是指函数依赖X→→Y在模式R上不成立,但是在R的子模式W上成立,则称X→→Y为R上的嵌入型多值依赖。 201 | 202 | # 关系模式分解 203 | 关系模式的分解以及关系模式的规范化相关的内容,关于公式等的记忆学习,最好参照课件。 204 | 205 | ## 范式 206 | 范式就是关系数据库中满足不同规范化程度的关系模式的类。 207 | 第一范式是规范化约束范式,而其他范式根据下图进行依次类推。 208 | 209 | ![关系模式规范化](http://img.blog.csdn.net/20170327140149176?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 210 | 211 | 值得注意的是,3NF可以在保证无损连接的同时保持函数依赖,而BCNF和4NF则可能不会保持函数依赖了。因此,一般而言进行关系模式设计时,满足3NF的标准即可。 212 | 213 | # 关系模式规范化 214 | ## 规范化 215 | 关系模式的规范化过程实际上就是按照不同级别范式的要求条件对模式进行逐渐分解的过程。 216 | -------------------------------------------------------------------------------- /DataBase/principle_of_database/database_design.md: -------------------------------------------------------------------------------- 1 | # 概述 2 | ## 数据库系统生命周期 3 | 数据库设计是数据库系统生命周期中最为重要的部分。 4 | 数据库设计的**核心**是根据用户的**信息需求**和**处理需求**设计出系统的数据库模式和应用软件。 5 | 6 | 数据库的生存周期有如下几个阶段: 7 | - 系统规划 8 | - 数据库设计(后面会提到) 9 | - 系统实现(编码与测试) 10 | - 运行和维护 11 | 12 | ## 数据库设计的六个阶段 13 | - 需求分析 14 | - 概念设计 15 | - 逻辑设计 16 | - 物理设计 17 | - 编码实现与测试 18 | - 运行维护 19 | 20 | 关于其形象化的说明我们可以参看下图:数据库设计的基本过程 21 | 22 | ![数据库设计基本流程](./img/5.1.PNG) 23 | 24 | ## 数据库设计过程的各级模式 25 | 26 | ![数据库设计过程的各级模式](./img/5.2.PNG) 27 | 28 | 其中,概念模式相当于外模式,逻辑模式相当于模式,而物理模式相当与内模式。。 29 | 30 | # 需求分析 31 | ## 需求分析的任务 32 | - 详细调查现实世界要处理的对象 33 | - 充分了解原系统(无论手工系统还是计算机系统) 34 | - 明确用户的各种需求(信息需求,处理需求,安全性需求等) 35 | - 确定新系统的功能 36 | - 充分考虑今后可能的扩充和改变(这一点往往较难) 37 | - 编写需求分析说明书 38 | 39 | ## 需求分析的重点 40 | 需求分析的重点是用户的**信息**和**处理**,也就是获得用户对于数据库的**真实**要求。 41 | 42 | ## 需求分析的难点 43 | 确定用户的真实需求的难点主要有两个方面的内容。一方面是用户缺少计算机相关知识;另一方面是设计人员缺少用户的专业知识。解决的方法是设计人呀un必须不断深入地与用户进行交流。 44 | 45 | 在对用户需求进行分析的时候,我们还要充分考虑**需求分析的不确定性**。这意味着每个人在转述某一个问题时往往带有主观因素,因此有可能程序员对于软件需求的理解与用户的实际需求之间存在着巨大的差距。 46 | 47 | ## 需求分析的步骤 48 | 需求分析一般分为三步: 49 | - 需求信息的收集 50 | - 需求信息的分析整理(主要是进行程序猿层面的抽象--共性整理) 51 | - 编写需求分析说明 52 | 53 | ## 需求分析的结果 54 | - 确定系统范围,产生系统范围图 55 | - 分析用户活动,产生业务流程图 56 | - 分析用户活动涉及的数据,产生数据流图 57 | - 分析系统数据,产生数据字典 58 | 59 | # 概念设计 60 | 概念设计就是将用户需求分析阶段的结果进行共性整理与抽象。 61 | 62 | 我们一般采用E-R模型来进行概念设计。通过之前的学习知道,E-R模型一般由实体、关系和联系这三部分构成。 63 | 64 | ## 扩充的ER模型 65 | 由于现实世界中客观存在的某些事物无法通过ER模型进行准确描述,因此需要对基本的ER模型进行一些拓展。 66 | 67 | 拓展的主要内容包括:弱实体,普遍化/特殊化、范畴、聚集等扩充ER模型的概念。 68 | 69 | ### 弱实体 70 | 弱实体就是某些依附于其他实体而存在的实体。 71 | 72 | ### 普遍化/特殊化 73 | 特殊化就像将超实体集划分为多个子实体集的结果。其中,超实体集就像是程序设计中的接口或者是超类。例如学生就是一个超实体集,可以将学生分为本科生、研究生这两个子实体集。 74 | 75 | 普遍化与特殊化相反,不同之处在于特殊化形成的子实体集可以扩展其他属性,而进行普遍化的多个子实体集的**并**等于原实体集本身。 76 | 77 | 关于聚集和范畴的理解程度。。。。。完成到第39页 78 | 79 | 80 | # 逻辑设计 81 | # 物理设计 82 | # IDEF 1X 方法 83 | # 数据库实施 84 | # 数据库运行与维护 85 | -------------------------------------------------------------------------------- /DataBase/principle_of_database/img/5.1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DataBase/principle_of_database/img/5.1.PNG -------------------------------------------------------------------------------- /DataBase/principle_of_database/img/5.2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DataBase/principle_of_database/img/5.2.PNG -------------------------------------------------------------------------------- /DataBase/principle_of_database/introduction.md: -------------------------------------------------------------------------------- 1 | # 基本说明 2 | 数据库系统原理的系列章节是基于《数据库系统原理》的基础之上,结合自己的心得与体会进行的归纳总结。 3 | 由于这些内容都是自己对数据库相关内容学习的最初理解,因此有所不妥的地方欢迎批评指正。 4 | 在此,特别感谢侯迪老师的辛勤教学工作以及很高的个人修养,讲课堂内容真的是深入浅出,为人有风格,受益匪浅。 5 | 同时,由于实际需要,在实际学习过程中的每次课程的笔记发表在本人CSDN中,账号为williamyi96。 6 | 7 | # 数据管理技术的发展 8 | ## 数据管理历史阶段 9 | 数据管理技术经历了三个阶段,分别为: 10 | 11 | - 人工管理阶段 12 | - 文件系统阶段 13 | - 数据库系统阶段 14 | 15 | ## 数据库系统与文件系统 16 | ### 数据库系统与文件系统的优缺点 17 | 由于文件系统的数据记录之间没有联系,同时难以维护数据的完整性,并且较难进行查询,因此利用了结构化的数据存储模式,并且提升了数据的安全性以及维护能力的数据库系统。 18 | 19 | 就效率而言,显然数据库系统具有较高的开发效率,但是文件系统并不是一无是处,其具有较高的运行效率。 20 | 21 | ### 数据库系统与文件系统的本质差异 22 | 数据库系统与文件系统的本质差异是数据库系统将数据管理的功能独立出来了,而不是再依附于应用本身,因此其具有较好的数据共享能力,同时防止了其他应用对数据的恶意操作,提升了数据的安全性。 23 | 24 | ![数据库系统与文件系统的本质差异](http://img.blog.csdn.net/20170304145806148?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 25 | 26 | # 数据库系统 27 | ## 数据库的定义 28 | 数据库是**长期储存**在计算机内,**有组织**的,**可共享**的**大量**数据的集合。 29 | 30 | 由定义可知,数据库中的数据之间有组织,也就是数据彼此之间相互联系,同时数据之间可以被多个应用共享。 31 | 另外值得注意的是,数据库中的数据具有最小的冗余度和较高的独立性。由于数据管理从应用中剥离出来了,因此各个数据管理系统之间的数据采用了集合合并的方式,最大程度地降低了数据的冗余度。同时,正是由于冗余度低,因此数据之间的独立性高。 32 | 33 | ## 数据库系统的定义 34 | 数据库系统是实现有组织、动态地存储大量相关的结构化数据、方便各类用户访问的计算机软硬件资源的集合。 35 | ## 数据库系统的组成 36 | DBS = DB + DBMS + APP 37 | 以上为数据库系统的核心组成,涉及到诸如以DBMS为核心的开发工具等内容不具体考虑。 38 | 39 | 其结构为: 40 | ![数据库系统的组成](http://img.blog.csdn.net/20170304150917013?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 41 | 42 | ## 数据库系统的用户类型 43 | DBA + PROGRAMMER + END USER 44 | 45 | ## 数据库系统的特征 46 | 47 | - 信息冗余度小,易扩充。其是一种高度的结构化数据 48 | - 支持数据的不同视图。不同类型的用户所看到的数据情况是不一样的。 49 | - 较高的数据独立性。数据彼此之间结构上相互联系,但是逻辑上彼此独立。 50 | - 信息完整且功能通用。其是多种数据管理的最小完备子集合,因此数据信息对应用而言是完整的。又由于其数据由数据库管理系统进行集中管理,而且数据管理结构化,因此其公共具有通用性。 51 | 52 | 53 | # 数据模型 54 | ## 数据模型分类 55 | 针对不同的使用对象和应用目的,具有以下三种不同层次的数据模型: 56 | 57 | - 概念模型 58 | 59 | - 逻辑模型 60 | - 层次模型 61 | - 网状模型 62 | - 关系模型 63 | 64 | - 物理模型 65 | 66 | 另外还可以根据数据模型的表达方式(面向语法或者是面向语义),数据模型的应用范围等可以进行多种不同的划分。 67 | 68 | ## 数据与信息 69 | 数据都有**语法**和**语义**两个方面的内涵。 70 | **数据是符号化的信息,信息是语义化的数据。**以股市中的每个时段的股票价值为例,数字本身是数据,而如果构成一幅表征股票价格变动的图,这就是信息。又如,称黑白点阵为数据,而称其构成的图像则为信息。 71 | 数据处理的目的就是要找出有价值的信息。数据处理的过程就是便于更快地找到所需要的信息,来将其作为后期决策的依据。 72 | 73 | ## 数据模型的定义 74 | 将数据的定义和操作从应用程序中分离出来,交由数据库管理系统进行定义和管理时,数据库管理系统需要采用某种数据结构来定义、存储要管理的数据。这种数据结构相当于是数据库管理系统的数据模型。 75 | 76 | 在构建数据模型时,有概念数据模型和结构数据模型。两者的本质区别是概念数据模型是面向真实世界的,而结构数据模型是面向计算机世界的。同时,值得注意的是,连接计算机世界与现实世界的桥梁是信息世界。 77 | 78 | 更为形式化地定义数据模型是:数据模型是规定现实世界数据特征的抽象,是用来描述数据的语法、语义和操作的一组概念组合。 79 | 80 | ## 对数据模型的要求 81 | 82 | - 能比较真实地模拟现实世界 83 | - 能够被人所理解 84 | - 便于在计算机上进行实现 85 | 86 | 值得注意的是,前两条与最后一条之间往往是矛盾的,因此我们需要辩证地去思考如何实现数据模型的高效化。 87 | 88 | ## 数据模型三要素 89 | 数据模型通常由数据结构、数据操作和完整性约束三部分组成。其中,数据结构式指数据的组织形式,数据操作是指查询和更新,完整性约束是指规定数据合理正确的限制性条件。 90 | 91 | ## 逻辑数据模型 92 | 逻辑数据模型典型的有三种(数据模型分类时已经做具体说明,在此不赘述),其中层次模型可以使用树进行呈现,网状模型可以用图进行呈现,而关系模型则可以通过表来进行呈现。各种逻辑模型之间的区别在于数据之间联系的表示方式不同。 93 | 94 | 由于网状模型和层次模型在进行实现时,结构往往较为复杂。因此,关系模型被广泛地使用。 95 | 96 | 关于关系模型的具体内容将在第二章中进行详细介绍。 97 | 98 | ## 数据模式 99 | 数据模式是数据模型的实例化。相当于数据模型提供了一个书架,而数据模式是根据这个书架将其填满了书。 100 | 101 | ### 三级数据模式 102 | ![三级模式结构](http://img.blog.csdn.net/20170304162616205?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 103 | 104 | 现代数据库设计中一般采用上述三级模式结构,其中本质的目的是提升物理数据和逻辑数据的独立性。外模式与模式之间的映射关系提升了逻辑数据的独立性,同时内模式和模式之间的映射关系提升了物理数据的独立性。下面以图书馆的书籍管理为例进行说明: 所有书籍的图书馆编号就是模型,其有且仅有一个,而外模式就是根据书籍的不同类别进行分类之后的索引号,外模式与模式之间构成了一种映射; 而内模式就是对应于编号之后的具体的书籍的物理位置,其与模式之间也是一种映射关系; 105 | 106 | 当我们需要修改数据库的信息时,无论是修改外模式还是内模式,我们都不需要对内模式进行修改,我们只需要更改对应的映射关系即可。 107 | 108 | # 数据库管理系统 109 | ## 数据库管理系统的主要功能 110 | DBMS提供了数据的定义、操纵、存储、保护和维护功能。 111 | 112 | 数据库管理系统是数据库系统的核心,由应用程序到数据库的级联结构我们可以看到,所有应用程序访问数据库的请求都是由数据库管理系统来处理的。 113 | 114 | ## 对数据库的操作 115 | 广义上来说,各种用户对数据库的操作请求有两类,分别为查询和更新。其中更新包括“删”“改”“查”。 116 | 117 | 数据库管理系统在执行上述对数据库的操作时,主要有两种方式:解释方法和预编译方法。解释方法是将数据库管理系统作为数据库的核心成分,同时将每一次的命令都通过数据库管理系统进行执行;而预编译则是在运行之前,对将要执行的数据库语句进行编译处理,保存为可执行的代码。随着数据库技术的发展,前者已经逐渐被后者取代。 118 | 119 | ## 数据目录 120 | ### 数据目录的定义 121 | 数据目录时一组关于数据的数据,也被称之为元数据。 122 | ### 数据目录的基本功能 123 | 数据目录的基本功能是将数据库中的数据进行统一管理,实现大范围内的数据共享,并且使系统将相关定义和描述进行长期保存。 124 | 125 | ### 数据目录与一般数据的区别 126 | 与一般数据相比,数据目录只能由系统定义和为系统所有,在初始化时由系统自动生成,而不能够用SQL之类的语句定义,同时往往相对而言是静态的。也就是一般定义了数据的组织形式之后一段时间不会发生改变;而一般的数据可以使用SQL之类的语句进行定义,同时往往是动态的,也就是数据库中的数据可以进行更新。 127 | -------------------------------------------------------------------------------- /DataBase/principle_of_database/query_processing_and_optimization.md: -------------------------------------------------------------------------------- 1 | # 查询处理与查询处理的定义 2 | **查询处理**:从用户发出查询请求到得出查询结果的过程 3 | 4 | **查询优化**:查询的执行策略往往不只一条,查询优化的目的就是从众多的执行路径中找到高效执行策略的处理过程 5 | 6 | # 查询处理 7 | 8 | ## 查询处理步骤 9 | 1). 语法树、语法图 10 | 2). 标准形式(优化) 11 | 12 | 13 | -------------------------------------------------------------------------------- /DataBase/principle_of_database/relationship_model.md: -------------------------------------------------------------------------------- 1 | # 基本概念 2 | ## 关于关系模型 3 | 关系模型是逻辑模型中的一种,也是现在普遍使用的一种。其由实体、属性和关系三者构成。其可以使用一张二维表进行关系呈现。 4 | 5 | 关系模型由数据结构、数据操作和完整性约束三部分构成。其中数据结构是指数据自身的组织形式;数据操作是指对数据进行的增删改查的操作,而对数据的查询是该模型中最为重要的操作;完整性约束是指满足现实条件的数据值的范围等。 6 | 7 | 关系查询操作根据其理论基础的不同,可以分为关系代数和关系演算两大类。其中,关系代数是以集合论为基础发展而来的,关系演算是以谓词逻辑为基础发展而来的。 8 | 关系代数的主要操作包括选择、投影、连接等关系专用操作和交、并、差等通用的集合操作;关系演算按照其谓词变量的不同又分为元组关系演算和域关系演算。 9 | 其中,关系代数与安全的元组关系演算和安全的域关系演算之间是等价的。 10 | 11 | ## 关系的定义 12 | **关系就是由域通过笛卡尔积构成的集合上的子集。** 13 | 14 | 关系在二维数表中进行呈现,其中每一列表示的是一个**属性**,而除了属性标识列的每一行都被称之为一个**元组**。 15 | 16 | **关系中的各种键** 17 | 超键:能够唯一确定一个元组的一个或者多个属性集; 18 | 主键(候选键): 将超键中某些冗余的属性去掉之后的最小完备集合; 19 | 外键:如果关系R1的某个属性集是关系R2的候选键;则称属性集对于R1而言是其外键; 20 | 21 | 值得注意的是,超键中可能存在冗余的属性集,也就是说去掉超键中的部分属性也可以唯一标识一个元组。 22 | 23 | ## 关系模式 24 | 关系模式是对关系的型的描述,也就是说关系模式是关系的实例化。举例来说,如果关系是一个空货架,那么关系模式就是装满书的货架。 25 | 26 | ## 关系的完整性 27 | 关系的完整性规则由域完整性约束、实体完整性约束、参照完整性约束、用户完整性约束四个部分构成。 28 | 29 | ### 域完整性约束 30 | 其主要约束两点:一则为元组分量能够在某一属性之下取空值;二则为元组分量在某一属性下的取值是否在其值域之内。 31 | 32 | ### 实体完整性约束 33 | 实体完整性约束又被称之为主键约束。其要求元组在键上的取值不能重复,同时也不能为空。 34 | 35 | ### 参照完整性约束 36 | 参照完整性约束又被称之为外键约束。其要求关系中不允许引用不存在的实体。如果属性集A为关系R的外键,属性集B为关系S的主键,当A对B进行引用时,其值要么等于关系S上某元组在主键上的值,要么取空值。 37 | 关于其概念理解不是太清晰,后续进行细致分析。 38 | 39 | ### 用户完整性约束 40 | 根据实际应用领域的关系模式进行的语义限制。例如人的年龄是递增的,而仓库的库存必须大于出货量等。 41 | 42 | # 关系代数 43 | ## 关系运算符 44 | 关系代数中运算对象是关系,运算结果也是关系。 45 | 关系运算符分为以下几种: 46 | 47 | - 集合运算符: 交并差,笛卡尔叉积 48 | - 专门运算符: 选择,投影,连接,除 49 | - 算术运算符 50 | - 逻辑运算符: 与或非 51 | 52 | 关于具体的关系代数的定义以及使用情况,参见课本以及PPT相关内容。 53 | # 关系演算 54 | 关系演算是以数理逻辑中的谓词演算为基础的。按谓词变元的分类,关系演算可以分为元组关系演算和域关系演算。其中元组关系演算以元组变量作为谓词变元的基本对象,域关系演算以域变量作为谓词变元的基本对象。 55 | 56 | **安全表达式** 57 | 无限关系和无穷验证在计算机中都是不允许出现的,我们将不产生无限关系和无穷验证的表达式称为安全表达式,为了保证运算的安全性而采取的限制措施称为安全约束。 58 | 59 | 并、差、笛卡尔叉积、投影和选择是关系代数最基本的操作,并构成了关系代数运算的最小完备集。 60 | 已经证明,在这个基础上,关系代数、安全的元组关系演算、安全的域关系演算在关系的表达和操作能力上是完全等价的。 61 | -------------------------------------------------------------------------------- /DataBase/principle_of_database/《数据库系统原理》综合实验报告.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DataBase/principle_of_database/《数据库系统原理》综合实验报告.pdf -------------------------------------------------------------------------------- /DataBase/principle_of_database/数据库期末考试复习规划.md: -------------------------------------------------------------------------------- 1 | # 数据库考试复习规划(2017-5-8~~5-11) 2 | 3 | |时间|完成事项|完成情况|备注| 4 | |---|---|---|---| 5 | |5-8|完成绪论、关系模型、关系数据库语言三部分的知识点整理与归纳,完成绪论作业的复习,完成后两次作业的重做|绪论、关系模型、SQL语言完成知识点归纳,最后两次作业重做完成|同时将作业内容找老师以及研究生学姐进行了批改| 6 | |5-9|完成数据依赖与数据模式规范化、数据库设计部分的知识点整理归纳与作业复习,均为复习,不需重做|复习完成,同时完成该部分的梳理与答疑|| 7 | |5-10|完成数据库6-7-8-9-10章的内容梳理以及作业重做|完成知识点梳理|其中6,10两章不要求掌握| 8 | |5-11|完成综合性的梳理,并进行答疑(下午将所有作业内容找老师进行批改)|未完成,11号晚上进行自主批改|| 9 | |5-11下午|找研究生学长学姐进行作业答疑|修改至进行作业自主批改|| 10 | |5-11,night|习题处理进展:(以下记录为完成): || 11 | ||数据依赖与关系模式规范化|完成|| 12 | ||绪论|完成|| 13 | ||关系模型|完成| 14 | ||关系数据库语言SQL|完成| 15 | ||所有内容复习完成|完成| 16 | 17 | 时间虽然紧迫,但是争分夺秒,相信我必定能够迈向成功!95+,我来了~ 18 | 19 | 5-12日数据库考试终于结束了,总体而言有以下的感触: 20 | 21 | 老实说,数据库的题量真是扎实,硬是写了100分钟没有停笔,港真,这套题出得真心挺不错的,除了没考锁基本上把重点全考了一遍,而且题目具有典型性且重复率低,看来老师是花了很多心思的啊。 22 | 23 | 虽然不喜欢背概念的我填空题和选择题是硬伤,有些遗憾,但总体还不错。 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /DataBase/principle_of_database/数据库系统原理复习.md: -------------------------------------------------------------------------------- 1 | 以下是根据《课程复习》的相关课件进行的知识点归纳与复习: 2 | 3 | 主要进行的是相关重要概念的解析: 4 | 5 | # 第一章:数据库系统概述 6 | ## 如下内容: 7 | - 数据管理技术的发展 8 | - 数据库系统 9 | - 数据模型与数据模式 10 | - 数据库管理系统 11 | 12 | ## 重要概念 13 | 1. DB, DBMS, DBS的定义 14 | DB: 长期存在于计算机中,有组织的,可共享的大量数据的集合; 15 | 16 | DBS: 实现由组织、动态存储大量结构化数据、方便各类用户访问的软硬件资源的集合; 17 | 18 | DBMS:为建立、使用和维护数据库而配置的通用软件系统 19 | 20 | 2. 数据管理技术的发展阶段特点: 21 | 22 | **主要从数据共享性、数据独立性、数据结构化、数据控制和用户接口等角度进行分析** 23 | 24 | - 人工管理阶段 25 | 应用程序单一,数据冗余大,数据不独立,无结构 26 | - 文件系统阶段 27 | 可进行长期保存,但是数据共享性差,数据独立性差,数据冗余大 28 | - 数据库系统阶段 29 | 面向全组织,面向现实世界,独立性较强,有了DBMS,由DBMS统一存取,维护数据语义及结构 30 | 31 | 32 | 3. 数据描述 33 | 概念设计、逻辑设计和物理设计等各阶段中数据描述的术语,概念设计中实体间二元关系的描述(1:1,1:N,M:N) 34 | 35 | REMAIN TO BE SEEN 36 | 37 | 4. 数据模型 38 | 数据模型的定义,两类数据模型,逻辑模型的形式定义,ER模型,层次模型,网状模型,关系模型和面向对象模型的数据结构及其联系的实现方式 39 | 40 | 5. DBS体系结构 41 | 三级模式,两级映像,两级数据独立性,体系结构各个层次中记录的联系,DBS的组成,DBA,DBS的全局结构,DBS结构的分类 42 | 43 | 6. DBMS 44 | DBMS的工作模式、主要功能和模块组成 45 | 46 | 47 | 此部分在周四下午进行梳理与归纳 48 | 49 | 50 | # 第二章:关系模型 51 | ## 如下内容: 52 | - 基本概念 53 | - 关系代数 54 | - 关系演算 55 | 56 | 57 | ## 重要概念 58 | 1. 关系的概念和结构 59 | 相关的重要概念主要有: 60 | 61 | - 关系模型由数据结构、数据操作和完整性约束三部分构成。其中,数据结构就是指数据以二维表的形式进行存储,数据操作宏观上分为更新和查询,其中更新又包括增,删,改。 62 | 63 | 关系查询操作根据理论基础的不同,可以分为关系代数和关系演算。其中关系代数是以集合论为基础,而关系演算是以谓词逻辑为基础。 64 | 65 | 关系代数的主要操作包括通用的并,差,交等集合操作,此外还有如选择,投影,连接等专用的代数运算操作;关系演算则按照其谓词变量的不同分为元组关系演算和域关系演算,其中元组关系演算是以元组的形式来进行推理,而域关系演算则是以每一个元组的分量构成的域进行的演算。 66 | 67 | - 完整性约束有四个方面的内容,分别为域完整性约束,实体完整性约束,参照完整性约束和用户自定义完整性约束。 68 | 69 | 其中域完整性约束表示的是元组在属性上的取值应该在其值域范围之内,此外还要规定元组在对应属性上的取值是否为空; 70 | 71 | 实体完整性也就是主键约束,表示的是元组在键上的取值不能重复且不能为空。 72 | 73 | 参照完整性是外键约束。指元组在外键上的取值在映射关系中的主键下一定能够找到元组取值相同,且其不能为空。 74 | 75 | 用户自定义完整性约束是用户根据实际系统的需要而添加的语义约束信息。 76 | 77 | - 关于关系代数和关系演算细节性的方面实际上通过例题可以很好地进行分析,在此对于其方法不再进行赘述。 78 | 79 | # 第三章:SQL结构化查询语句 80 | ## 重要内容 81 | - SQL的体系结构,组成特点 82 | SQL语言主要提供数据定义、数据操纵和数据控制等功能。 83 | 84 | 其中数据定义主要是对于基本表,视图,索引,模式等数据对象的定义及其修改,数据操纵语句主要用于数据的查询、插入、删除、修改,数据控制主要指的是用于用户权限的安全控制。 85 | 86 | - SQL的三级模式 87 | 1. 视图 --> 外模式 88 | 2. 基本表 --> 模式 89 | 3. 文件 --> 内模式 90 | 91 | - SQL相关查询语法 92 | 具体细节进行实例化掌握即可。 93 | 94 | - 视图的概念 95 | 视图是不存储具体数据,而仅在数据目录中存放其定义的“虚表”,它提供了一种间接访问数据库中基本表的方式。 96 | 97 | - 嵌入式SQL的概念 98 | 将SQL语句嵌入到高级语言之中。 99 | 100 | # 第四章:数据依赖与关系模式规范化 101 | 函数依赖可能导致数据冗余和更新异常。 102 | 103 | 主要是理解数据依赖包括两个方面的内容,一个是函数依赖,另外一个是多值依赖。 104 | 105 | 其中特别值得注意的依赖有完全函数依赖/部分函数依赖,直接函数依赖/传递函数依赖 106 | 107 | 关系模式的分解有两种形式,一种称之为无损连接分解,另外一种称之为保持函数依赖分解。 108 | 109 | 范式是满足了一系列限制条件的关系模式。关系模式规范化的过程就是根据不同级别范式的要求条件对模式进行逐渐分解的过程。 110 | 111 | 关于范式我们只考虑五种,分别为1NF, 2NF, 3NF, BCNF, 4NF。 112 | 113 | 其中1NF确立关系模式的成立性,也就是关系本身是一个基本表;2NF是指消除了非主属性对于外键的部分函数依赖;3NF是指消除了非主属性对外键的传递依赖;BCNF是指消除了主属性对于键的部分依赖以及传递依赖,4NF是消除了非平凡的多值依赖的结果。 114 | 115 | 规范化算法相对而言较为直白,哪个关系不满足规范就拆谁。 116 | 117 | # 第五章:数据库设计 118 | ## 重点掌握 119 | - 各阶段概念 120 | - 数据库设计的操作(根据需求描述进行概念设计和逻辑设计) 121 | 122 | # 第六章:存储结构不做要求 123 | 124 | # 第七章:查询处理与查询优化 125 | ## 相关概念 126 | 查询处理是从请求到结果的过程,而查询优化是从所有查询路径中选择最优的路径。 127 | 128 | 其中查询处理的基本步骤分别为: 129 | 130 | 1. 词法和语法分析,建立语法树/图; 131 | 2. 标准优化形式; 132 | 3. 确定底层的优化算法; 133 | 4. 生成查询计划 134 | 135 | 数据库查询语言可以分为解释和编译两种运行模式。 136 | 137 | 查询优化可以分为: 138 | 139 | 1. 规则优化 140 | 2. 代数优化(重点)--例题分析 141 | 3. 物理优化 142 | 4. 代价估算优化 143 | 144 | 四大连接算法: 145 | 146 | 1. 嵌套循环连接算法:自然连接,naive 147 | 2. 索引嵌套循环连接算法--关键点:建立了索引 148 | 3. 排序归并连接算法--关键点:属性有序存储,元组在属性上的排列有序 149 | 4. 散列连接算法--关键点:有散列函数进行了散列键上的操作 150 | 151 | ## 代数优化基本原则 152 | 尽量是选择和投影运算早于笛卡尔积和连接运算进行。 153 | 154 | ## 代数优化操作 155 | 代数优化的实际操作共有7条,相对简单,注意的是将树上的本题树形结构弄懂弄透。 156 | 157 | # 第八章:事务处理 158 | ## 事务相关概念 159 | 数据库环境下由一组数据库操作序列构成的逻辑工作单元。这些操作应该是一个不可分割的整体,要么全做,要么全不做。 160 | 161 | ## ACID性质及其变迁图 162 | - 原子性:任何事务构成的操作不可部分执行; 163 | - 一致性:无论事务成功与否都要保持其进入一致性状态; 164 | - 隔离性:并发事务之间各自的操作与其使用的数据互不影响; 165 | - 持续性:事务处理的结果可在一定时段内被硬盘保存。 166 | 167 | Atomicity, Consistency, Isolation, Durability. 168 | 169 | ## 重要概念 170 | ### 事务基础 171 | 1. 事务操作包含恢复和并发控制两个部分的内容。 172 | 173 | 2. 对事务的操作有读和写两种形式 174 | 175 | 3. 事务的状态分为活动状态,局部提交状态,提交状态,失败状态和终止状态,注意理清其连线图。 176 | 177 | 4. 故障的类别: 178 | 179 | - 事务故障 180 | 影响单个事务运行的任何条件,成因可能是逻辑错误和系统错误两种 181 | - 系统故障 182 | 使系统停止运转的任何事件--作用范围是所有事务 183 | - 介质故障 184 | 物理磁盘等故障--程度最高 185 | 186 | 5. 故障恢复的核心原理: **冗余** 187 | 188 | 造成冗余的基本方式有两种,一种是**数据备份**,另外一种是**事务日志文件**。 189 | 190 | 一般采用的方法是使用数据备份的方式将系统rollback到故障事务处理前的状态,然后通过事务日志文件重新执行发生故障阶段按时序执行的事务。 191 | 192 | - 恢复 193 | 恢复操作就是撤销(undo)故障发生时未完成的事务,并重做(redo)已完成的事务。 194 | 195 | 可以在数据库日志中使用**检测点**的恢复技术,重新开始文件,让恢复子系统在登录日志文件期间动态地进行日志维护。 196 | 197 | ### 并发控制 198 | 根据数据库处理事务的同时性与否可以分为串行和并行两种,而根据CPU的数量可以分为交叉和同时两种。这两两组合就构成了四种事务。 199 | 200 | 数据库的并发是指多个用户同时对同一数据库进行读取的情况。 201 | 202 | - 并发执行引起的问题 203 | 1. 丢失修改 204 | 2. 读“脏”数据 205 | 3. 不可重复读 206 | 207 | 产生数据不一致的主要原因:并发破坏了事务的**隔离性**。 208 | 209 | - 并发执行的正确性 210 | 当且仅当并发执行的结果与某次序串行地执行结果相同。 211 | 212 | 正确的并发调度 <==> 可串行化调度 213 | 214 | ### 基于锁的并发控制 215 | 加锁使事务T在数据对象释放锁之前具有绝对的控制权 216 | 217 | - 锁的类型 218 | 1. X锁:排他锁,不可读不可写; 219 | 2. S锁:共享锁,只读; 220 | 3. U锁:更新锁,最后写入时升级为X锁,提升并发度 221 | 222 | - 三级加锁协议 223 | 1. T --修改--> R前加X锁,T结束后释放 ==》防止丢失修改 224 | 2. 1级 + T --读取--> R前加S锁,读完释放 ==》 防止读脏数据 225 | 3. 2级 + 事务结束释放 ==》 三问题均得到解决 226 | 227 | - 2PL 228 | 事务分为扩展阶段和收缩阶段,其中扩展阶段仅能上锁,而收缩阶段仅能释放锁。 229 | 230 | 如果所有并发执行的事务均遵守两段锁协议,则对这些事务的任何并发调度都是可串行化的。 231 | 232 | ### 死锁 233 | **循环等待** 234 | 235 | 解决的方法: 236 | 1. 系统检测; 237 | 2. 发现并处理 238 | 239 | - 预防死锁: 240 | 1. 一次封锁法:降低了并发度; 241 | 2. 顺序封锁法:顺序难确定; 242 | 3. 申请锁时 --> retry 时间标记法,**年轻判断原则** 243 | 244 | - 检测并消除死锁 245 | 1. 超时法 246 | 2. 等待图法 247 | 248 | 消除: 撤销处理死锁代价最小的事务 249 | 250 | 活锁: “插队现象”(优先权) --解决方法--> “先来先服务” 251 | 252 | - 前趋图 253 | - 泳道图 254 | - 调度表示 255 | 256 | # 第九章:数据库完整性与安全性 257 | ## 完整性和安全性的概念 258 | 259 | ## SQL完整性约束、触发器和安全机制 260 | ## 自助存放控制与前置存取控制 261 | 262 | # 第十章:NoSQL概念了解,其与关系数据库的比较 263 | 264 | 第九章与第十章的内容完全没有考,但是特别注意数据库中的事务处理部分。 265 | 266 | 267 | 268 | 269 | -------------------------------------------------------------------------------- /DigitalLogic/img/74163逻辑符号.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/74163逻辑符号.png -------------------------------------------------------------------------------- /DigitalLogic/img/D串行计数器.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/D串行计数器.png -------------------------------------------------------------------------------- /DigitalLogic/img/D并行计数器.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/D并行计数器.png -------------------------------------------------------------------------------- /DigitalLogic/img/D电路图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/D电路图.png -------------------------------------------------------------------------------- /DigitalLogic/img/D逻辑符号.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/D逻辑符号.png -------------------------------------------------------------------------------- /DigitalLogic/img/ROM-PLA-PAL异同.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/ROM-PLA-PAL异同.png -------------------------------------------------------------------------------- /DigitalLogic/img/S-R电路图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/S-R电路图.png -------------------------------------------------------------------------------- /DigitalLogic/img/S-R逻辑符号.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/S-R逻辑符号.png -------------------------------------------------------------------------------- /DigitalLogic/img/T电路图1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/T电路图1.png -------------------------------------------------------------------------------- /DigitalLogic/img/T电路图2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/T电路图2.png -------------------------------------------------------------------------------- /DigitalLogic/img/T逻辑符号.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/T逻辑符号.png -------------------------------------------------------------------------------- /DigitalLogic/img/三种二进制代码关系图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/三种二进制代码关系图.png -------------------------------------------------------------------------------- /DigitalLogic/img/主从J-K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/主从J-K.png -------------------------------------------------------------------------------- /DigitalLogic/img/主从S-R.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/主从S-R.png -------------------------------------------------------------------------------- /DigitalLogic/img/二进制码向格雷码的转换.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/二进制码向格雷码的转换.png -------------------------------------------------------------------------------- /DigitalLogic/img/原码表示.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/原码表示.png -------------------------------------------------------------------------------- /DigitalLogic/img/反码表示.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/反码表示.png -------------------------------------------------------------------------------- /DigitalLogic/img/多项式替代法进制转换.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/多项式替代法进制转换.png -------------------------------------------------------------------------------- /DigitalLogic/img/数字系统基本模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/数字系统基本模型.png -------------------------------------------------------------------------------- /DigitalLogic/img/格雷码向二进制码的转换.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/格雷码向二进制码的转换.png -------------------------------------------------------------------------------- /DigitalLogic/img/状态分配判别方式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/状态分配判别方式.png -------------------------------------------------------------------------------- /DigitalLogic/img/组合电路分析步骤.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/组合电路分析步骤.png -------------------------------------------------------------------------------- /DigitalLogic/img/组合电路设计步骤.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/组合电路设计步骤.png -------------------------------------------------------------------------------- /DigitalLogic/img/补码表示.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/补码表示.png -------------------------------------------------------------------------------- /DigitalLogic/img/边沿触发D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/边沿触发D.png -------------------------------------------------------------------------------- /DigitalLogic/img/边沿触发J-K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/边沿触发J-K.png -------------------------------------------------------------------------------- /DigitalLogic/img/边沿触发J-K逻辑符号.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/DigitalLogic/img/边沿触发J-K逻辑符号.png -------------------------------------------------------------------------------- /DigitalLogic/数字逻辑知识点-概念-重点-解题思路归纳总结.md: -------------------------------------------------------------------------------- 1 | # Preface 2 | 以下内容为西安交通大学2015级本科生在《数字逻辑》课程相关PPT以及个人理解分析的基础之上进行了数字逻辑考前的相关知识点以及解题思路的总结。由于本人能力有限,其中不乏有许多缺漏之处,敬请读者批评指正。 3 | 4 | 我将按照篇章结构分为三个四个部分进行归纳总结: 5 | 6 | - Part I: 数字逻辑基础 7 | 8 | Chapter One: 数制与编码 9 | 10 | Chapter Two: 逻辑代数基础 11 | 12 | - Part II: 组合逻辑电路 13 | 14 | Chapter Three:组合逻辑电路的分析与设计 15 | 16 | - Part III: 时序电路 17 | 18 | Chapter Four: 同步时序电路的分析 19 | 20 | Chapter Five: 同步时序电路的设计 21 | 22 | Chapter Six: 异步时序电路的分析与设计 23 | 24 | - Part IV: 现代逻辑系统简介 25 | 26 | Chapter Seven:可编程逻辑器件(PLD) 27 | 28 | Chapter Eight: 数字系统设计 29 | 30 | ------------------------- 31 | 32 | # Part I: 数字逻辑基础 33 | ## Chapter One: 数制与编码 34 | ### 数制转换 35 | 数制转换共有三种方法,分别为多项式替代法,基数乘除法和直接转换法。 36 | 37 | | 方法名称 | 基本思想 | 缺点 | 38 | | ------ | ----------------------------------- | ------------------- | 39 | | 多项式替代法 | ![多项式替代法进制转换](./img/多项式替代法进制转换.png) | 必须已知beta进制的数制转换特点 | 40 | | 基数乘除法 | 整数部分除,逆序排列;小数部分乘,正序排列 | 必须已知alpha进制的数制转换特点 | 41 | | 直接转换法 | 根据进制数展开为二进制 | alpha与beta必须是2的指数形式 | 42 | 43 | 值得注意的是,对于任意两种进制之间的转换根据特点往往首先使用多项式替代法将其转换为十进制,然后通过基数乘除法将其转换为对应的进制。 44 | 45 | 此外,在进行数制转换时不能够丢失精度,因此有: 46 | 47 | k * log(alpha) / log(beta) <= j <= [k * log(alpha) / log(beta)] + 1 48 | 49 | ### 二进制数的代码表示 50 | 二进制的三种代码表示均将数字分为符号位和数值位来进行计算,在真值为正数时,三种表示形式相同,而当真值为负数时才存在差异。 51 | 52 | | 代码类型 | 说明 | 表示形式 | 表示范围 | 53 | | ---- | --------------------- | ------------------- | ---------------- | 54 | | 原码 | 正数符号位为0,负数符号位为1,下同 | ![](./img/原码表示.png) | -(2^n-1)~(2^n-1) | 55 | | 反码 | 正数数值位不变,负数数值位按位取反 | ![](./img/反码表示.png) | | 56 | | 补码 | 正数数值位不变,负数数值位按位取反最后加1 | ![](./img/补码表示.png) | | 57 | 58 | 如下是三种二进制代码的关系转换图: 59 | 60 | ![三种二进制代码关系图](./img/三种二进制代码关系图.png) 61 | 62 | **此处的码制的表示范围如何进行划分与确定???** 63 | 64 | ### 十进制数的代码表示 65 | 66 | | 码制类型 | 特点 | 十进制的表示 | 有权性 | 容错性 | 67 | | ----- | ------------------ | ------ | ---- | ------ | 68 | | 8421码 | | 去掉后6位 | 有 | | 69 | | 2421码 | | 去掉中间6位 | 有 | | 70 | | 余三码 | | 去掉前后三位 | 无 | | 71 | | 格雷码 | 相邻数的二进制码仅有一位不同 | | | 脉冲跳转容错 | 72 | | 步进码 | 多1位,从00000步进到10000 | | | 脉冲跳转容错 | 73 | | 奇偶校验码 | 增加了奇偶校验位 | | | 一位校验 | 74 | 75 | 76 | - 典型格雷码与二进制码的转换 77 | 78 | 1. 格雷码向二进制码的转换 79 | 80 | ![格雷码向二进制码的转换](./img/格雷码向二进制码的转换.png) 81 | 82 | 2. 二进制码向格雷码的转换 83 | 84 | ![二进制码向格雷码的转换](./img/二进制码向格雷码的转换.png) 85 | 86 | ## Chapter Two: 逻辑代数基础 87 | ### 逻辑代数基础 88 | 89 | | 类型名称 | 性质内容 | 备注 | 90 | | -------- | ---------------------------- | ---------------------- | 91 | | 基本逻辑运算 | 与或非 | --- | 92 | | 逻辑代数基本公理 | 特别注意:1+1=1,A+(BC)=(A+B)(A+C) | --- | 93 | | 逻辑代数基本定理 | 吸收定理,结合定理,反演定理,多余项定理(难点) | 看书 | 94 | | 三个规则 | 代入规则,反演规则,对偶规则 | 其中反演规则会将变量取反,而对偶规则变量维持 | 95 | 96 | ### 复合逻辑 97 | 逻辑函数可以由真值表,逻辑表达式和卡诺图三种形式进行表示。 98 | 99 | 复合逻辑具有与非逻辑(NAND)、或非逻辑(NOR)、与或非逻辑(AOI)、异或逻辑(XOR)等。 100 | 101 | 关于其符号进行重点记忆,特别是注意异或符号以及与或非符号。 102 | 103 | ### 最小项与最大项 104 | - 最小项:逻辑变量积的形式 105 | - 最大项:逻辑变量和的形式 106 | 107 | ### 最大、小项标准式 108 | - 最大项标准式:或与标准式 109 | - 最小项标准式:与或标准式 110 | 111 | 最小项标准式中正变量记为1,而最大项标准式中反变量记为1,最小项标准式和最大项标准式的关系是下标互补。 112 | 113 | ### 逻辑函数的化简 114 | - 逻辑函数化简的原则: 最简逻辑电路,最简与或式,最简或与式 115 | - 逻辑函数化简方式:代数法化简,卡诺图法化简 116 | 117 | **此处是否考察代数法化简??** 特别注意使用的多余项法进行化简的方式。 118 | 119 | 卡诺图法化简的基本流程参见课本,较为简单,周二复习。该部分完成。 120 | 121 | ------------------------- 122 | # Part II: 组合逻辑电路 123 | ## Chapter Three:组合逻辑电路的分析与设计 124 | ### 组合逻辑电路分析的一般步骤 125 | - 根据逻辑电路图写逻辑表达式 126 | - 使用卡诺图化简逻辑表达式 127 | - 列出真值表 128 | - 分析电路的功能 129 | - 尝试进行电路改进 130 | 131 | 如下以图片的形式直观地呈现了组合逻辑电路分析的一般步骤: 132 | 133 | ![组合电路分析的一般步骤](./img/组合电路分析步骤.png) 134 | 135 | ### 组合逻辑电路设计的一般步骤 136 | 组合电路的设计步骤大部分可以认为是组合电路分析的反过程,其步骤如下: 137 | 138 | - 根据需求明确任务 139 | - 列出真值表 140 | - 通过卡诺图化简得到最简逻辑表达式 141 | - 根据所选门类型进行表达式转换 142 | - 画出逻辑电路图 143 | 144 | 如下以图片的形式直观地呈现组合逻辑电路设计的一般步骤: 145 | 146 | ![组合电路设计的一般步骤](./img/组合电路设计步骤.png) 147 | 148 | ### 必须掌握的几个逻辑电路的分析与设计 149 | | 所属类型 | 电路功能 | 基本内容 | 150 | | ------ | ---------------------------------- | ---------------------------------------- | 151 | | 码制转换 | 2421码, BCD码,Gray码,8421码,余三码之间的相互转换 | 重点是分清各个码制的无关项,利用卡诺图进行化简 | 152 | | 电路应用 | 设计7人宿舍的灯控电路 | 采用数学归纳法,得到其就是多对象异或电路 | 153 | | 加法器 | 半加器,全加器 | 半加器Sh = A NOR B, Ch = AB, 全加器 Si = A nor B nor C(i-1), Ci = AB + AC(i-1) + BC(i-1) | 154 | | 比较器 | 原理较为基础 | --- | 155 | | 二进制乘法器 | 原理较为基础 | --- | 156 | 157 | 特别注意:在使用半加器进行全加器设计的时候,利用吸收率将Ci = AB + AC(i-1) + BC(i-1) 转换为 AB + A^BC(i-1) + ^ABC(i-1),然后进行电路设计即可。 158 | 159 | ### MSI基本介绍 160 | MSI--中规模集成电路,在进行电路设计时,不再以两个、四个触发器等形式作为基本单元进行设计,而是以更多的元件为基本单元进行硬件设计。其外部引腿可以分为**控制使能类**和**数据地址类**两种。 161 | 162 | ### 重点MSI器件 163 | 164 | | 器件类型 | 器件名称 | 器件特点 | 其他事项 | 165 | | ----- | ---------- | ------------------------- | -------------------------------------- | 166 | | 译码器 | 译码器138,139 | 译码器是后面包括全加器,数据分配器的核心,普遍适用 | 输出仅有一根引脚有效,2-4译码器(两个就是139),3-8译码器(138) | 167 | | 数据分配器 | --- | 将译码器倒过来用 | --- | 168 | | 多路选择器 | 151 | --- | --- | 169 | | 比较器 | 比较器86 | --- | 译码器的引端选择性连接 | 170 | | 加法器 | 加法器283 | --- | 译码器的引端选择性连接 | 171 | 172 | 1. 译码器的级联 173 | 174 | 5输入-32输出译码器:1个2-4译码器,4个3-8译码器 175 | 176 | 2. 加法器 177 | 178 | 将3-8译码器的引端选择性相连 179 | 180 | 3. **三态缓冲器的用途进行详细分析!!!考察的难度范围** 181 | 182 | 4. 多路选择器----在N路中选择一路进行数据传输 183 | 184 | 5. 将多路选择器的不同连接表示可以实现任意组合逻辑函数。 185 | 186 | 其后部分未完待续。。。。 187 | 188 | ------------------------- 189 | # Part III: 时序电路 190 | ## Chapter Four:同步时序电路的分析 191 | ### 时序电路基本概念 192 | - 时序电路和组合电路的异同 193 | 组合电路的输出仅与当前状态有关,而时序电路的输出不仅与当前状态有关,还与之前状态有关; 194 | - 同步时序电路和异步时序电路的异同 195 | 同步时序电路是指输入信号都是在同一个时钟周期送来的,而异步时序电路则是指信号在不同周期内送至 196 | 197 | - Mealy型电路和Moore型电路的异同 198 | Mealy型电路的输出不仅与现态有关,还与输入有关;而Moore型电路的输出仅仅与现态有关。这种差异也导致了其在研究方法上的差异。 199 | 200 | ### 时序电路的分析方法 201 | - 次态方程:次态与现态和输入的关系方程 202 | - 次态真值表:左边为输入和现态,右边为次态 203 | - 次态卡诺图: 204 | - 状态表:将x,y等均转变为0,1 205 | - 状态图:更直观的形式,便于分析电路的逻辑功能 206 | 207 | 特别注意的是Mealy型电路的输入x与输出是相伴相生的,而由于Moore型电路的输出与输入无关,因此在状态表中输出与输入无关。 208 | 209 | ### 双稳态元件 210 | 双稳态元件就是可以存放一个二进制数,同时当外界有一个脉冲时可以从一个状态跳转到另一个状态的元件。 211 | 212 | 以下是各种双稳态元件的演变过程: 213 | 214 | | 元件名称 | 电路图 | 逻辑符号 | 缺陷 | 215 | | ------------ | ---------------------------------------- | -------------------------- | ---------------- | 216 | | S-R触发器 | 较为简单, 实现稳态![](./img/S-R电路图.png) | ![](./img/S-R逻辑符号.png) | 有双1禁止,有空翻 | 217 | | 带使能端S-R触发器 | 增加了使能端 | --- | 所有S-R均不建议使用 | 218 | | **D触发器** | 将S-R通过非逻辑逻辑解决了双1禁止, ![](./img/D电路图.png) | ![](./img/D逻辑符号.png) | 有空翻 | 219 | | **边沿触发D触发器** | 解决了空翻问题 | ![](./img/边沿触发D.png) | PR强制置1端,CLR强制置0端 | 220 | | 主从S-R触发器 | 两个SR通过CLK的脉冲非逻辑解决空翻 ![](./img/主从S-R.png) | --- | 在CLK有效时可能会发生数据错误 | 221 | | 主从J-K触发器 | 在主从SR基础之上将Q正端反端与S-R分别相连 ![](./img/主从J-K.png) | --- | 功能强大 | 222 | | 边沿触发J-K触发器 | 通过D触发器的边沿特性将其改变为边沿触发 | ![](./img/边沿触发J-K逻辑符号.png) | 更有效地致使数据维持 | 223 | | T触发器 | 每当一个CLK脉冲过来,若T送1,则Q端变反 ![](./img/T电路图1.png) ![](./img/T电路图2.png) | ![](./img/T逻辑符号.png) | 计数触发器 | 224 | 225 | ### 同步时序电路分析步骤 226 | 1. 列出激励函数以及输出函数表达式 227 | 2. 次态方程 228 | 3. 二进制状态表 229 | 4. 二进制状态-输出表 230 | 5. 状态-输出表(二进制分配字母) 231 | 6. 状态图 232 | 7. 电路特性描述 233 | 234 | 详细分析见本章PPT中的三个经典例题。 235 | 236 | 关于时序图了解的程度如何??? 237 | 238 | ### 挂起问题的解决 239 | 电路挂起:无效序列无法回归到有效序列的现象 240 | 241 | 电路挂起的解决思路: 242 | 1. 无效序列的状态无关项全部指向0:一般不采取,成本太高,电路复杂度加大; 243 | 2. 打断一处“无效序列链”,令其指向有效序列; 244 | 3. 改变某一触发器的输入网络,同时进行最简设计 245 | 246 | 往往在实际进行解挂的过程中,“断链”和“改变输入网络”是同时进行的,最经典的实例就是Johnson计数器的设计(自恢复扭环移位计数器)。 247 | 248 | 注意典型的方法是利用无关项,进行输入网络的修改(也就是将所有无关项)。同时根据置0型和置1型的差异来进行无关项的选择。思路相当精巧。 249 | 250 | ### 计数器 251 | #### 基础计数器 252 | 计数器可以分为加1计数器,减1计数器,可逆计数器三类。其中这三类计数器都可以通过D触发器,JK触发器和T触发器进行设计实现,但是出于实际简便需要,因此往往采用D触发器进行设计。 253 | 254 | 设计实现的思路大致相同,以下按照CLK脉冲的同步性分串行计数器和并行计数器两类进行分析: 255 | 256 | 1. 串行计数器 257 | 258 | ![](./img/D串行计数器.png) 259 | 260 | 如上所示是串行加法器,通过修改向下级呈递的连接的从Q到^Q, 或者是修改为后端触发,都可以将其转换为串行减法器。 261 | 262 | 2. 并行计数器 263 | 264 | ![](./img/D并行计数器.png) 265 | 266 | 如上所示即是用D触发器实现的并行计数器,通过修改Q端以及后端触发的形式,也可以将其转变为串行减法器。 267 | 268 | 74169是一个可逆计数器,通过UP/DOWN端口为1时,为+1计数,而当为0时为-1计数。 269 | 270 | 一般而言,上述设计出来的计数器都是2^n型计数器,如果要设计任意位计数器,则可以采用如下的方式: 271 | 272 | #### 任意位计数器 273 | - 强制位计数器 274 | - 预置位计数器 275 | - 修正式计数器 276 | 277 | 1. 强制位计数器就是当计数器首次进入无效状态时,通过设计的一个与非门判别器,通知D触发器的置1端和置0端实现初始化,跳转到有效状态。 278 | 279 | 2. 预置位计数器就是当计数器进入起跳状态时,对相应的现态Di进行预置,当时钟脉冲到达时,马上进行跳转到初始状态; 280 | 281 | 3. 修正式计数器就是将预置位计数器得到的结构进行化简,以最简的形式设计的电路。 282 | 283 | 我们通过分析比较三者差异可以知道,强制位计数器由于允许有一个短暂的无效状态的存在,缩短了初始状态的时间,但是其同步和异步两种形式都可以使用,虽然预置位计数器可以解决无无效状态出现的问题,但是却只能在异步计数器中使用。 284 | 285 | #### MSI计数器(163)及其应用 286 | 74163的结构如图所示: 287 | 288 | ![](./img/74163逻辑符号.png) 289 | 290 | 通过对RCO端的串联可以实现163的级联,通过LD的选择性可以实现任意模数的计数器。 291 | 292 | ### 节拍分配器 293 | 关于计数型节拍分配器和移位型节拍分配器的具体介绍,待后续进行复习。 294 | 295 | ## Chapter Five:同步时序电路的设计 296 | 297 | 同步时序电路的设计过程恰好是同步时序电路分析的反过程,书上的三个经典的实例基本可以解释遇到的类似的所有问题了,要将相关的问题吃透。 298 | 299 | ### 同步时序电路设计过程 300 | 301 | - 建原始状态图和状态表 302 | - 化简成最简状态表 303 | - 分配状态二进制,将其转换为二进制表 304 | - 选择触发器, 确定激励函数和输出函数 305 | - 画出逻辑电路图 306 | 307 | #### 原始状态图和原始状态表 308 | 309 | 不求最简,只求正确。也就是通过该状态图可以实现数字系统的逻辑功能。 310 | 311 | #### 最简状态表 312 | 313 | 如果所有状态均确定,也就是没有无关量,则通过隐含表(掐头去尾表)和依赖表,然后根据其找到最大等效类;如果状态的输出含有无关变量,则通过隐含表和依赖表找到最大相容类。 314 | 315 | 无论是等效还是相容,判定上的相似的,都是要求两条,一个是输出相同,第二个是通过各种转换最后都来自与同一个祖先。但是值得注意的是,等效关系存在传递性,而相容关系不存在传递性。 316 | 317 | 状态合并之后我们再来寻找最小化状态表。 318 | 319 | 最小化状态表满足的条件: 320 | 321 | - 覆盖性:包含全部的原始状态; 322 | - 闭合性:任意一个相容类的次态应该属于集合中的相容类; 323 | - 最小化:满足覆盖性和闭合性关系的相容类或者是等效类的个数最少 324 | 325 | #### 状态分配 326 | 327 | 由于通过相关计算,待分配的状态数目较大,但是有许多的状态是等效的,因此我们仅仅需要找到次佳的分配状态即可,因而可以通过如下的计算方法进行状态分配问题的解释: 328 | 329 | - 分配规则 330 | 331 | 1. 输入相同,次态相同,现态相邻; 332 | 2. 输入相邻,现态相同,次态相邻; 333 | 3. 输出相同,现态相邻。 334 | 335 | 具体表现为如下公式: 336 | 337 | ![](./img/状态分配判别方式.png) 338 | 339 | 其中K为状态变量数,P为输入组合数,Q为输出组合数。 340 | 341 | 将得到的权值最大的状态之间相邻,同时也使其尽量出于低位,也就是状态分配时含0最多。 342 | 343 | #### 触发器选择 344 | 345 | 在进行触发器的选择时,如果不对功能有特殊的要求,那么选择最为简单的D触发器,如果需要较为强大的功能,则可以选用JK触发器。 346 | 347 | 如上即是同步时序电路分析的基本方法,虽然设计思路总体而言较为复杂,但是实际上方法相对单一,便于掌握。 348 | 349 | ## Chapter Six:异步时序电路的分析与设计 350 | 351 | 异步时序电路与同步时序电路最大的区别是,异步时序电路的输入是不同步的,也就是说CLK有多个进行控制,因此在进行整个逻辑电路分析与设计的过程中,要注意将CLKi纳入初始状态。 352 | 353 | 周三将第五、六章的所有习题重新再做一遍。然后周四下午答疑,从此以后也就完成了数字逻辑的所有复习任务。完成。 354 | 355 | ------------------------- 356 | # Part IV: 现代逻辑系统简介 357 | ## Chapter Seven:可编程逻辑器件(PLD) 358 | 359 | ### PLD电路模型 360 | ROM,PLA, PAL之间的异同 361 | 362 | ![ROM,PLA,PAL异同](./img/ROM-PLA-PAL异同.png) 363 | 364 | 其中,ROM与阵列固定,或阵列可编程;PLA与或阵列都可编程,但是却大大提升了编程难度,因此后来引申出了可编程阵列逻辑,与阵列可以编程,或阵列固定,进行私人定制。 365 | 366 | ROM的了解当给定了相应的与阵列逻辑之后,可以根据实际需要修改或阵列进行逻辑设计。 367 | 368 | ## Chapter Eight: 数字系统设计 369 | ### 数字系统基本模型 370 | 数字系统的基本模型主要由控制单元和逻辑处理单元两大部分构成。 371 | 372 | 如图所示: 373 | 374 | ![](./img/数字系统基本模型.png) 375 | 376 | 将上述图片进行了解深化即可。 377 | 378 | ### 数字系统的描述工具 379 | 控制系统在逻辑上可以划分为控制单元CU和逻辑处理单元。 380 | - 逻辑流程图 381 | 382 | 逻辑流程图就是以系统时钟来对程序进行的驱动。 383 | 384 | - 算法状态机图(ASM图)--Algorithmic State Machine 385 | 386 | 将逻辑流程图的逻辑表征进行具象化之后就得到了逻辑流程图。 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | -------------------------------------------------------------------------------- /DigitalLogic/数字逻辑考试时间规划.md: -------------------------------------------------------------------------------- 1 | 数字逻辑考试时间--2017年5月19日上午8.30--11.00 2 | 3 | 复习计划安排如下: 4 | 5 | |时间|事项|完成情况|备注| 6 | |---|---|---|---| 7 | |5月13日|完成数制与编码,逻辑代数基础以及组合电路的分析与设计的知识点整理与习题分析|完成|| 8 | |5月14日|同步、异步时序电路分析与设计(4,5,6章)知识点整理与试题分,并及时进行进度归纳|完成|| 9 | |5月15日白天|PLD,数字系统设计的相关概念了解,准备串讲|完成|| 10 | |5月15日晚上|进行数字逻辑的串讲,主要内容是前6章的内容梳理以及习题答疑|完成|| 11 | |5月16日|归纳整理所学的内容,进行完全性梳理|完成|| 12 | |5月17日|进行考前的细节答疑,并且重做部分经典题,手熟|完成|| 13 | |5月18日|查漏补缺,知识疑难进行强化|完成|| 14 | 15 | 考试计划顺利实施,最后需要完成的是知识点的进一步查漏补缺以及第78章内容的大致了解(看书)。希望考试题目偏难,而考试一切顺利!加油!100! 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /DigitalLogic/答疑暴露的问题.md: -------------------------------------------------------------------------------- 1 | 以下内容为周四答疑过程中暴露的问题,此处进行针对性地归纳整理: 2 | 3 | 1. 数制转换--BCD码的内涵。 4 | > BCD码是用四位二进制数表示十进制的一种代码形式,其与二进制码存在着较大差异,不能混为一谈。此外,余3码是在BCD码的基础之上将每个十进制数+0011得到的,此便为BCD码与余三码核心转换规则。 5 | 6 | 2. 卡诺图。 7 | > 画卡诺图一定要细致再细致,看着自己的作业题目,第二章好多都是粗心的锅,但是考场上一张卡诺图画错基本零分。 8 | 9 | 3. 任意码制转换的设计实现 10 | > 在进行任意码制转换的时候,采用的是将待转换码按照顺序形式进行排列,然后根据其有效片段进行添加。 11 | 12 | 4. 译码器相关电路的设计 13 | > 在进行译码器相关电路的设计过程中,采取的原则是在给定元件的基础之上保证结果的正确性,其设计并不要求达到最简形式。 14 | 15 | 5. 多路选择器。 16 | > 深入理解多路选择器的内涵,多路选择器是根据译码器的修改,其中将原先的原码序列A,B,C转变为了控制序列,然后将最低位进行数据的选择。也就是接到对应的C端。 17 | 18 | 6. 何为状态输出表 19 | > 状态输出表不一定含有输出Z,但是其需要具备现态,次态,可能含有输入,一般不需要将激励D给出。 20 | 21 | 其实张老师人挺好的,讲题的时候不拘一格,具有大师风范,同时也极其愿意牺牲自己的时间去为学生答疑,同时学生有些做得不恰当的地方也不计较。明日考试,必当全力以赴! 22 | 23 | 完成作业以及课本的所有内容。--2017-05-18-21-34 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /EmbeddedSystem/PartofAndroid/AndroidUI.md: -------------------------------------------------------------------------------- 1 | # Android用户界面框架 2 | Android用户界面使用的是MVC框架,也就是Model-View-Controller模型,Model是保存数据和代码的模型,View是显示用户界面和图像的视图,Controller是处理用户输入的控制器。 3 | 4 | # Android界面布局 5 | Android的界面布局可以分为多种形式,具体在考察Android时会侧重于怎样的方式? 6 | -------------------------------------------------------------------------------- /EmbeddedSystem/PartofAndroid/Android进程,生命周期与四大组件浅析.md: -------------------------------------------------------------------------------- 1 | # Android系统架构 2 | Android系统大致分为四层架构,分别为Linux内核层,系统运行库层,API应用程序接口层和应用层。 3 | 4 | # Android进程及其优先级 5 | Android进程可以有如下分类: 6 | 7 | - 高优先级 8 | 1. 前台进程 9 | - 中优先级 10 | 2. 可见进程 11 | 3. 服务进程 12 | - 低优先级 13 | 4. 后台进程 14 | 5. 空进程 15 | 16 | 其中前台进程是直接与用户进行交互的进程,其是用户完全可见的进程;而可见进程是用户部分可见的进程,服务进程是以没有用户界面在后台长期运行的进程;后台进程是指不包含任何服务,同时用户完全不可见的进程;空进程仅仅是一种**缓冲机制**? 17 | 18 | # Android四大组件 19 | - Activity: 与用户直接交互的界面 20 | - Service: 没有用户界面,需要在后台长期运行的界面 21 | - BroadcastReceiver: 用来接收或者响应广播消息的组件 22 | - ContentProvider: 用于应用程序间私有数据访问的组件 23 | 24 | 25 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/Include/uart_test.h: -------------------------------------------------------------------------------- 1 | #ifndef __uart_test_h__ 2 | #define __uart_test_h__ 3 | 4 | #include "2410addr.h" 5 | #include "2410lib.h" 6 | 7 | void uart1_test(void); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/2410lib.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/2410lib.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/2410lib.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\2410lib.o: ..\common\src\2410lib.c 2 | .\NOR FLASH\2410lib.o: D:\Keil\ARM\RV31\INC\stdarg.h 3 | .\NOR FLASH\2410lib.o: D:\Keil\ARM\RV31\INC\string.h 4 | .\NOR FLASH\2410lib.o: D:\Keil\ARM\RV31\INC\stdio.h 5 | .\NOR FLASH\2410lib.o: D:\Keil\ARM\RV31\INC\ctype.h 6 | .\NOR FLASH\2410lib.o: D:\Keil\ARM\RV31\INC\stdlib.h 7 | .\NOR FLASH\2410lib.o: ..\Common\Inc\2410lib.h 8 | .\NOR FLASH\2410lib.o: ..\Common\Inc\def.h 9 | .\NOR FLASH\2410lib.o: ..\Common\Inc\memcfg.h 10 | .\NOR FLASH\2410lib.o: ..\Common\Inc\option.h 11 | .\NOR FLASH\2410lib.o: ..\Common\Inc\register.h 12 | .\NOR FLASH\2410lib.o: ..\Common\Inc\2410addr.h 13 | .\NOR FLASH\2410lib.o: ..\Common\Inc\2410slib.h 14 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/UART_Test.axf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/UART_Test.axf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/UART_Test.lnp: -------------------------------------------------------------------------------- 1 | ".\nor flash\s3c2410a.o" ".\nor flash\main.o" ".\nor flash\uart_test.o" ".\nor flash\2410lib.o" ".\nor flash\sys_init.o" --device DARMSS9 --strict --scatter ".\NOR FLASH\UART_Test.sct" 2 | --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols 3 | --info sizes --info totals --info unused --info veneers 4 | --list ".\NOR FLASH\UART_Test.map" -o ".\NOR FLASH\UART_Test.axf" -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/UART_Test.plg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/UART_Test.plg -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/UART_Test.sct: -------------------------------------------------------------------------------- 1 | ; ************************************************************* 2 | ; *** Scatter-Loading Description File generated by uVision *** 3 | ; ************************************************************* 4 | 5 | LR_ROM1 0x00000000 0x00200000 { ; load region size_region 6 | ER_ROM1 0x00000000 0x00200000 { ; load address = execution address 7 | *.o (RESET, +First) 8 | *(InRoot$$Sections) 9 | .ANY (+RO) 10 | } 11 | RW_RAM1 0x30000000 0x04000000 { ; RW data 12 | .ANY (+RW +ZI) 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/UART_Test.tra: -------------------------------------------------------------------------------- 1 | *** Creating Trace Output File '.\NOR FLASH\UART_Test.tra' Ok. 2 | ### Preparing for ADS-LD. 3 | ### Creating ADS-LD Command Line 4 | ### List of Objects: adding '".\nor flash\s3c2410a.o"' 5 | ### List of Objects: adding '".\nor flash\main.o"' 6 | ### List of Objects: adding '".\nor flash\uart_test.o"' 7 | ### List of Objects: adding '".\nor flash\2410lib.o"' 8 | ### List of Objects: adding '".\nor flash\sys_init.o"' 9 | ### ADS-LD Command completed: 10 | ".\nor flash\s3c2410a.o" ".\nor flash\main.o" ".\nor flash\uart_test.o" ".\nor flash\2410lib.o" ".\nor flash\sys_init.o" --device DARMSS9 --strict --scatter ".\NOR FLASH\UART_Test.sct" 11 | --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols 12 | --info sizes --info totals --info unused --info veneers 13 | --list ".\NOR FLASH\UART_Test.map" -o ".\NOR FLASH\UART_Test.axf"### Preparing Environment (PrepEnvAds) 14 | ### ADS-LD Output File: '.\NOR FLASH\UART_Test.axf' 15 | ### ADS-LD Command File: '.\NOR FLASH\UART_Test.lnp' 16 | ### Checking for dirty Components... 17 | ### Creating CmdFile '.\NOR FLASH\UART_Test.lnp', Handle=0x000002C8 18 | ### Writing '.lnp' file 19 | ### ADS-LD Command file '.\NOR FLASH\UART_Test.lnp' is ready. 20 | ### ADS-LD: About to start ADS-LD Thread. 21 | ### ADS-LD: executed with 0 errors 22 | ### Updating obj list 23 | ### LDADS_file() completed. 24 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/main.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/main.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/main.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\main.o: Source\main.c 2 | .\NOR FLASH\main.o: .\Include\uart_test.h 3 | .\NOR FLASH\main.o: ..\Common\Inc\2410addr.h 4 | .\NOR FLASH\main.o: ..\Common\Inc\option.h 5 | .\NOR FLASH\main.o: ..\Common\Inc\2410lib.h 6 | .\NOR FLASH\main.o: ..\Common\Inc\def.h 7 | .\NOR FLASH\main.o: ..\Common\Inc\memcfg.h 8 | .\NOR FLASH\main.o: ..\Common\Inc\register.h 9 | .\NOR FLASH\main.o: ..\Common\Inc\sys_init.h 10 | .\NOR FLASH\main.o: ..\Common\Inc\2410lib.h 11 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/main.txt: -------------------------------------------------------------------------------- 1 | ; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision 2 | ; commandline ArmCC [--debug -c --asm --interleave -o".\NOR FLASH\main.o" --depend=".\NOR FLASH\main.d" --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -ID:\Keil\ARM\INC\Samsung --omf_browse=".\NOR FLASH\main.crf" Source\main.c] 3 | ARM 4 | 5 | AREA ||.text||, CODE, READONLY, ALIGN=2 6 | 7 | main PROC 8 | ;;;22 int main( ) 9 | ;;;23 { 10 | 000000 e92d4010 PUSH {r4,lr} 11 | ;;;24 sys_init(); // Initial s3c2410's Clock, Interrupt,Port and UART 12 | 000004 ebfffffe BL sys_init 13 | ;;;25 14 | ;;;26 while(1) 15 | 000008 ea000000 B |L1.16| 16 | |L1.12| 17 | ;;;27 { 18 | ;;;28 uart1_test(); 19 | 00000c ebfffffe BL uart1_test 20 | |L1.16| 21 | 000010 eafffffd B |L1.12| 22 | ;;;29 } 23 | ;;;30 } 24 | ENDP 25 | 26 | 27 | __ARM_use_no_argv EQU 0 28 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/sys_init.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/sys_init.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/sys_init.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\sys_init.o: ..\common\src\sys_init.c 2 | .\NOR FLASH\sys_init.o: D:\Keil\ARM\RV31\INC\stdarg.h 3 | .\NOR FLASH\sys_init.o: D:\Keil\ARM\RV31\INC\string.h 4 | .\NOR FLASH\sys_init.o: D:\Keil\ARM\RV31\INC\stdio.h 5 | .\NOR FLASH\sys_init.o: D:\Keil\ARM\RV31\INC\ctype.h 6 | .\NOR FLASH\sys_init.o: ..\Common\Inc\2410lib.h 7 | .\NOR FLASH\sys_init.o: ..\Common\Inc\def.h 8 | .\NOR FLASH\sys_init.o: ..\Common\Inc\memcfg.h 9 | .\NOR FLASH\sys_init.o: ..\Common\Inc\option.h 10 | .\NOR FLASH\sys_init.o: ..\Common\Inc\register.h 11 | .\NOR FLASH\sys_init.o: ..\Common\Inc\2410addr.h 12 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/sys_init.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/sys_init.txt -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/uart_test.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/uart_test.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/uart_test.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\uart_test.o: Source\uart_test.c 2 | .\NOR FLASH\uart_test.o: .\Include\uart_test.h 3 | .\NOR FLASH\uart_test.o: ..\Common\Inc\2410addr.h 4 | .\NOR FLASH\uart_test.o: ..\Common\Inc\option.h 5 | .\NOR FLASH\uart_test.o: ..\Common\Inc\2410lib.h 6 | .\NOR FLASH\uart_test.o: ..\Common\Inc\def.h 7 | .\NOR FLASH\uart_test.o: ..\Common\Inc\memcfg.h 8 | .\NOR FLASH\uart_test.o: ..\Common\Inc\register.h 9 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/NOR FLASH/uart_test.txt: -------------------------------------------------------------------------------- 1 | ; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision 2 | ; commandline ArmCC [--debug -c --asm --interleave -o".\NOR FLASH\uart_test.o" --depend=".\NOR FLASH\uart_test.d" --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -ID:\Keil\ARM\INC\Samsung --omf_browse=".\NOR FLASH\uart_test.crf" Source\uart_test.c] 3 | ARM 4 | 5 | AREA ||.text||, CODE, READONLY, ALIGN=2 6 | 7 | uart1_test PROC 8 | ;;;20 void uart1_test(void) 9 | ;;;21 { 10 | 000000 e92d4070 PUSH {r4-r6,lr} 11 | 000004 e24ddc01 SUB sp,sp,#0x100 12 | ;;;22 char cInput[256]; 13 | ;;;23 UINT8T ucInNo=0; 14 | 000008 e3a04000 MOV r4,#0 15 | ;;;24 UINT32T g_nKeyPress; 16 | ;;;25 char c; 17 | ;;;26 uart_printf("\n UART1 Communication Test Example\n"); 18 | 00000c e28f0098 ADR r0,|L1.172| 19 | 000010 ebfffffe BL uart_printf 20 | ;;;27 uart_printf(" Please input words, then press Enter:\n"); 21 | 000014 e28f00b4 ADR r0,|L1.208| 22 | 000018 ebfffffe BL uart_printf 23 | ;;;28 uart_printf(" />"); 24 | 00001c e28f00d4 ADR r0,|L1.248| 25 | 000020 ebfffffe BL uart_printf 26 | ;;;29 uart_printf(" "); 27 | 000024 e28f00d0 ADR r0,|L1.252| 28 | 000028 ebfffffe BL uart_printf 29 | ;;;30 g_nKeyPress = 1; 30 | 00002c e3a06001 MOV r6,#1 31 | ;;;31 while(g_nKeyPress==1) // only for board test to exit 32 | 000030 ea000010 B |L1.120| 33 | |L1.52| 34 | ;;;32 { 35 | ;;;33 c=uart_getch(); 36 | 000034 ebfffffe BL uart_getch 37 | 000038 e1a05000 MOV r5,r0 38 | ;;;34 39 | ;;;35 uart_printf("%c",c); 40 | 00003c e1a01005 MOV r1,r5 41 | 000040 e28f00b8 ADR r0,|L1.256| 42 | 000044 ebfffffe BL uart_printf 43 | ;;;36 if(c!='\r') 44 | 000048 e355000d CMP r5,#0xd 45 | 00004c 0a000005 BEQ |L1.104| 46 | ;;;37 cInput[ucInNo++]=c; 47 | 000050 e1a00004 MOV r0,r4 48 | 000054 e2841001 ADD r1,r4,#1 49 | 000058 e20140ff AND r4,r1,#0xff 50 | 00005c e28d1000 ADD r1,sp,#0 51 | 000060 e7c15000 STRB r5,[r1,r0] 52 | 000064 ea000003 B |L1.120| 53 | |L1.104| 54 | ;;;38 else 55 | ;;;39 { 56 | ;;;40 cInput[ucInNo]='\0'; 57 | 000068 e3a00000 MOV r0,#0 58 | 00006c e28d1000 ADD r1,sp,#0 59 | 000070 e7c10004 STRB r0,[r1,r4] 60 | ;;;41 break; 61 | 000074 ea000001 B |L1.128| 62 | |L1.120| 63 | 000078 e3560001 CMP r6,#1 ;31 64 | 00007c 0affffec BEQ |L1.52| 65 | |L1.128| 66 | 000080 e1a00000 MOV r0,r0 67 | ;;;42 } 68 | ;;;43 } 69 | ;;;44 delay(1000); 70 | 000084 e3a00ffa MOV r0,#0x3e8 71 | 000088 ebfffffe BL delay 72 | ;;;45 73 | ;;;46 uart_printf("\n The words that you input are: %s\n",cInput); 74 | 00008c e28d1000 ADD r1,sp,#0 75 | 000090 e28f006c ADR r0,|L1.260| 76 | 000094 ebfffffe BL uart_printf 77 | ;;;47 uart_printf(" End.\n"); 78 | 000098 e28f0088 ADR r0,|L1.296| 79 | 00009c ebfffffe BL uart_printf 80 | ;;;48 } 81 | 0000a0 e28ddc01 ADD sp,sp,#0x100 82 | 0000a4 e8bd4070 POP {r4-r6,lr} 83 | 0000a8 e12fff1e BX lr 84 | ENDP 85 | 86 | |L1.172| 87 | 0000ac 0a20554152543120436f6d6d756e69636174696f6e2054657374204578616d706c650a00 DCB "\n UART1 Communication Test Example\n",0 88 | |L1.208| 89 | 0000d0 20506c6561736520696e70757420776f7264732c207468656e20707265737320456e7465723a0a00 DCB " Please input words, then press Enter:\n",0 90 | |L1.248| 91 | 0000f8 202f3e00 DCB " />",0 92 | |L1.252| 93 | 0000fc 2000 DCB " ",0 94 | 0000fe 00 DCB 0 95 | 0000ff 00 DCB 0 96 | |L1.256| 97 | 000100 256300 DCB "%c",0 98 | 000103 00 DCB 0 99 | |L1.260| 100 | 000104 0a2054686520776f726473207468617420796f7520696e707574206172653a2025730a00 DCB "\n The words that you input are: %s\n",0 101 | |L1.296| 102 | 000128 20456e642e0a00 DCB " End.\n",0 103 | 00012f 00 DCB 0 104 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM.ini: -------------------------------------------------------------------------------- 1 | /******************************************************************************/ 2 | /* Ext_RAM.INI: External RAM (SDRAM) Initialization File */ 3 | /******************************************************************************/ 4 | // <<< Use Configuration Wizard in Context Menu >>> // 5 | /******************************************************************************/ 6 | /* This file is part of the uVision/ARM development tools. */ 7 | /* Copyright (c) 2005-2006 Keil Software. All rights reserved. */ 8 | /* This software may only be used under the terms of a valid, current, */ 9 | /* end user licence from KEIL for a compatible version of KEIL software */ 10 | /* development tools. Nothing else gives you the right to use this software. */ 11 | /******************************************************************************/ 12 | 13 | 14 | FUNC void Setup (void) { 15 | 16 | _WDWORD(0x53000000, 0x00000000); 17 | 18 | _WDWORD(0x4A000008, 0xFFFFFFFF); 19 | _WDWORD(0x4A00001C, 0x000007FF); 20 | 21 | _WDWORD(0x4C000014, 0x00000003); 22 | _WDWORD(0x4C000004, 0x0005c042); 23 | 24 | _WDWORD(0x56000070, 0x00280000); 25 | _WDWORD(0x56000078, 0x00000000); 26 | 27 | _WDWORD(0x48000000, 0x22111110); 28 | _WDWORD(0x48000004, 0x00000700); 29 | _WDWORD(0x48000008, 0x00000700); 30 | _WDWORD(0x4800000C, 0x00000700); 31 | _WDWORD(0x48000010, 0x00000700); 32 | _WDWORD(0x48000014, 0x00000700); 33 | _WDWORD(0x48000018, 0x00000700); 34 | _WDWORD(0x4800001c, 0x00018005); 35 | _WDWORD(0x48000020, 0x00000700); 36 | _WDWORD(0x48000024, 0x008e0459); 37 | _WDWORD(0x48000028, 0x000000B2); 38 | _WDWORD(0x4800002c, 0x00000030); 39 | _WDWORD(0x48000030, 0x00000030); 40 | 41 | _WDWORD(0x56000014, 0x00000001); 42 | 43 | _WDWORD(0x56000020, 0xAAAA55AA); 44 | _WDWORD(0x56000028, 0x0000FFFF); 45 | _WDWORD(0x56000024, 0x00000000); 46 | 47 | } 48 | 49 | Setup(); // Setup for Init 50 | 51 | LOAD SDRAM\Uart_Test.axf INCREMENTAL // Download 52 | 53 | PC = 0x30000000; // Program Entry Point 54 | 55 | g, main // Run to main function 56 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/2410lib.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/2410lib.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/2410lib.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\2410lib.o: ..\common\src\2410lib.c 2 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\stdarg.h 3 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\string.h 4 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\stdio.h 5 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\ctype.h 6 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\stdlib.h 7 | .\SDRAM\2410lib.o: ..\Common\Inc\2410lib.h 8 | .\SDRAM\2410lib.o: ..\Common\Inc\def.h 9 | .\SDRAM\2410lib.o: ..\Common\Inc\memcfg.h 10 | .\SDRAM\2410lib.o: ..\Common\Inc\option.h 11 | .\SDRAM\2410lib.o: ..\Common\Inc\register.h 12 | .\SDRAM\2410lib.o: ..\Common\Inc\2410addr.h 13 | .\SDRAM\2410lib.o: ..\Common\Inc\2410slib.h 14 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/ExtDll.iex: -------------------------------------------------------------------------------- 1 | [EXTDLL] 2 | Count=0 3 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/UART_Test.axf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/UART_Test.axf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/UART_Test.lnp: -------------------------------------------------------------------------------- 1 | ".\sdram\s3c2410a.o" ".\sdram\main.o" ".\sdram\uart_test.o" ".\sdram\2410lib.o" ".\sdram\sys_init.o" --device DARMSS9 --strict --scatter ".\SDRAM\UART_Test.sct" 2 | --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols 3 | --info sizes --info totals --info unused --info veneers 4 | --list ".\SDRAM\UART_Test.map" -o ".\SDRAM\UART_Test.axf" -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/UART_Test.plg: -------------------------------------------------------------------------------- 1 | Build target 'UART_Test IN RAM' 2 | assembling S3C2410A.s... 3 | S3C2410A.s(989): warning: A1786W: This instruction using SP is deprecated in ARMv7 4 | compiling main.c... 5 | compiling uart_test.c... 6 | compiling 2410lib.c... 7 | compiling sys_init.c... 8 | linking... 9 | Program Size: Code=16040 RO-data=612 RW-data=16 ZI-data=59488 10 | ".\SDRAM\UART_Test.axf" - 0 Error(s), 1 Warning(s). 11 | Build target 'UART_Test IN RAM' 12 | assembling S3C2410A.s... 13 | S3C2410A.s(989): warning: A1786W: This instruction using SP is deprecated in ARMv7 14 | compiling main.c... 15 | compiling uart_test.c... 16 | compiling 2410lib.c... 17 | compiling sys_init.c... 18 | linking... 19 | Program Size: Code=16040 RO-data=612 RW-data=16 ZI-data=59488 20 | ".\SDRAM\UART_Test.axf" - 0 Error(s), 1 Warning(s). 21 | Build target 'UART_Test IN RAM' 22 | assembling S3C2410A.s... 23 | S3C2410A.s(989): warning: A1786W: This instruction using SP is deprecated in ARMv7 24 | compiling main.c... 25 | compiling uart_test.c... 26 | compiling 2410lib.c... 27 | compiling sys_init.c... 28 | linking... 29 | Program Size: Code=16040 RO-data=612 RW-data=16 ZI-data=59488 30 | ".\SDRAM\UART_Test.axf" - 0 Error(s), 1 Warning(s). 31 | Build target 'UART_Test IN RAM' 32 | assembling S3C2410A.s... 33 | S3C2410A.s(989): warning: A1786W: This instruction using SP is deprecated in ARMv7 34 | compiling main.c... 35 | compiling uart_test.c... 36 | compiling 2410lib.c... 37 | compiling sys_init.c... 38 | linking... 39 | Program Size: Code=16040 RO-data=612 RW-data=16 ZI-data=59488 40 | ".\SDRAM\UART_Test.axf" - 0 Error(s), 1 Warning(s). 41 | Build target 'UART_Test IN RAM' 42 | assembling S3C2410A.s... 43 | S3C2410A.s(989): warning: A1786W: This instruction using SP is deprecated in ARMv7 44 | compiling main.c... 45 | compiling uart_test.c... 46 | compiling 2410lib.c... 47 | compiling sys_init.c... 48 | linking... 49 | Program Size: Code=16040 RO-data=612 RW-data=16 ZI-data=59488 50 | ".\SDRAM\UART_Test.axf" - 0 Error(s), 1 Warning(s). 51 | Build target 'UART_Test IN RAM' 52 | assembling S3C2410A.s... 53 | S3C2410A.s(989): warning: A1786W: This instruction using SP is deprecated in ARMv7 54 | compiling main.c... 55 | compiling uart_test.c... 56 | compiling 2410lib.c... 57 | compiling sys_init.c... 58 | linking... 59 | Program Size: Code=16040 RO-data=612 RW-data=16 ZI-data=59488 60 | ".\SDRAM\UART_Test.axf" - 0 Error(s), 1 Warning(s). 61 | Build target 'UART_Test IN RAM' 62 | assembling S3C2410A.s... 63 | S3C2410A.s(989): warning: A1786W: This instruction using SP is deprecated in ARMv7 64 | compiling main.c... 65 | compiling uart_test.c... 66 | compiling 2410lib.c... 67 | compiling sys_init.c... 68 | linking... 69 | Program Size: Code=16024 RO-data=612 RW-data=16 ZI-data=59488 70 | ".\SDRAM\UART_Test.axf" - 0 Error(s), 1 Warning(s). 71 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/UART_Test.sct: -------------------------------------------------------------------------------- 1 | ; ************************************************************* 2 | ; *** Scatter-Loading Description File generated by uVision *** 3 | ; ************************************************************* 4 | 5 | LR_ROM1 0x30000000 0x00010000 { ; load region size_region 6 | ER_ROM1 0x30000000 0x00010000 { ; load address = execution address 7 | *.o (RESET, +First) 8 | *(InRoot$$Sections) 9 | .ANY (+RO) 10 | } 11 | RW_RAM1 0x30010000 0x01000000 { ; RW data 12 | .ANY (+RW +ZI) 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/UART_Test.tra: -------------------------------------------------------------------------------- 1 | *** Creating Trace Output File '.\SDRAM\UART_Test.tra' Ok. 2 | ### Preparing for ADS-LD. 3 | ### Creating ADS-LD Command Line 4 | ### List of Objects: adding '".\sdram\s3c2410a.o"' 5 | ### List of Objects: adding '".\sdram\main.o"' 6 | ### List of Objects: adding '".\sdram\uart_test.o"' 7 | ### List of Objects: adding '".\sdram\2410lib.o"' 8 | ### List of Objects: adding '".\sdram\sys_init.o"' 9 | ### ADS-LD Command completed: 10 | ".\sdram\s3c2410a.o" ".\sdram\main.o" ".\sdram\uart_test.o" ".\sdram\2410lib.o" ".\sdram\sys_init.o" --device DARMSS9 --strict --scatter ".\SDRAM\UART_Test.sct" 11 | --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols 12 | --info sizes --info totals --info unused --info veneers 13 | --list ".\SDRAM\UART_Test.map" -o ".\SDRAM\UART_Test.axf"### Preparing Environment (PrepEnvAds) 14 | ### ADS-LD Output File: '.\SDRAM\UART_Test.axf' 15 | ### ADS-LD Command File: '.\SDRAM\UART_Test.lnp' 16 | ### Checking for dirty Components... 17 | ### Creating CmdFile '.\SDRAM\UART_Test.lnp', Handle=0x000002BC 18 | ### Writing '.lnp' file 19 | ### ADS-LD Command file '.\SDRAM\UART_Test.lnp' is ready. 20 | ### ADS-LD: About to start ADS-LD Thread. 21 | ### ADS-LD: executed with 0 errors 22 | ### Updating obj list 23 | ### LDADS_file() completed. 24 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/main.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/main.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/main.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\main.o: Source\main.c 2 | .\SDRAM\main.o: .\Include\uart_test.h 3 | .\SDRAM\main.o: ..\Common\Inc\2410addr.h 4 | .\SDRAM\main.o: ..\Common\Inc\option.h 5 | .\SDRAM\main.o: ..\Common\Inc\2410lib.h 6 | .\SDRAM\main.o: ..\Common\Inc\def.h 7 | .\SDRAM\main.o: ..\Common\Inc\memcfg.h 8 | .\SDRAM\main.o: ..\Common\Inc\register.h 9 | .\SDRAM\main.o: ..\Common\Inc\sys_init.h 10 | .\SDRAM\main.o: ..\Common\Inc\2410lib.h 11 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/main.txt: -------------------------------------------------------------------------------- 1 | ; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision 2 | ; commandline ArmCC [--debug -c --asm --interleave -o.\SDRAM\main.o --depend=.\SDRAM\main.d --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -ID:\Keil\ARM\INC\Samsung --omf_browse=.\SDRAM\main.crf Source\main.c] 3 | ARM 4 | 5 | AREA ||.text||, CODE, READONLY, ALIGN=2 6 | 7 | main PROC 8 | ;;;22 int main( ) 9 | ;;;23 { 10 | 000000 e92d4010 PUSH {r4,lr} 11 | ;;;24 sys_init(); // Initial s3c2410's Clock, Interrupt,Port and UART 12 | 000004 ebfffffe BL sys_init 13 | ;;;25 14 | ;;;26 while(1) 15 | 000008 ea000000 B |L1.16| 16 | |L1.12| 17 | ;;;27 { 18 | ;;;28 uart1_test(); 19 | 00000c ebfffffe BL uart1_test 20 | |L1.16| 21 | 000010 eafffffd B |L1.12| 22 | ;;;29 } 23 | ;;;30 } 24 | ENDP 25 | 26 | 27 | __ARM_use_no_argv EQU 0 28 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/sys_init.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/sys_init.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/sys_init.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\sys_init.o: ..\common\src\sys_init.c 2 | .\SDRAM\sys_init.o: D:\Keil\ARM\RV31\INC\stdarg.h 3 | .\SDRAM\sys_init.o: D:\Keil\ARM\RV31\INC\string.h 4 | .\SDRAM\sys_init.o: D:\Keil\ARM\RV31\INC\stdio.h 5 | .\SDRAM\sys_init.o: D:\Keil\ARM\RV31\INC\ctype.h 6 | .\SDRAM\sys_init.o: ..\Common\Inc\2410lib.h 7 | .\SDRAM\sys_init.o: ..\Common\Inc\def.h 8 | .\SDRAM\sys_init.o: ..\Common\Inc\memcfg.h 9 | .\SDRAM\sys_init.o: ..\Common\Inc\option.h 10 | .\SDRAM\sys_init.o: ..\Common\Inc\register.h 11 | .\SDRAM\sys_init.o: ..\Common\Inc\2410addr.h 12 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/sys_init.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/sys_init.txt -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/uart_test.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/uart_test.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/uart_test.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\uart_test.o: Source\uart_test.c 2 | .\SDRAM\uart_test.o: .\Include\uart_test.h 3 | .\SDRAM\uart_test.o: ..\Common\Inc\2410addr.h 4 | .\SDRAM\uart_test.o: ..\Common\Inc\option.h 5 | .\SDRAM\uart_test.o: ..\Common\Inc\2410lib.h 6 | .\SDRAM\uart_test.o: ..\Common\Inc\def.h 7 | .\SDRAM\uart_test.o: ..\Common\Inc\memcfg.h 8 | .\SDRAM\uart_test.o: ..\Common\Inc\register.h 9 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/SDRAM/uart_test.txt: -------------------------------------------------------------------------------- 1 | ; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision 2 | ; commandline ArmCC [--debug -c --asm --interleave -o.\SDRAM\uart_test.o --depend=.\SDRAM\uart_test.d --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -ID:\Keil\ARM\INC\Samsung --omf_browse=.\SDRAM\uart_test.crf Source\uart_test.c] 3 | ARM 4 | 5 | AREA ||.text||, CODE, READONLY, ALIGN=2 6 | 7 | uart1_test PROC 8 | ;;;20 void uart1_test(void) 9 | ;;;21 { 10 | 000000 e92d4070 PUSH {r4-r6,lr} 11 | 000004 e24ddc01 SUB sp,sp,#0x100 12 | ;;;22 char cInput[256]; 13 | ;;;23 UINT8T ucInNo=0; 14 | 000008 e3a04000 MOV r4,#0 15 | ;;;24 UINT32T g_nKeyPress; 16 | ;;;25 char c; 17 | ;;;26 uart_printf("\n UART1 Communication Test Example\n"); 18 | 00000c e28f008c ADR r0,|L1.160| 19 | 000010 ebfffffe BL uart_printf 20 | ;;;27 uart_printf(" Please input words, then press Enter:\n"); 21 | 000014 e28f00a8 ADR r0,|L1.196| 22 | 000018 ebfffffe BL uart_printf 23 | ;;;28 uart_printf(" />"); 24 | 00001c e28f00c8 ADR r0,|L1.236| 25 | 000020 ebfffffe BL uart_printf 26 | ;;;29 uart_printf(" "); 27 | 000024 e28f00c4 ADR r0,|L1.240| 28 | 000028 ebfffffe BL uart_printf 29 | ;;;30 g_nKeyPress = 1; 30 | 00002c e3a06001 MOV r6,#1 31 | ;;;31 while(g_nKeyPress==1) // only for board test to exit 32 | 000030 ea00000d B |L1.108| 33 | |L1.52| 34 | ;;;32 { 35 | ;;;33 c=uart_getch(); 36 | 000034 ebfffffe BL uart_getch 37 | 000038 e1a05000 MOV r5,r0 38 | ;;;34 39 | ;;;35 //uart_printf("%c",c); 40 | ;;;36 if(c!='\n') 41 | 00003c e355000a CMP r5,#0xa 42 | 000040 0a000005 BEQ |L1.92| 43 | ;;;37 cInput[ucInNo++]=c; 44 | 000044 e1a00004 MOV r0,r4 45 | 000048 e2841001 ADD r1,r4,#1 46 | 00004c e20140ff AND r4,r1,#0xff 47 | 000050 e28d1000 ADD r1,sp,#0 48 | 000054 e7c15000 STRB r5,[r1,r0] 49 | 000058 ea000003 B |L1.108| 50 | |L1.92| 51 | ;;;38 else 52 | ;;;39 { 53 | ;;;40 cInput[ucInNo]='\0'; 54 | 00005c e3a00000 MOV r0,#0 55 | 000060 e28d1000 ADD r1,sp,#0 56 | 000064 e7c10004 STRB r0,[r1,r4] 57 | ;;;41 break; 58 | 000068 ea000001 B |L1.116| 59 | |L1.108| 60 | 00006c e3560001 CMP r6,#1 ;31 61 | 000070 0affffef BEQ |L1.52| 62 | |L1.116| 63 | 000074 e1a00000 MOV r0,r0 64 | ;;;42 } 65 | ;;;43 } 66 | ;;;44 delay(1000); 67 | 000078 e3a00ffa MOV r0,#0x3e8 68 | 00007c ebfffffe BL delay 69 | ;;;45 70 | ;;;46 uart_printf("\n The words that you input are: %s\n",cInput); 71 | 000080 e28d1000 ADD r1,sp,#0 72 | 000084 e28f0068 ADR r0,|L1.244| 73 | 000088 ebfffffe BL uart_printf 74 | ;;;47 uart_printf(" End.\n"); 75 | 00008c e28f0084 ADR r0,|L1.280| 76 | 000090 ebfffffe BL uart_printf 77 | ;;;48 } 78 | 000094 e28ddc01 ADD sp,sp,#0x100 79 | 000098 e8bd4070 POP {r4-r6,lr} 80 | 00009c e12fff1e BX lr 81 | ENDP 82 | 83 | |L1.160| 84 | 0000a0 0a20554152543120436f6d6d756e69636174696f6e2054657374204578616d706c650a00 DCB "\n UART1 Communication Test Example\n",0 85 | |L1.196| 86 | 0000c4 20506c6561736520696e70757420776f7264732c207468656e20707265737320456e7465723a0a00 DCB " Please input words, then press Enter:\n",0 87 | |L1.236| 88 | 0000ec 202f3e00 DCB " />",0 89 | |L1.240| 90 | 0000f0 2000 DCB " ",0 91 | 0000f2 00 DCB 0 92 | 0000f3 00 DCB 0 93 | |L1.244| 94 | 0000f4 0a2054686520776f726473207468617420796f7520696e707574206172653a2025730a00 DCB "\n The words that you input are: %s\n",0 95 | |L1.280| 96 | 000118 20456e642e0a00 DCB " End.\n",0 97 | 00011f 00 DCB 0 98 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/Source/main.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/Source/main.c -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/Source/uart_test.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/Source/uart_test.c -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/UART_Test.Opt: -------------------------------------------------------------------------------- 1 | ### uVision2 Project, (C) Keil Software 2 | ### Do not modify ! 3 | 4 | cExt (*.c) 5 | aExt (*.s*; *.src; *.a*) 6 | oExt (*.obj) 7 | lExt (*.lib) 8 | tExt (*.txt; *.h; *.inc) 9 | pExt (*.plm) 10 | CppX (*.cpp) 11 | DaveTm { 0,0,0,0,0,0,0,0 } 12 | 13 | Target (UART_Test IN RAM), 0x0004 // Tools: 'ARM-ADS' 14 | Target (UART_Test IN FLASH), 0x0004 // Tools: 'ARM-ADS' 15 | GRPOPT 1,(Startup),0,0,0 16 | GRPOPT 2,(Source),1,0,0 17 | GRPOPT 3,(Common),0,0,0 18 | GRPOPT 4,(IniFile),0,0,0 19 | GRPOPT 5,(ReadMe),1,0,0 20 | 21 | OPTFFF 1,1,2,83886080,0,0,0,0,<.\S3C2410A.s> 22 | OPTFFF 2,2,1,0,0,10,10,0,<.\Source\main.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,44,0,0,0,58,0,0,0,183,3,0,0,69,1,0,0 } 23 | OPTFFF 2,3,1,2,0,28,28,0,<.\Source\uart_test.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,161,3,0,0,40,1,0,0 } 24 | OPTFFF 3,4,1,0,0,0,0,0,<..\common\src\2410lib.c><2410lib.c> 25 | OPTFFF 3,5,1,385875968,0,0,0,0,<..\common\src\sys_init.c> 26 | OPTFFF 4,6,5,0,0,0,0,0,<.\SDRAM.ini> 27 | OPTFFF 5,7,5,0,0,1,13,0,<.\readme.txt> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,0,0,0,0,0,0,0,0,135,3,0,0,10,1,0,0 } 28 | 29 | 30 | TARGOPT 1, (UART_Test IN RAM) 31 | ADSCLK=12000000 32 | OPTTT 1,1,1,0 33 | OPTHX 1,65535,0,0,0 34 | OPTLX 79,66,8,<.\SDRAM\> 35 | OPTOX 16 36 | OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 37 | OPTXL 1,1,1,1,1,1,1,0,0 38 | OPTFL 1,0,0 39 | OPTAX 0 40 | OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2410A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2410A) 41 | OPTDBG 48638,0,()()()()()()()()()(.\SDRAM.ini) (BIN\UL2ARM.DLL)()()() 42 | OPTKEY 0,(DLGTARM)((113=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(103=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(108=-1,-1,-1,-1,0)(109=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)) 43 | OPTKEY 0,(ARMDBGFLAGS)() 44 | OPTKEY 0,(UL2ARM)(-UV0028B9E -O14 -S0 -C0 -N00("ARM920T Core") -D00(0032409D) -L00(4) -FO7 -FD40000000 -FC800 -FN0) 45 | OPTDF 0x80 46 | OPTLE <> 47 | OPTLC <> 48 | EndOpt 49 | 50 | TARGOPT 2, (UART_Test IN FLASH) 51 | ADSCLK=12000000 52 | OPTTT 1,1,1,0 53 | OPTHX 1,65535,0,0,0 54 | OPTLX 79,66,8,<.\NOR FLASH\> 55 | OPTOX 16 56 | OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 57 | OPTXL 1,1,1,1,1,1,1,0,0 58 | OPTFL 1,0,1 59 | OPTAX 0 60 | OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2410A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2410A) 61 | OPTDBG 49150,0,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() 62 | OPTKEY 0,(UL2ARM)(-U-O14 -O14 -S0 -C-1 -FO7 -FD40000000 -FC800 -FN1 -FF0AM29F160DB -FS00 -FL0200000) 63 | OPTDF 0x0 64 | OPTLE <> 65 | OPTLC <> 66 | EndOpt 67 | 68 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/UART_Test.Uv2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/UART_Test.Uv2 -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/UART_Test_Opt.Bak: -------------------------------------------------------------------------------- 1 | ### uVision2 Project, (C) Keil Software 2 | ### Do not modify ! 3 | 4 | cExt (*.c) 5 | aExt (*.s*; *.src; *.a*) 6 | oExt (*.obj) 7 | lExt (*.lib) 8 | tExt (*.txt; *.h; *.inc) 9 | pExt (*.plm) 10 | CppX (*.cpp) 11 | DaveTm { 0,0,0,0,0,0,0,0 } 12 | 13 | Target (UART_Test IN RAM), 0x0004 // Tools: 'ARM-ADS' 14 | Target (UART_Test IN FLASH), 0x0004 // Tools: 'ARM-ADS' 15 | GRPOPT 1,(Startup),0,0,0 16 | GRPOPT 2,(Source),0,0,0 17 | GRPOPT 3,(Common),0,0,0 18 | GRPOPT 4,(IniFile),0,0,0 19 | GRPOPT 5,(ReadMe),1,0,0 20 | 21 | OPTFFF 1,1,2,83886080,0,0,0,0,<.\S3C2410A.s> 22 | OPTFFF 2,2,1,16777216,0,0,0,0,<.\Source\main.c> 23 | OPTFFF 2,3,1,285212672,0,0,0,0,<.\Source\uart_test.c> 24 | OPTFFF 3,4,1,0,0,0,0,0,<..\common\src\2410lib.c><2410lib.c> 25 | OPTFFF 3,5,1,385875968,0,0,0,0,<..\common\src\sys_init.c> 26 | OPTFFF 4,6,5,0,0,0,0,0,<.\SDRAM.ini> 27 | OPTFFF 5,7,5,469762048,0,0,0,0,<.\readme.txt> 28 | 29 | 30 | TARGOPT 1, (UART_Test IN RAM) 31 | ADSCLK=12000000 32 | OPTTT 1,1,1,0 33 | OPTHX 1,65535,0,0,0 34 | OPTLX 79,66,8,<.\SDRAM\> 35 | OPTOX 16 36 | OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 37 | OPTXL 1,1,1,1,1,1,1,0,0 38 | OPTFL 1,0,0 39 | OPTAX 0 40 | OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2410A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2410A) 41 | OPTDBG 48638,0,()()()()()()()()()(.\SDRAM.ini) (BIN\UL2ARM.DLL)()()() 42 | OPTKEY 0,(DLGTARM)((113=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(103=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(108=-1,-1,-1,-1,0)(109=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)) 43 | OPTKEY 0,(ARMDBGFLAGS)() 44 | OPTKEY 0,(UL2ARM)(-UV0028B9E -O14 -S0 -C0 -N00("ARM920T Core") -D00(0032409D) -L00(4) -FO7 -FD40000000 -FC800 -FN0) 45 | OPTDF 0x80 46 | OPTLE <> 47 | OPTLC <> 48 | EndOpt 49 | 50 | TARGOPT 2, (UART_Test IN FLASH) 51 | ADSCLK=12000000 52 | OPTTT 1,1,1,0 53 | OPTHX 1,65535,0,0,0 54 | OPTLX 79,66,8,<.\NOR FLASH\> 55 | OPTOX 16 56 | OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 57 | OPTXL 1,1,1,1,1,1,1,0,0 58 | OPTFL 1,0,1 59 | OPTAX 0 60 | OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2410A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2410A) 61 | OPTDBG 49150,0,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() 62 | OPTKEY 0,(UL2ARM)(-U-O14 -O14 -S0 -C-1 -FO7 -FD40000000 -FC800 -FN1 -FF0AM29F160DB -FS00 -FL0200000) 63 | OPTDF 0x0 64 | OPTLE <> 65 | OPTLC <> 66 | EndOpt 67 | 68 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/UART_Test_UART_Test IN FLASH.dep: -------------------------------------------------------------------------------- 1 | Dependencies for Project 'UART_Test', Target 'UART_Test IN FLASH': (DO NOT MODIFY !) 2 | F (.\S3C2410A.s)(0x49B22192)(--device DARMSS9 -g --apcs=interwork -I "D:\Keil\ARM\INC\Samsung" --list ".\NOR FLASH\S3C2410A.lst" --xref -o ".\NOR FLASH\S3C2410A.o") 3 | F (.\Source\main.c)(0x49B221F0)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\main.o" --omf_browse ".\NOR FLASH\main.crf" --depend ".\NOR FLASH\main.d") 4 | I (.\Include\uart_test.h)(0x48473C54) 5 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 6 | I (..\Common\Inc\option.h)(0x49B21E32) 7 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 8 | I (..\Common\Inc\def.h)(0x49B21E1E) 9 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 10 | I (..\Common\Inc\register.h)(0x49B21E3A) 11 | I (..\Common\Inc\sys_init.h)(0x48609ECE) 12 | F (.\Source\uart_test.c)(0x49B221DA)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\uart_test.o" --omf_browse ".\NOR FLASH\uart_test.crf" --depend ".\NOR FLASH\uart_test.d") 13 | I (.\Include\uart_test.h)(0x48473C54) 14 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 15 | I (..\Common\Inc\option.h)(0x49B21E32) 16 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 17 | I (..\Common\Inc\def.h)(0x49B21E1E) 18 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 19 | I (..\Common\Inc\register.h)(0x49B21E3A) 20 | F (..\common\src\2410lib.c)(0x4A485B5A)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\2410lib.o" --omf_browse ".\NOR FLASH\2410lib.crf" --depend ".\NOR FLASH\2410lib.d") 21 | I (D:\Keil\ARM\RV31\INC\stdarg.h)(0x491094EC) 22 | I (D:\Keil\ARM\RV31\INC\string.h)(0x491094EC) 23 | I (D:\Keil\ARM\RV31\INC\stdio.h)(0x491094EC) 24 | I (D:\Keil\ARM\RV31\INC\ctype.h)(0x491094EA) 25 | I (D:\Keil\ARM\RV31\INC\stdlib.h)(0x491094EC) 26 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 27 | I (..\Common\Inc\def.h)(0x49B21E1E) 28 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 29 | I (..\Common\Inc\option.h)(0x49B21E32) 30 | I (..\Common\Inc\register.h)(0x49B21E3A) 31 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 32 | I (..\Common\Inc\2410slib.h)(0x49B21E4C) 33 | F (..\common\src\sys_init.c)(0x4C9D6CFF)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\sys_init.o" --omf_browse ".\NOR FLASH\sys_init.crf" --depend ".\NOR FLASH\sys_init.d") 34 | I (D:\Keil\ARM\RV31\INC\stdarg.h)(0x491094EC) 35 | I (D:\Keil\ARM\RV31\INC\string.h)(0x491094EC) 36 | I (D:\Keil\ARM\RV31\INC\stdio.h)(0x491094EC) 37 | I (D:\Keil\ARM\RV31\INC\ctype.h)(0x491094EA) 38 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 39 | I (..\Common\Inc\def.h)(0x49B21E1E) 40 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 41 | I (..\Common\Inc\option.h)(0x49B21E32) 42 | I (..\Common\Inc\register.h)(0x49B21E3A) 43 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 44 | F (.\SDRAM.ini)(0x484771F8)() 45 | F (.\readme.txt)(0x4C9D6BF6)() 46 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/UART_Test_UART_Test IN RAM.dep: -------------------------------------------------------------------------------- 1 | Dependencies for Project 'UART_Test', Target 'UART_Test IN RAM': (DO NOT MODIFY !) 2 | F (.\S3C2410A.s)(0x49B22192)(--device DARMSS9 -g --apcs=interwork -I "D:\Keil\ARM\INC\Samsung" --list ".\SDRAM\S3C2410A.lst" --xref -o ".\SDRAM\S3C2410A.o") 3 | F (.\Source\main.c)(0x49B221F0)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\main.o" --omf_browse ".\SDRAM\main.crf" --depend ".\SDRAM\main.d") 4 | I (.\Include\uart_test.h)(0x48473C54) 5 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 6 | I (..\Common\Inc\option.h)(0x49B21E32) 7 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 8 | I (..\Common\Inc\def.h)(0x49B21E1E) 9 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 10 | I (..\Common\Inc\register.h)(0x49B21E3A) 11 | I (..\Common\Inc\sys_init.h)(0x48609ECE) 12 | F (.\Source\uart_test.c)(0x5908384A)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\uart_test.o" --omf_browse ".\SDRAM\uart_test.crf" --depend ".\SDRAM\uart_test.d") 13 | I (.\Include\uart_test.h)(0x48473C54) 14 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 15 | I (..\Common\Inc\option.h)(0x49B21E32) 16 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 17 | I (..\Common\Inc\def.h)(0x49B21E1E) 18 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 19 | I (..\Common\Inc\register.h)(0x49B21E3A) 20 | F (..\common\src\2410lib.c)(0x4A485B5A)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\2410lib.o" --omf_browse ".\SDRAM\2410lib.crf" --depend ".\SDRAM\2410lib.d") 21 | I (D:\Keil\ARM\RV31\INC\stdarg.h)(0x491094EC) 22 | I (D:\Keil\ARM\RV31\INC\string.h)(0x491094EC) 23 | I (D:\Keil\ARM\RV31\INC\stdio.h)(0x491094EC) 24 | I (D:\Keil\ARM\RV31\INC\ctype.h)(0x491094EA) 25 | I (D:\Keil\ARM\RV31\INC\stdlib.h)(0x491094EC) 26 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 27 | I (..\Common\Inc\def.h)(0x49B21E1E) 28 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 29 | I (..\Common\Inc\option.h)(0x49B21E32) 30 | I (..\Common\Inc\register.h)(0x49B21E3A) 31 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 32 | I (..\Common\Inc\2410slib.h)(0x49B21E4C) 33 | F (..\common\src\sys_init.c)(0x4C9D6CFF)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\sys_init.o" --omf_browse ".\SDRAM\sys_init.crf" --depend ".\SDRAM\sys_init.d") 34 | I (D:\Keil\ARM\RV31\INC\stdarg.h)(0x491094EC) 35 | I (D:\Keil\ARM\RV31\INC\string.h)(0x491094EC) 36 | I (D:\Keil\ARM\RV31\INC\stdio.h)(0x491094EC) 37 | I (D:\Keil\ARM\RV31\INC\ctype.h)(0x491094EA) 38 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 39 | I (..\Common\Inc\def.h)(0x49B21E1E) 40 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 41 | I (..\Common\Inc\option.h)(0x49B21E32) 42 | I (..\Common\Inc\register.h)(0x49B21E3A) 43 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 44 | F (.\SDRAM.ini)(0x484771F8)() 45 | F (.\readme.txt)(0x4C9D6BF6)() 46 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/readme.txt -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/readme.txt.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/04_UART_Test/readme.txt.bak -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest.Opt: -------------------------------------------------------------------------------- 1 | ### uVision2 Project, (C) Keil Software 2 | ### Do not modify ! 3 | 4 | cExt (*.c) 5 | aExt (*.s*; *.src; *.a*) 6 | oExt (*.obj) 7 | lExt (*.lib) 8 | tExt (*.txt; *.h; *.inc) 9 | pExt (*.plm) 10 | CppX (*.cpp) 11 | DaveTm { 0,0,0,0,0,0,0,0 } 12 | 13 | Target (KeyBoardTestInFlash), 0x0004 // Tools: 'ARM-ADS' 14 | Target (KeyBoradTestInRam), 0x0004 // Tools: 'ARM-ADS' 15 | GRPOPT 1,(Startup),1,0,0 16 | GRPOPT 2,(Source),1,0,0 17 | GRPOPT 3,(Common),1,0,0 18 | GRPOPT 4,(IniFile),1,0,0 19 | GRPOPT 5,(Readme),0,0,0 20 | 21 | OPTFFF 1,1,2,0,0,22,30,0,<.\S3C2410A.s> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,110,0,0,0,145,0,0,0,18,4,0,0,112,2,0,0 } 22 | OPTFFF 2,2,1,436207616,0,91,91,0,<.\iic_8led.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,186,3,0,0,252,1,0,0 } 23 | OPTFFF 2,3,1,973078528,0,13,13,0,<.\iic_keybd.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,132,0,0,0,174,0,0,0,40,4,0,0,141,2,0,0 } 24 | OPTFFF 2,4,1,1778384898,0,49,55,0,<.\keyboard_test.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,88,0,0,0,116,0,0,0,252,3,0,0,83,2,0,0 } 25 | OPTFFF 2,5,1,687865856,0,1,13,0,<.\main.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,0,0,0,0,0,0,0,0,255,1,0,0,254,0,0,0 } 26 | OPTFFF 3,6,1,0,0,1,1,0,<..\Common\Src\2410lib.c><2410lib.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,230,3,0,0,54,2,0,0 } 27 | OPTFFF 3,7,1,0,0,163,163,0,<..\Common\Src\sys_init.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,44,0,0,0,58,0,0,0,208,3,0,0,25,2,0,0 } 28 | OPTFFF 4,8,5,1308622848,0,0,0,0,<.\SDRAM.ini> 29 | 30 | 31 | TARGOPT 1, (KeyBoardTestInFlash) 32 | ADSCLK=12000000 33 | OPTTT 1,1,1,0 34 | OPTHX 1,65535,0,0,0 35 | OPTLX 79,66,8,<.\> 36 | OPTOX 16 37 | OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 38 | OPTXL 1,1,1,1,1,1,1,0,0 39 | OPTFL 1,0,0 40 | OPTAX 255 41 | OPTBL 0,(User's Manual) 42 | OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2410A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2410A) 43 | OPTDBG 15358,0,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() 44 | OPTKEY 0,(UL2ARM)(-U -O14 -S0 -C-1 -FO7 -FD40000000 -FC800 -FN1 -FF0AM29F160DB -FS00 -FL0200000) 45 | OPTDF 0x2 46 | OPTLE <> 47 | OPTLC <> 48 | EndOpt 49 | 50 | TARGOPT 2, (KeyBoradTestInRam) 51 | ADSCLK=12000000 52 | OPTTT 1,1,1,0 53 | OPTHX 1,65535,0,0,0 54 | OPTLX 79,66,8,<.\> 55 | OPTOX 16 56 | OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 57 | OPTXL 1,1,1,1,1,1,1,0,0 58 | OPTFL 1,0,1 59 | OPTAX 255 60 | OPTBL 0,(User's Manual) 61 | OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2410A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2410A) 62 | OPTDBG 49150,0,()()()()()()()()()(.\SDRAM.ini) (BIN\UL2ARM.DLL)()()() 63 | OPTKEY 0,(DLGTARM)((113=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(103=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(108=-1,-1,-1,-1,0)(109=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)) 64 | OPTKEY 0,(ARMDBGFLAGS)() 65 | OPTKEY 0,(UL2ARM)(-UV0498UAE -O14 -S0 -C0 -N00("ARM920T Core") -D00(0032409D) -L00(4) -FO7 -FD40000000 -FC800 -FN0) 66 | OPTDF 0x82 67 | OPTLE <> 68 | OPTLC <> 69 | EndOpt 70 | 71 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest.Uv2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest.Uv2 -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest.plg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest.plg -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest_KeyBoardTestInFlash.dep: -------------------------------------------------------------------------------- 1 | Dependencies for Project 'KeyBoardTest', Target 'KeyBoardTestInFlash': (DO NOT MODIFY !) 2 | F (.\S3C2410A.s)(0x4848877E)(--device DARMSS9 -g --apcs=interwork -I "D:\Program Files\Keil\ARM\INC\Samsung" --list "S3C2410A.lst" --xref -o ".\NOR FLASH\S3C2410A.o") 3 | F (.\iic_8led.c)(0x46DD19FC)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Program Files\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\iic_8led.o" --omf_browse ".\NOR FLASH\iic_8led.crf" --depend ".\NOR FLASH\iic_8led.d") 4 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 5 | I (..\Common\Inc\def.h)(0x49B21E1E) 6 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 7 | I (..\Common\Inc\option.h)(0x49B21E32) 8 | I (..\Common\Inc\register.h)(0x49B21E3A) 9 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 10 | F (.\iic_keybd.c)(0x46DD19FC)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Program Files\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\iic_keybd.o" --omf_browse ".\NOR FLASH\iic_keybd.crf" --depend ".\NOR FLASH\iic_keybd.d") 11 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 12 | I (..\Common\Inc\def.h)(0x49B21E1E) 13 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 14 | I (..\Common\Inc\option.h)(0x49B21E32) 15 | I (..\Common\Inc\register.h)(0x49B21E3A) 16 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 17 | F (.\keyboard_test.c)(0x46DD19FC)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Program Files\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\keyboard_test.o" --omf_browse ".\NOR FLASH\keyboard_test.crf" --depend ".\NOR FLASH\keyboard_test.d") 18 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 19 | I (..\Common\Inc\def.h)(0x49B21E1E) 20 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 21 | I (..\Common\Inc\option.h)(0x49B21E32) 22 | I (..\Common\Inc\register.h)(0x49B21E3A) 23 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 24 | F (.\main.c)(0x46DD19FC)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Program Files\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\main.o" --omf_browse ".\NOR FLASH\main.crf" --depend ".\NOR FLASH\main.d") 25 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 26 | I (..\Common\Inc\def.h)(0x49B21E1E) 27 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 28 | I (..\Common\Inc\option.h)(0x49B21E32) 29 | I (..\Common\Inc\register.h)(0x49B21E3A) 30 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 31 | F (..\Common\Src\2410lib.c)(0x4A485B5A)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Program Files\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\2410lib.o" --omf_browse ".\NOR FLASH\2410lib.crf" --depend ".\NOR FLASH\2410lib.d") 32 | F (..\Common\Src\sys_init.c)(0x4C9D6CFF)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\NOR FLASH\sys_init.o" --omf_browse ".\NOR FLASH\sys_init.crf" --depend ".\NOR FLASH\sys_init.d") 33 | F (.\SDRAM.ini)(0x50175D14)() 34 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest_KeyBoradTestInRam.dep: -------------------------------------------------------------------------------- 1 | Dependencies for Project 'KeyBoardTest', Target 'KeyBoradTestInRam': (DO NOT MODIFY !) 2 | F (.\S3C2410A.s)(0x4848877E)(--device DARMSS9 -g --apcs=interwork -I "D:\Keil\ARM\INC\Samsung" --pd "ENABLEMMU SETA 1" --list "S3C2410A.lst" --xref -o ".\SDRAM\S3C2410A.o") 3 | F (.\iic_8led.c)(0x5907FA3B)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\iic_8led.o" --omf_browse ".\SDRAM\iic_8led.crf" --depend ".\SDRAM\iic_8led.d") 4 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 5 | I (..\Common\Inc\def.h)(0x49B21E1E) 6 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 7 | I (..\Common\Inc\option.h)(0x49B21E32) 8 | I (..\Common\Inc\register.h)(0x49B21E3A) 9 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 10 | F (.\iic_keybd.c)(0x5907FB4E)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\iic_keybd.o" --omf_browse ".\SDRAM\iic_keybd.crf" --depend ".\SDRAM\iic_keybd.d") 11 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 12 | I (..\Common\Inc\def.h)(0x49B21E1E) 13 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 14 | I (..\Common\Inc\option.h)(0x49B21E32) 15 | I (..\Common\Inc\register.h)(0x49B21E3A) 16 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 17 | F (.\keyboard_test.c)(0x59083764)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\keyboard_test.o" --omf_browse ".\SDRAM\keyboard_test.crf" --depend ".\SDRAM\keyboard_test.d") 18 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 19 | I (..\Common\Inc\def.h)(0x49B21E1E) 20 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 21 | I (..\Common\Inc\option.h)(0x49B21E32) 22 | I (..\Common\Inc\register.h)(0x49B21E3A) 23 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 24 | F (.\main.c)(0x5907F677)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\main.o" --omf_browse ".\SDRAM\main.crf" --depend ".\SDRAM\main.d") 25 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 26 | I (..\Common\Inc\def.h)(0x49B21E1E) 27 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 28 | I (..\Common\Inc\option.h)(0x49B21E32) 29 | I (..\Common\Inc\register.h)(0x49B21E3A) 30 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 31 | F (..\Common\Src\2410lib.c)(0x4A485B5A)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\2410lib.o" --omf_browse ".\SDRAM\2410lib.crf" --depend ".\SDRAM\2410lib.d") 32 | I (D:\Keil\ARM\RV31\INC\stdarg.h)(0x491094EC) 33 | I (D:\Keil\ARM\RV31\INC\string.h)(0x491094EC) 34 | I (D:\Keil\ARM\RV31\INC\stdio.h)(0x491094EC) 35 | I (D:\Keil\ARM\RV31\INC\ctype.h)(0x491094EA) 36 | I (D:\Keil\ARM\RV31\INC\stdlib.h)(0x491094EC) 37 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 38 | I (..\Common\Inc\def.h)(0x49B21E1E) 39 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 40 | I (..\Common\Inc\option.h)(0x49B21E32) 41 | I (..\Common\Inc\register.h)(0x49B21E3A) 42 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 43 | I (..\Common\Inc\2410slib.h)(0x49B21E4C) 44 | F (..\Common\Src\sys_init.c)(0x4C9D6CFF)(-c --device DARMSS9 -g -O0 --apcs=interwork --asm --interleave -I..\Common\Inc -I.\Include -I "D:\Keil\ARM\INC\Samsung" -o ".\SDRAM\sys_init.o" --omf_browse ".\SDRAM\sys_init.crf" --depend ".\SDRAM\sys_init.d") 45 | I (D:\Keil\ARM\RV31\INC\stdarg.h)(0x491094EC) 46 | I (D:\Keil\ARM\RV31\INC\string.h)(0x491094EC) 47 | I (D:\Keil\ARM\RV31\INC\stdio.h)(0x491094EC) 48 | I (D:\Keil\ARM\RV31\INC\ctype.h)(0x491094EA) 49 | I (..\Common\Inc\2410lib.h)(0x49B21E08) 50 | I (..\Common\Inc\def.h)(0x49B21E1E) 51 | I (..\Common\Inc\memcfg.h)(0x46DCA980) 52 | I (..\Common\Inc\option.h)(0x49B21E32) 53 | I (..\Common\Inc\register.h)(0x49B21E3A) 54 | I (..\Common\Inc\2410addr.h)(0x49B21F04) 55 | F (.\SDRAM.ini)(0x50175D14)() 56 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest_Opt.Bak: -------------------------------------------------------------------------------- 1 | ### uVision2 Project, (C) Keil Software 2 | ### Do not modify ! 3 | 4 | cExt (*.c) 5 | aExt (*.s*; *.src; *.a*) 6 | oExt (*.obj) 7 | lExt (*.lib) 8 | tExt (*.txt; *.h; *.inc) 9 | pExt (*.plm) 10 | CppX (*.cpp) 11 | DaveTm { 0,0,0,0,0,0,0,0 } 12 | 13 | Target (KeyBoardTestInFlash), 0x0004 // Tools: 'ARM-ADS' 14 | Target (KeyBoradTestInRam), 0x0004 // Tools: 'ARM-ADS' 15 | GRPOPT 1,(Startup),1,0,0 16 | GRPOPT 2,(Source),1,0,0 17 | GRPOPT 3,(Common),1,0,0 18 | GRPOPT 4,(IniFile),1,0,0 19 | GRPOPT 5,(Readme),0,0,0 20 | 21 | OPTFFF 1,1,2,0,0,0,0,0,<.\S3C2410A.s> 22 | OPTFFF 2,2,1,0,0,49,49,0,<.\iic_8led.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,22,0,0,0,29,0,0,0,186,3,0,0,252,1,0,0 } 23 | OPTFFF 2,3,1,385875968,0,0,0,0,<.\iic_keybd.c> 24 | OPTFFF 2,4,1,0,0,1,1,0,<.\keyboard_test.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,88,0,0,0,116,0,0,0,252,3,0,0,83,2,0,0 } 25 | OPTFFF 2,5,1,2,0,4,4,0,<.\main.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,0,0,0,0,0,0,0,0,255,1,0,0,254,0,0,0 } 26 | OPTFFF 3,6,1,0,0,1,1,0,<..\Common\Src\2410lib.c><2410lib.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,66,0,0,0,87,0,0,0,230,3,0,0,54,2,0,0 } 27 | OPTFFF 3,7,1,0,0,163,163,0,<..\Common\Src\sys_init.c> { 44,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,226,255,255,255,44,0,0,0,58,0,0,0,208,3,0,0,25,2,0,0 } 28 | OPTFFF 4,8,5,1308622848,0,0,0,0,<.\SDRAM.ini> 29 | 30 | 31 | TARGOPT 1, (KeyBoardTestInFlash) 32 | ADSCLK=12000000 33 | OPTTT 1,1,1,0 34 | OPTHX 1,65535,0,0,0 35 | OPTLX 79,66,8,<.\> 36 | OPTOX 16 37 | OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 38 | OPTXL 1,1,1,1,1,1,1,0,0 39 | OPTFL 1,0,0 40 | OPTAX 255 41 | OPTBL 0,(User's Manual) 42 | OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2410A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2410A) 43 | OPTDBG 15358,0,()()()()()()()()()() (BIN\UL2ARM.DLL)()()() 44 | OPTKEY 0,(UL2ARM)(-U -O14 -S0 -C-1 -FO7 -FD40000000 -FC800 -FN1 -FF0AM29F160DB -FS00 -FL0200000) 45 | OPTDF 0x2 46 | OPTLE <> 47 | OPTLC <> 48 | EndOpt 49 | 50 | TARGOPT 2, (KeyBoradTestInRam) 51 | ADSCLK=12000000 52 | OPTTT 1,1,1,0 53 | OPTHX 1,65535,0,0,0 54 | OPTLX 79,66,8,<.\> 55 | OPTOX 16 56 | OPTLT 1,1,1,0,1,1,0,1,0,0,0,0 57 | OPTXL 1,1,1,1,1,1,1,0,0 58 | OPTFL 1,0,1 59 | OPTAX 255 60 | OPTBL 0,(User's Manual) 61 | OPTDL (SARM.DLL)()(DARMSS9.DLL)(-pS3C2410A)(SARM.DLL)()(TARMSS9.DLL)(-pS3C2410A) 62 | OPTDBG 49150,0,()()()()()()()()()(.\SDRAM.ini) (BIN\UL2ARM.DLL)()()() 63 | OPTKEY 0,(DLGTARM)((113=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(103=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(108=-1,-1,-1,-1,0)(109=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(112=-1,-1,-1,-1,0)) 64 | OPTKEY 0,(ARMDBGFLAGS)() 65 | OPTKEY 0,(UL2ARM)(-UV0498UAE -O14 -S0 -C0 -N00("ARM920T Core") -D00(0032409D) -L00(4) -FO7 -FD40000000 -FC800 -FN0) 66 | OPTDF 0x82 67 | OPTLE <> 68 | OPTLC <> 69 | EndOpt 70 | 71 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest_Target 1.dep: -------------------------------------------------------------------------------- 1 | Dependencies for Project 'KeyBoardTest', Target 'Target 1': (DO NOT MODIFY !) 2 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest_Uv2.Bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/KeyBoardTest_Uv2.Bak -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/2410lib.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/2410lib.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/2410lib.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\2410lib.o: ..\Common\Src\2410lib.c 2 | .\NOR FLASH\2410lib.o: D:\Program Files\Keil\ARM\RV31\INC\stdarg.h 3 | .\NOR FLASH\2410lib.o: D:\Program Files\Keil\ARM\RV31\INC\string.h 4 | .\NOR FLASH\2410lib.o: D:\Program Files\Keil\ARM\RV31\INC\stdio.h 5 | .\NOR FLASH\2410lib.o: D:\Program Files\Keil\ARM\RV31\INC\ctype.h 6 | .\NOR FLASH\2410lib.o: D:\Program Files\Keil\ARM\RV31\INC\stdlib.h 7 | .\NOR FLASH\2410lib.o: ..\Common\Inc\2410lib.h 8 | .\NOR FLASH\2410lib.o: ..\Common\Inc\def.h 9 | .\NOR FLASH\2410lib.o: ..\Common\Inc\memcfg.h 10 | .\NOR FLASH\2410lib.o: ..\Common\Inc\option.h 11 | .\NOR FLASH\2410lib.o: ..\Common\Inc\register.h 12 | .\NOR FLASH\2410lib.o: ..\Common\Inc\2410addr.h 13 | .\NOR FLASH\2410lib.o: ..\Common\Inc\2410slib.h 14 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/KeyBoardTest.axf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/KeyBoardTest.axf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/KeyBoardTest.lnp: -------------------------------------------------------------------------------- 1 | ".\nor flash\s3c2410a.o" ".\nor flash\iic_8led.o" ".\nor flash\iic_keybd.o" ".\nor flash\keyboard_test.o" ".\nor flash\main.o" ".\nor flash\2410lib.o" ".\nor flash\sys_init.o" --device DARMSS9 --strict --scatter ".\NOR FLASH\KeyBoardTest.sct" 2 | --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols 3 | --info sizes --info totals --info unused --info veneers 4 | --list ".\KeyBoardTest.map" -o ".\NOR FLASH\KeyBoardTest.axf" -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/KeyBoardTest.plg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/KeyBoardTest.plg -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/KeyBoardTest.sct: -------------------------------------------------------------------------------- 1 | ; ************************************************************* 2 | ; *** Scatter-Loading Description File generated by uVision *** 3 | ; ************************************************************* 4 | 5 | LR_ROM1 0x00000000 0x00200000 { ; load region size_region 6 | ER_ROM1 0x00000000 0x00200000 { ; load address = execution address 7 | *.o (RESET, +First) 8 | *(InRoot$$Sections) 9 | .ANY (+RO) 10 | } 11 | RW_RAM1 0x30000000 0x04000000 { ; RW data 12 | .ANY (+RW +ZI) 13 | } 14 | RW_IRAM1 0x40000000 0x00001000 { 15 | .ANY (+RW +ZI) 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/KeyBoardTest.tra: -------------------------------------------------------------------------------- 1 | *** Creating Trace Output File '.\NOR FLASH\KeyBoardTest.tra' Ok. 2 | ### Preparing for ADS-LD. 3 | ### Creating ADS-LD Command Line 4 | ### List of Objects: adding '".\nor flash\s3c2410a.o"' 5 | ### List of Objects: adding '".\nor flash\iic_8led.o"' 6 | ### List of Objects: adding '".\nor flash\iic_keybd.o"' 7 | ### List of Objects: adding '".\nor flash\keyboard_test.o"' 8 | ### List of Objects: adding '".\nor flash\main.o"' 9 | ### List of Objects: adding '".\nor flash\2410lib.o"' 10 | ### List of Objects: adding '".\nor flash\sys_init.o"' 11 | ### ADS-LD Command completed: 12 | ".\nor flash\s3c2410a.o" ".\nor flash\iic_8led.o" ".\nor flash\iic_keybd.o" ".\nor flash\keyboard_test.o" ".\nor flash\main.o" ".\nor flash\2410lib.o" ".\nor flash\sys_init.o" --device DARMSS9 --strict --scatter ".\NOR FLASH\KeyBoardTest.sct" 13 | --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols 14 | --info sizes --info totals --info unused --info veneers 15 | --list ".\KeyBoardTest.map" -o ".\NOR FLASH\KeyBoardTest.axf"### Preparing Environment (PrepEnvAds) 16 | ### ADS-LD Output File: '.\NOR FLASH\KeyBoardTest.axf' 17 | ### ADS-LD Command File: '.\NOR FLASH\KeyBoardTest.lnp' 18 | ### Checking for dirty Components... 19 | ### Creating CmdFile '.\NOR FLASH\KeyBoardTest.lnp', Handle=0x00000390 20 | ### Writing '.lnp' file 21 | ### ADS-LD Command file '.\NOR FLASH\KeyBoardTest.lnp' is ready. 22 | ### ADS-LD: About to start ADS-LD Thread. 23 | ### ADS-LD: executed with 0 errors 24 | ### Updating obj list 25 | ### LDADS_file() completed. 26 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/iic_8led.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/iic_8led.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/iic_8led.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\iic_8led.o: iic_8led.c 2 | .\NOR FLASH\iic_8led.o: ..\Common\Inc\2410lib.h 3 | .\NOR FLASH\iic_8led.o: ..\Common\Inc\def.h 4 | .\NOR FLASH\iic_8led.o: ..\Common\Inc\memcfg.h 5 | .\NOR FLASH\iic_8led.o: ..\Common\Inc\option.h 6 | .\NOR FLASH\iic_8led.o: ..\Common\Inc\register.h 7 | .\NOR FLASH\iic_8led.o: ..\Common\Inc\2410addr.h 8 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/iic_keybd.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/iic_keybd.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/iic_keybd.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\iic_keybd.o: iic_keybd.c 2 | .\NOR FLASH\iic_keybd.o: ..\Common\Inc\2410lib.h 3 | .\NOR FLASH\iic_keybd.o: ..\Common\Inc\def.h 4 | .\NOR FLASH\iic_keybd.o: ..\Common\Inc\memcfg.h 5 | .\NOR FLASH\iic_keybd.o: ..\Common\Inc\option.h 6 | .\NOR FLASH\iic_keybd.o: ..\Common\Inc\register.h 7 | .\NOR FLASH\iic_keybd.o: ..\Common\Inc\2410addr.h 8 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/iic_keybd.txt: -------------------------------------------------------------------------------- 1 | ; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision 2 | ; commandline ArmCC [--debug -c --asm --interleave -o".\NOR FLASH\iic_keybd.o" --depend=".\NOR FLASH\iic_keybd.d" --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -I"D:\Program Files\Keil\ARM\INC\Samsung" --omf_browse=".\NOR FLASH\iic_keybd.crf" iic_keybd.c] 3 | ARM 4 | 5 | AREA ||.text||, CODE, READONLY, ALIGN=2 6 | 7 | iic_int_keybd PROC 8 | ;;;150 void __irq iic_int_keybd(void) 9 | ;;;151 { 10 | 000000 e92d0003 PUSH {r0,r1} 11 | ;;;152 ClearPending(BIT_IIC); 12 | 000004 e3a00302 MOV r0,#0x8000000 13 | 000008 e3a0144a MOV r1,#0x4a000000 14 | 00000c e5810000 STR r0,[r1,#0] 15 | 000010 e3a0044a MOV r0,#0x4a000000 16 | 000014 e5900010 LDR r0,[r0,#0x10] 17 | 000018 e5810010 STR r0,[r1,#0x10] 18 | ;;;153 f_nGetACK = 1; 19 | 00001c e3a00001 MOV r0,#1 20 | 000020 e59f125c LDR r1,|L1.644| 21 | 000024 e5810000 STR r0,[r1,#0] ; f_nGetACK 22 | ;;;154 } 23 | 000028 e8bd0003 POP {r0,r1} 24 | 00002c e25ef004 SUBS pc,lr,#4 25 | ENDP 26 | 27 | iic_init_keybd PROC 28 | ;;;37 { 29 | ;;;38 f_nGetACK = 0; 30 | 000030 e3a00000 MOV r0,#0 31 | 000034 e59f1248 LDR r1,|L1.644| 32 | 000038 e5810000 STR r0,[r1,#0] ; f_nGetACK 33 | ;;;39 34 | ;;;40 // Enable interrupt 35 | ;;;41 rINTMOD = 0x0; 36 | 00003c e3a0144a MOV r1,#0x4a000000 37 | 000040 e5810004 STR r0,[r1,#4] 38 | ;;;42 rSRCPND = rSRCPND; // clear all interrupt 39 | 000044 e3a0044a MOV r0,#0x4a000000 40 | 000048 e5900000 LDR r0,[r0,#0] 41 | 00004c e5810000 STR r0,[r1,#0] 42 | ;;;43 rINTPND = rINTPND; // clear all interrupt 43 | 000050 e3a0044a MOV r0,#0x4a000000 44 | 000054 e5900010 LDR r0,[r0,#0x10] 45 | 000058 e5810010 STR r0,[r1,#0x10] 46 | ;;;44 rINTMSK &= ~(BIT_IIC|BIT_EINT1); 47 | 00005c e3a0044a MOV r0,#0x4a000000 48 | 000060 e5900008 LDR r0,[r0,#8] 49 | 000064 e3c00382 BIC r0,r0,#0x8000002 50 | 000068 e5810008 STR r0,[r1,#8] 51 | ;;;45 pISR_IIC= (unsigned)iic_int_keybd; 52 | 00006c e24f0074 ADR r0,iic_int_keybd 53 | 000070 e59f1210 LDR r1,|L1.648| 54 | 000074 e5810f8c STR r0,[r1,#0xf8c] 55 | ;;;46 56 | ;;;47 // Initialize iic 57 | ;;;48 rIICADD = 0x10; // S3C2410X slave address 58 | 000078 e3a00010 MOV r0,#0x10 59 | 00007c e3a01315 MOV r1,#0x54000000 60 | 000080 e5810008 STR r0,[r1,#8] 61 | ;;;49 rIICCON = 0xaf; // Enable ACK, interrupt, set IICCLK=MCLK/16 62 | 000084 e3a000af MOV r0,#0xaf 63 | 000088 e5810000 STR r0,[r1,#0] 64 | ;;;50 rIICSTAT= 0x10; // Enable TX/RX 65 | 00008c e3a00010 MOV r0,#0x10 66 | 000090 e5810004 STR r0,[r1,#4] 67 | ;;;51 } 68 | 000094 e12fff1e BX lr 69 | ;;;52 70 | ENDP 71 | 72 | iic_write_keybd PROC 73 | ;;;64 { 74 | ;;;65 f_nGetACK = 0; 75 | 000098 e3a03000 MOV r3,#0 76 | 00009c e59fc1e0 LDR r12,|L1.644| 77 | 0000a0 e58c3000 STR r3,[r12,#0] ; f_nGetACK 78 | ;;;66 79 | ;;;67 // Send control byte 80 | ;;;68 rIICDS = unSlaveAddr; // 0x70 81 | 0000a4 e3a03315 MOV r3,#0x54000000 82 | 0000a8 e583000c STR r0,[r3,#0xc] 83 | ;;;69 rIICSTAT = 0xf0; // Master Tx,Start 84 | 0000ac e3a030f0 MOV r3,#0xf0 85 | 0000b0 e3a0c315 MOV r12,#0x54000000 86 | 0000b4 e58c3004 STR r3,[r12,#4] 87 | ;;;70 while(f_nGetACK == 0); // Wait ACK 88 | 0000b8 e1a00000 MOV r0,r0 89 | |L1.188| 90 | 0000bc e59f31c0 LDR r3,|L1.644| 91 | 0000c0 e5933000 LDR r3,[r3,#0] ; f_nGetACK 92 | 0000c4 e3530000 CMP r3,#0 93 | 0000c8 0afffffb BEQ |L1.188| 94 | ;;;71 f_nGetACK = 0; 95 | 0000cc e3a03000 MOV r3,#0 96 | 0000d0 e59fc1ac LDR r12,|L1.644| 97 | 0000d4 e58c3000 STR r3,[r12,#0] ; f_nGetACK 98 | ;;;72 99 | ;;;73 // Send address 100 | ;;;74 rIICDS = unAddr; 101 | 0000d8 e3a03315 MOV r3,#0x54000000 102 | 0000dc e583100c STR r1,[r3,#0xc] 103 | ;;;75 rIICCON = 0xaf; // Resumes IIC operation. 104 | 0000e0 e3a030af MOV r3,#0xaf 105 | 0000e4 e3a0c315 MOV r12,#0x54000000 106 | 0000e8 e58c3000 STR r3,[r12,#0] 107 | ;;;76 while(f_nGetACK == 0); // Wait ACK 108 | 0000ec e1a00000 MOV r0,r0 109 | |L1.240| 110 | 0000f0 e59f318c LDR r3,|L1.644| 111 | 0000f4 e5933000 LDR r3,[r3,#0] ; f_nGetACK 112 | 0000f8 e3530000 CMP r3,#0 113 | 0000fc 0afffffb BEQ |L1.240| 114 | ;;;77 f_nGetACK = 0; 115 | 000100 e3a03000 MOV r3,#0 116 | 000104 e59fc178 LDR r12,|L1.644| 117 | 000108 e58c3000 STR r3,[r12,#0] ; f_nGetACK 118 | ;;;78 119 | ;;;79 // Send data 120 | ;;;80 rIICDS = ucData; 121 | 00010c e3a03315 MOV r3,#0x54000000 122 | 000110 e583200c STR r2,[r3,#0xc] 123 | ;;;81 rIICCON = 0xaf; // Resumes IIC operation. 124 | 000114 e3a030af MOV r3,#0xaf 125 | 000118 e3a0c315 MOV r12,#0x54000000 126 | 00011c e58c3000 STR r3,[r12,#0] 127 | ;;;82 while(f_nGetACK == 0); // Wait ACK 128 | 000120 e1a00000 MOV r0,r0 129 | |L1.292| 130 | 000124 e59f3158 LDR r3,|L1.644| 131 | 000128 e5933000 LDR r3,[r3,#0] ; f_nGetACK 132 | 00012c e3530000 CMP r3,#0 133 | 000130 0afffffb BEQ |L1.292| 134 | ;;;83 f_nGetACK = 0; 135 | 000134 e3a03000 MOV r3,#0 136 | 000138 e59fc144 LDR r12,|L1.644| 137 | 00013c e58c3000 STR r3,[r12,#0] ; f_nGetACK 138 | ;;;84 139 | ;;;85 // End send 140 | ;;;86 rIICSTAT = 0xd0; // Stop Master Tx condition 141 | 000140 e3a030d0 MOV r3,#0xd0 142 | 000144 e3a0c315 MOV r12,#0x54000000 143 | 000148 e58c3004 STR r3,[r12,#4] 144 | ;;;87 rIICCON = 0xaf; // Resumes IIC operation. 145 | 00014c e3a030af MOV r3,#0xaf 146 | 000150 e58c3000 STR r3,[r12,#0] 147 | ;;;88 while(rIICSTAT & 0x20 == 1); // Wait until stop condtion is in effect. 148 | 000154 e1a00000 MOV r0,r0 149 | |L1.344| 150 | 000158 e3a03315 MOV r3,#0x54000000 151 | 00015c e5933004 LDR r3,[r3,#4] 152 | 000160 e3a03000 MOV r3,#0 153 | 000164 e3530000 CMP r3,#0 154 | 000168 1afffffa BNE |L1.344| 155 | ;;;89 } 156 | 00016c e12fff1e BX lr 157 | ;;;90 158 | ENDP 159 | 160 | iic_read_keybd PROC 161 | ;;;101 void iic_read_keybd(UINT32T unSlaveAddr,UINT32T unAddr,UINT8T *pData) 162 | ;;;102 { 163 | 000170 e92d41f0 PUSH {r4-r8,lr} 164 | 000174 e1a04000 MOV r4,r0 165 | 000178 e1a07001 MOV r7,r1 166 | 00017c e1a05002 MOV r5,r2 167 | ;;;103 char cRecvByte; 168 | ;;;104 169 | ;;;105 f_nGetACK = 0; 170 | 000180 e3a00000 MOV r0,#0 171 | 000184 e59f10f8 LDR r1,|L1.644| 172 | 000188 e5810000 STR r0,[r1,#0] ; f_nGetACK 173 | ;;;106 174 | ;;;107 // Send control byte 175 | ;;;108 rIICDS = unSlaveAddr; // Write slave address to IICDS 176 | 00018c e3a00315 MOV r0,#0x54000000 177 | 000190 e580400c STR r4,[r0,#0xc] 178 | ;;;109 rIICSTAT = 0xf0; // Master Tx,Start 179 | 000194 e3a000f0 MOV r0,#0xf0 180 | 000198 e3a01315 MOV r1,#0x54000000 181 | 00019c e5810004 STR r0,[r1,#4] 182 | ;;;110 while(f_nGetACK == 0); // Wait ACK 183 | 0001a0 e1a00000 MOV r0,r0 184 | |L1.420| 185 | 0001a4 e59f00d8 LDR r0,|L1.644| 186 | 0001a8 e5900000 LDR r0,[r0,#0] ; f_nGetACK 187 | 0001ac e3500000 CMP r0,#0 188 | 0001b0 0afffffb BEQ |L1.420| 189 | ;;;111 f_nGetACK = 0; 190 | 0001b4 e3a00000 MOV r0,#0 191 | 0001b8 e59f10c4 LDR r1,|L1.644| 192 | 0001bc e5810000 STR r0,[r1,#0] ; f_nGetACK 193 | ;;;112 194 | ;;;113 // Send address 195 | ;;;114 rIICDS = unAddr; 196 | 0001c0 e3a00315 MOV r0,#0x54000000 197 | 0001c4 e580700c STR r7,[r0,#0xc] 198 | ;;;115 rIICCON = 0xaf; // Resumes IIC operation. 199 | 0001c8 e3a000af MOV r0,#0xaf 200 | 0001cc e3a01315 MOV r1,#0x54000000 201 | 0001d0 e5810000 STR r0,[r1,#0] 202 | ;;;116 while(f_nGetACK == 0); // Wait ACK 203 | 0001d4 e1a00000 MOV r0,r0 204 | |L1.472| 205 | 0001d8 e59f00a4 LDR r0,|L1.644| 206 | 0001dc e5900000 LDR r0,[r0,#0] ; f_nGetACK 207 | 0001e0 e3500000 CMP r0,#0 208 | 0001e4 0afffffb BEQ |L1.472| 209 | ;;;117 f_nGetACK = 0; 210 | 0001e8 e3a00000 MOV r0,#0 211 | 0001ec e59f1090 LDR r1,|L1.644| 212 | 0001f0 e5810000 STR r0,[r1,#0] ; f_nGetACK 213 | ;;;118 214 | ;;;119 // Send control byte 215 | ;;;120 rIICDS = unSlaveAddr; // 0x70 216 | 0001f4 e3a00315 MOV r0,#0x54000000 217 | 0001f8 e580400c STR r4,[r0,#0xc] 218 | ;;;121 rIICSTAT = 0xb0; // Master Rx,Start 219 | 0001fc e3a000b0 MOV r0,#0xb0 220 | 000200 e3a01315 MOV r1,#0x54000000 221 | 000204 e5810004 STR r0,[r1,#4] 222 | ;;;122 rIICCON = 0xaf; // Resumes IIC operation. 223 | 000208 e3a000af MOV r0,#0xaf 224 | 00020c e5810000 STR r0,[r1,#0] 225 | ;;;123 while(f_nGetACK == 0); // Wait ACK 226 | 000210 e1a00000 MOV r0,r0 227 | |L1.532| 228 | 000214 e59f0068 LDR r0,|L1.644| 229 | 000218 e5900000 LDR r0,[r0,#0] ; f_nGetACK 230 | 00021c e3500000 CMP r0,#0 231 | 000220 0afffffb BEQ |L1.532| 232 | ;;;124 f_nGetACK = 0; 233 | 000224 e3a00000 MOV r0,#0 234 | 000228 e59f1054 LDR r1,|L1.644| 235 | 00022c e5810000 STR r0,[r1,#0] ; f_nGetACK 236 | ;;;125 237 | ;;;126 // Get data 238 | ;;;127 cRecvByte = rIICDS; 239 | 000230 e3a00315 MOV r0,#0x54000000 240 | 000234 e590000c LDR r0,[r0,#0xc] 241 | 000238 e20060ff AND r6,r0,#0xff 242 | ;;;128 rIICCON = 0x2f; 243 | 00023c e3a0002f MOV r0,#0x2f 244 | 000240 e3a01315 MOV r1,#0x54000000 245 | 000244 e5810000 STR r0,[r1,#0] 246 | ;;;129 delay(1); 247 | 000248 e3a00001 MOV r0,#1 248 | 00024c ebfffffe BL delay 249 | ;;;130 250 | ;;;131 // Get data 251 | ;;;132 cRecvByte = rIICDS; 252 | 000250 e3a00315 MOV r0,#0x54000000 253 | 000254 e590000c LDR r0,[r0,#0xc] 254 | 000258 e20060ff AND r6,r0,#0xff 255 | ;;;133 256 | ;;;134 // End receive 257 | ;;;135 rIICSTAT = 0x90; // Stop Master Rx condition 258 | 00025c e3a00090 MOV r0,#0x90 259 | 000260 e3a01315 MOV r1,#0x54000000 260 | 000264 e5810004 STR r0,[r1,#4] 261 | ;;;136 rIICCON = 0xaf; // Resumes IIC operation. 262 | 000268 e3a000af MOV r0,#0xaf 263 | 00026c e5810000 STR r0,[r1,#0] 264 | ;;;137 delay(5); // Wait until stop condtion is in effect. 265 | 000270 e3a00005 MOV r0,#5 266 | 000274 ebfffffe BL delay 267 | ;;;138 268 | ;;;139 *pData = cRecvByte; 269 | 000278 e5c56000 STRB r6,[r5,#0] 270 | ;;;140 } 271 | 00027c e8bd41f0 POP {r4-r8,lr} 272 | 000280 e12fff1e BX lr 273 | ;;;141 274 | ENDP 275 | 276 | |L1.644| 277 | 000284 00000000 DCD f_nGetACK 278 | |L1.648| 279 | 000288 33fff000 DCD 0x33fff000 280 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/keyboard_test.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/keyboard_test.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/keyboard_test.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\keyboard_test.o: keyboard_test.c 2 | .\NOR FLASH\keyboard_test.o: ..\Common\Inc\2410lib.h 3 | .\NOR FLASH\keyboard_test.o: ..\Common\Inc\def.h 4 | .\NOR FLASH\keyboard_test.o: ..\Common\Inc\memcfg.h 5 | .\NOR FLASH\keyboard_test.o: ..\Common\Inc\option.h 6 | .\NOR FLASH\keyboard_test.o: ..\Common\Inc\register.h 7 | .\NOR FLASH\keyboard_test.o: ..\Common\Inc\2410addr.h 8 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/main.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/main.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/main.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\main.o: main.c 2 | .\NOR FLASH\main.o: ..\Common\Inc\2410lib.h 3 | .\NOR FLASH\main.o: ..\Common\Inc\def.h 4 | .\NOR FLASH\main.o: ..\Common\Inc\memcfg.h 5 | .\NOR FLASH\main.o: ..\Common\Inc\option.h 6 | .\NOR FLASH\main.o: ..\Common\Inc\register.h 7 | .\NOR FLASH\main.o: ..\Common\Inc\2410addr.h 8 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/main.txt: -------------------------------------------------------------------------------- 1 | ; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision 2 | ; commandline ArmCC [--debug -c --asm --interleave -o".\NOR FLASH\main.o" --depend=".\NOR FLASH\main.d" --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -I"D:\Program Files\Keil\ARM\INC\Samsung" --omf_browse=".\NOR FLASH\main.crf" main.c] 3 | ARM 4 | 5 | AREA ||.text||, CODE, READONLY, ALIGN=2 6 | 7 | main PROC 8 | ;;;28 int main(void) 9 | ;;;29 { 10 | 000000 e92d4010 PUSH {r4,lr} 11 | ;;;30 sys_init(); //Initial 2410X's Interrupt,Port and UART 12 | 000004 ebfffffe BL sys_init 13 | ;;;31 14 | ;;;32 15 | ;;;33 // g_nTimeout=10; 16 | ;;;34 keyboard_test(); 17 | 000008 ebfffffe BL keyboard_test 18 | ;;;35 while(1); 19 | 00000c e1a00000 MOV r0,r0 20 | |L1.16| 21 | 000010 eafffffe B |L1.16| 22 | ;;;36 } 23 | ;;;37 24 | ENDP 25 | 26 | 27 | __ARM_use_no_argv EQU 0 28 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/sys_init.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/sys_init.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/sys_init.d: -------------------------------------------------------------------------------- 1 | .\NOR FLASH\sys_init.o: ..\Common\Src\sys_init.c 2 | .\NOR FLASH\sys_init.o: D:\Program Files\Keil\ARM\RV31\INC\stdarg.h 3 | .\NOR FLASH\sys_init.o: D:\Program Files\Keil\ARM\RV31\INC\string.h 4 | .\NOR FLASH\sys_init.o: D:\Program Files\Keil\ARM\RV31\INC\stdio.h 5 | .\NOR FLASH\sys_init.o: D:\Program Files\Keil\ARM\RV31\INC\ctype.h 6 | .\NOR FLASH\sys_init.o: ..\Common\Inc\2410lib.h 7 | .\NOR FLASH\sys_init.o: ..\Common\Inc\def.h 8 | .\NOR FLASH\sys_init.o: ..\Common\Inc\memcfg.h 9 | .\NOR FLASH\sys_init.o: ..\Common\Inc\option.h 10 | .\NOR FLASH\sys_init.o: ..\Common\Inc\register.h 11 | .\NOR FLASH\sys_init.o: ..\Common\Inc\2410addr.h 12 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/sys_init.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/NOR FLASH/sys_init.txt -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM.ini: -------------------------------------------------------------------------------- 1 | /******************************************************************************/ 2 | /* SDRAM.INI: External RAM (SDRAM) Initialization File */ 3 | /******************************************************************************/ 4 | // <<< Use Configuration Wizard in Context Menu >>> // 5 | /******************************************************************************/ 6 | /* This file is part of the uVision/ARM development tools. */ 7 | /* Copyright (c) 2005-2006 Keil Software. All rights reserved. */ 8 | /* This software may only be used under the terms of a valid, current, */ 9 | /* end user licence from KEIL for a compatible version of KEIL software */ 10 | /* development tools. Nothing else gives you the right to use this software. */ 11 | /******************************************************************************/ 12 | 13 | 14 | FUNC void Setup (void) { 15 | 16 | _WDWORD(0x53000000, 0x00000000); 17 | 18 | _WDWORD(0x4A000008, 0xFFFFFFFF); 19 | _WDWORD(0x4A00001C, 0x000007FF); 20 | 21 | _WDWORD(0x4C000014, 0x00000003); 22 | _WDWORD(0x4C000004, 0x0005c042); 23 | 24 | _WDWORD(0x56000070, 0x00280000); 25 | _WDWORD(0x56000078, 0x00000000); 26 | 27 | _WDWORD(0x48000000, 0x22111110); 28 | _WDWORD(0x48000004, 0x00000700); 29 | _WDWORD(0x48000008, 0x00000700); 30 | _WDWORD(0x4800000C, 0x00000700); 31 | _WDWORD(0x48000010, 0x00000700); 32 | _WDWORD(0x48000014, 0x00000700); 33 | _WDWORD(0x48000018, 0x00000700); 34 | _WDWORD(0x4800001c, 0x00018005); 35 | _WDWORD(0x48000020, 0x00000700); 36 | _WDWORD(0x48000024, 0x008e0459); 37 | _WDWORD(0x48000028, 0x000000B2); 38 | _WDWORD(0x4800002c, 0x00000030); 39 | _WDWORD(0x48000030, 0x00000030); 40 | 41 | _WDWORD(0x56000014, 0x00000001); 42 | 43 | _WDWORD(0x56000020, 0xAAAA55AA); 44 | _WDWORD(0x56000028, 0x0000FFFF); 45 | _WDWORD(0x56000024, 0x00000000); 46 | 47 | } 48 | 49 | Setup(); // Setup for Init 50 | 51 | LOAD SDRAM\KeyBoardTest.axf INCREMENTAL // Download 52 | 53 | PC = 0x30000000; // Program Entry Point 54 | 55 | g, main // Run to main function 56 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/2410lib.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/2410lib.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/2410lib.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\2410lib.o: ..\Common\Src\2410lib.c 2 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\stdarg.h 3 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\string.h 4 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\stdio.h 5 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\ctype.h 6 | .\SDRAM\2410lib.o: D:\Keil\ARM\RV31\INC\stdlib.h 7 | .\SDRAM\2410lib.o: ..\Common\Inc\2410lib.h 8 | .\SDRAM\2410lib.o: ..\Common\Inc\def.h 9 | .\SDRAM\2410lib.o: ..\Common\Inc\memcfg.h 10 | .\SDRAM\2410lib.o: ..\Common\Inc\option.h 11 | .\SDRAM\2410lib.o: ..\Common\Inc\register.h 12 | .\SDRAM\2410lib.o: ..\Common\Inc\2410addr.h 13 | .\SDRAM\2410lib.o: ..\Common\Inc\2410slib.h 14 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/ExtDll.iex: -------------------------------------------------------------------------------- 1 | [EXTDLL] 2 | Count=0 3 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/KeyBoardTest.lnp: -------------------------------------------------------------------------------- 1 | ".\sdram\s3c2410a.o" ".\sdram\iic_8led.o" ".\sdram\iic_keybd.o" ".\sdram\keyboard_test.o" ".\sdram\main.o" ".\sdram\2410lib.o" ".\sdram\sys_init.o" --device DARMSS9 --strict --scatter ".\SDRAM\KeyBoardTest.sct" 2 | --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols 3 | --info sizes --info totals --info unused --info veneers 4 | --list ".\KeyBoardTest.map" -o ".\SDRAM\KeyBoardTest.axf" -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/KeyBoardTest.plg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/KeyBoardTest.plg -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/KeyBoardTest.sct: -------------------------------------------------------------------------------- 1 | ; ************************************************************* 2 | ; *** Scatter-Loading Description File generated by uVision *** 3 | ; ************************************************************* 4 | 5 | LR_ROM1 0x30000000 0x00010000 { ; load region size_region 6 | ER_ROM1 0x30000000 0x00010000 { ; load address = execution address 7 | *.o (RESET, +First) 8 | *(InRoot$$Sections) 9 | .ANY (+RO) 10 | } 11 | RW_RAM1 0x30010000 0x01000000 { ; RW data 12 | .ANY (+RW +ZI) 13 | } 14 | RW_IRAM1 0x40000000 0x00001000 { 15 | .ANY (+RW +ZI) 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/KeyBoardTest.tra: -------------------------------------------------------------------------------- 1 | *** Creating Trace Output File '.\SDRAM\KeyBoardTest.tra' Ok. 2 | ### Preparing for ADS-LD. 3 | ### Creating ADS-LD Command Line 4 | ### List of Objects: adding '".\sdram\s3c2410a.o"' 5 | ### List of Objects: adding '".\sdram\iic_8led.o"' 6 | ### List of Objects: adding '".\sdram\iic_keybd.o"' 7 | ### List of Objects: adding '".\sdram\keyboard_test.o"' 8 | ### List of Objects: adding '".\sdram\main.o"' 9 | ### List of Objects: adding '".\sdram\2410lib.o"' 10 | ### List of Objects: adding '".\sdram\sys_init.o"' 11 | ### ADS-LD Command completed: 12 | ".\sdram\s3c2410a.o" ".\sdram\iic_8led.o" ".\sdram\iic_keybd.o" ".\sdram\keyboard_test.o" ".\sdram\main.o" ".\sdram\2410lib.o" ".\sdram\sys_init.o" --device DARMSS9 --strict --scatter ".\SDRAM\KeyBoardTest.sct" 13 | --autoat --summary_stderr --info summarysizes --map --xref --callgraph --symbols 14 | --info sizes --info totals --info unused --info veneers 15 | --list ".\KeyBoardTest.map" -o ".\SDRAM\KeyBoardTest.axf"### Preparing Environment (PrepEnvAds) 16 | ### ADS-LD Output File: '.\SDRAM\KeyBoardTest.axf' 17 | ### ADS-LD Command File: '.\SDRAM\KeyBoardTest.lnp' 18 | ### Checking for dirty Components... 19 | ### Creating CmdFile '.\SDRAM\KeyBoardTest.lnp', Handle=0x00000254 20 | ### Writing '.lnp' file 21 | ### ADS-LD Command file '.\SDRAM\KeyBoardTest.lnp' is ready. 22 | ### ADS-LD: About to start ADS-LD Thread. 23 | ### ADS-LD: executed with 0 errors 24 | ### Updating obj list 25 | ### LDADS_file() completed. 26 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/iic_8led.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/iic_8led.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/iic_8led.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\iic_8led.o: iic_8led.c 2 | .\SDRAM\iic_8led.o: ..\Common\Inc\2410lib.h 3 | .\SDRAM\iic_8led.o: ..\Common\Inc\def.h 4 | .\SDRAM\iic_8led.o: ..\Common\Inc\memcfg.h 5 | .\SDRAM\iic_8led.o: ..\Common\Inc\option.h 6 | .\SDRAM\iic_8led.o: ..\Common\Inc\register.h 7 | .\SDRAM\iic_8led.o: ..\Common\Inc\2410addr.h 8 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/iic_8led.txt: -------------------------------------------------------------------------------- 1 | ; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision 2 | ; commandline ArmCC [--debug -c --asm --interleave -o.\SDRAM\iic_8led.o --depend=.\SDRAM\iic_8led.d --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -ID:\Keil\ARM\INC\Samsung --omf_browse=.\SDRAM\iic_8led.crf iic_8led.c] 3 | ARM 4 | 5 | AREA ||.text||, CODE, READONLY, ALIGN=2 6 | 7 | iic_int_8led PROC 8 | ;;;160 void __irq iic_int_8led(void) 9 | ;;;161 { 10 | 000000 e92d0003 PUSH {r0,r1} 11 | ;;;162 ClearPending(BIT_IIC); 12 | 000004 e3a00302 MOV r0,#0x8000000 13 | 000008 e3a0144a MOV r1,#0x4a000000 14 | 00000c e5810000 STR r0,[r1,#0] 15 | 000010 e3a0044a MOV r0,#0x4a000000 16 | 000014 e5900010 LDR r0,[r0,#0x10] 17 | 000018 e5810010 STR r0,[r1,#0x10] 18 | ;;;163 f_nGetACK = 1; 19 | 00001c e3a00001 MOV r0,#1 20 | 000020 e59f1260 LDR r1,|L1.648| 21 | 000024 e5810000 STR r0,[r1,#0] ; f_nGetACK 22 | ;;;164 } 23 | 000028 e8bd0003 POP {r0,r1} 24 | 00002c e25ef004 SUBS pc,lr,#4 25 | ENDP 26 | 27 | iic_init_8led PROC 28 | ;;;39 { 29 | ;;;40 f_nGetACK = 0; 30 | 000030 e3a00000 MOV r0,#0 31 | 000034 e59f124c LDR r1,|L1.648| 32 | 000038 e5810000 STR r0,[r1,#0] ; f_nGetACK 33 | ;;;41 34 | ;;;42 // Enable interrupt 35 | ;;;43 rINTMOD = 0x0; 36 | 00003c e3a0144a MOV r1,#0x4a000000 37 | 000040 e5810004 STR r0,[r1,#4] 38 | ;;;44 rSRCPND = rSRCPND; // clear all interrupt 39 | 000044 e3a0044a MOV r0,#0x4a000000 40 | 000048 e5900000 LDR r0,[r0,#0] 41 | 00004c e5810000 STR r0,[r1,#0] 42 | ;;;45 rINTPND = rINTPND; // clear all interrupt 43 | 000050 e3a0044a MOV r0,#0x4a000000 44 | 000054 e5900010 LDR r0,[r0,#0x10] 45 | 000058 e5810010 STR r0,[r1,#0x10] 46 | ;;;46 rINTMSK &= ~BIT_IIC; 47 | 00005c e3a0044a MOV r0,#0x4a000000 48 | 000060 e5900008 LDR r0,[r0,#8] 49 | 000064 e3c00302 BIC r0,r0,#0x8000000 50 | 000068 e5810008 STR r0,[r1,#8] 51 | ;;;47 pISR_IIC= (unsigned)iic_int_8led; 52 | 00006c e24f0074 ADR r0,iic_int_8led 53 | 000070 e59f1214 LDR r1,|L1.652| 54 | 000074 e5810f8c STR r0,[r1,#0xf8c] 55 | ;;;48 56 | ;;;49 // Initialize iic 57 | ;;;50 rIICADD = 0x10; // S3C2410X slave address 58 | 000078 e3a00010 MOV r0,#0x10 59 | 00007c e3a01315 MOV r1,#0x54000000 60 | 000080 e5810008 STR r0,[r1,#8] 61 | ;;;51 rIICCON = 0xef; // Enable ACK, interrupt, set IICCLK=MCLK/512 62 | 000084 e3a000ef MOV r0,#0xef 63 | 000088 e5810000 STR r0,[r1,#0] 64 | ;;;52 rIICSTAT= 0x10; // Enable TX/RX 65 | 00008c e3a00010 MOV r0,#0x10 66 | 000090 e5810004 STR r0,[r1,#4] 67 | ;;;53 } 68 | 000094 e12fff1e BX lr 69 | ;;;54 70 | ENDP 71 | 72 | iic_write_8led PROC 73 | ;;;67 void iic_write_8led(UINT32T unSlaveAddr,UINT32T unAddr,UINT8T ucData) 74 | ;;;68 { 75 | 000098 e92d4070 PUSH {r4-r6,lr} 76 | 00009c e1a04000 MOV r4,r0 77 | 0000a0 e1a05001 MOV r5,r1 78 | 0000a4 e1a06002 MOV r6,r2 79 | ;;;69 f_nGetACK = 0; 80 | 0000a8 e3a00000 MOV r0,#0 81 | 0000ac e59f11d4 LDR r1,|L1.648| 82 | 0000b0 e5810000 STR r0,[r1,#0] ; f_nGetACK 83 | ;;;70 84 | ;;;71 // Send control byte 85 | ;;;72 rIICDS = unSlaveAddr; // 0x70 86 | 0000b4 e3a00315 MOV r0,#0x54000000 87 | 0000b8 e580400c STR r4,[r0,#0xc] 88 | ;;;73 rIICSTAT = 0xf0; // Master Tx,Start 89 | 0000bc e3a000f0 MOV r0,#0xf0 90 | 0000c0 e3a01315 MOV r1,#0x54000000 91 | 0000c4 e5810004 STR r0,[r1,#4] 92 | ;;;74 while(f_nGetACK == 0); // Wait ACK 93 | 0000c8 e1a00000 MOV r0,r0 94 | |L1.204| 95 | 0000cc e59f01b4 LDR r0,|L1.648| 96 | 0000d0 e5900000 LDR r0,[r0,#0] ; f_nGetACK 97 | 0000d4 e3500000 CMP r0,#0 98 | 0000d8 0afffffb BEQ |L1.204| 99 | ;;;75 f_nGetACK = 0; 100 | 0000dc e3a00000 MOV r0,#0 101 | 0000e0 e59f11a0 LDR r1,|L1.648| 102 | 0000e4 e5810000 STR r0,[r1,#0] ; f_nGetACK 103 | ;;;76 104 | ;;;77 // Send address 105 | ;;;78 rIICDS = unAddr; 106 | 0000e8 e3a00315 MOV r0,#0x54000000 107 | 0000ec e580500c STR r5,[r0,#0xc] 108 | ;;;79 rIICCON = 0xef; // Resumes IIC operation. 109 | 0000f0 e3a000ef MOV r0,#0xef 110 | 0000f4 e3a01315 MOV r1,#0x54000000 111 | 0000f8 e5810000 STR r0,[r1,#0] 112 | ;;;80 while(f_nGetACK == 0); // Wait ACK 113 | 0000fc e1a00000 MOV r0,r0 114 | |L1.256| 115 | 000100 e59f0180 LDR r0,|L1.648| 116 | 000104 e5900000 LDR r0,[r0,#0] ; f_nGetACK 117 | 000108 e3500000 CMP r0,#0 118 | 00010c 0afffffb BEQ |L1.256| 119 | ;;;81 f_nGetACK = 0; 120 | 000110 e3a00000 MOV r0,#0 121 | 000114 e59f116c LDR r1,|L1.648| 122 | 000118 e5810000 STR r0,[r1,#0] ; f_nGetACK 123 | ;;;82 124 | ;;;83 // Send data 125 | ;;;84 rIICDS = ucData; 126 | 00011c e3a00315 MOV r0,#0x54000000 127 | 000120 e580600c STR r6,[r0,#0xc] 128 | ;;;85 rIICCON = 0xef; // Resumes IIC operation. 129 | 000124 e3a000ef MOV r0,#0xef 130 | 000128 e3a01315 MOV r1,#0x54000000 131 | 00012c e5810000 STR r0,[r1,#0] 132 | ;;;86 while(f_nGetACK == 0); // Wait ACK 133 | 000130 e1a00000 MOV r0,r0 134 | |L1.308| 135 | 000134 e59f014c LDR r0,|L1.648| 136 | 000138 e5900000 LDR r0,[r0,#0] ; f_nGetACK 137 | 00013c e3500000 CMP r0,#0 138 | 000140 0afffffb BEQ |L1.308| 139 | ;;;87 f_nGetACK = 0; 140 | 000144 e3a00000 MOV r0,#0 141 | 000148 e59f1138 LDR r1,|L1.648| 142 | 00014c e5810000 STR r0,[r1,#0] ; f_nGetACK 143 | ;;;88 144 | ;;;89 // End send 145 | ;;;90 rIICSTAT = 0xd0; // Stop Master Tx condition 146 | 000150 e3a000d0 MOV r0,#0xd0 147 | 000154 e3a01315 MOV r1,#0x54000000 148 | 000158 e5810004 STR r0,[r1,#4] 149 | ;;;91 rIICCON = 0xef; // Resumes IIC operation. 150 | 00015c e3a000ef MOV r0,#0xef 151 | 000160 e5810000 STR r0,[r1,#0] 152 | ;;;92 delay(5); // Wait until stop condtion is in effect. 153 | 000164 e3a00005 MOV r0,#5 154 | 000168 ebfffffe BL delay 155 | ;;;93 } 156 | 00016c e8bd4070 POP {r4-r6,lr} 157 | 000170 e12fff1e BX lr 158 | ;;;94 159 | ENDP 160 | 161 | iic_read_8led PROC 162 | ;;;111 void iic_read_8led(UINT32T unSlaveAddr,UINT32T unAddr,UINT8T *pData) 163 | ;;;112 { 164 | 000174 e92d41f0 PUSH {r4-r8,lr} 165 | 000178 e1a04000 MOV r4,r0 166 | 00017c e1a07001 MOV r7,r1 167 | 000180 e1a05002 MOV r5,r2 168 | ;;;113 char cRecvByte; 169 | ;;;114 170 | ;;;115 f_nGetACK = 0; 171 | 000184 e3a00000 MOV r0,#0 172 | 000188 e59f10f8 LDR r1,|L1.648| 173 | 00018c e5810000 STR r0,[r1,#0] ; f_nGetACK 174 | ;;;116 175 | ;;;117 // Send control byte 176 | ;;;118 rIICDS = unSlaveAddr; // Write slave address to IICDS 177 | 000190 e3a00315 MOV r0,#0x54000000 178 | 000194 e580400c STR r4,[r0,#0xc] 179 | ;;;119 rIICSTAT = 0xf0; // Master Tx,Start 180 | 000198 e3a000f0 MOV r0,#0xf0 181 | 00019c e3a01315 MOV r1,#0x54000000 182 | 0001a0 e5810004 STR r0,[r1,#4] 183 | ;;;120 while(f_nGetACK == 0); // Wait ACK 184 | 0001a4 e1a00000 MOV r0,r0 185 | |L1.424| 186 | 0001a8 e59f00d8 LDR r0,|L1.648| 187 | 0001ac e5900000 LDR r0,[r0,#0] ; f_nGetACK 188 | 0001b0 e3500000 CMP r0,#0 189 | 0001b4 0afffffb BEQ |L1.424| 190 | ;;;121 f_nGetACK = 0; 191 | 0001b8 e3a00000 MOV r0,#0 192 | 0001bc e59f10c4 LDR r1,|L1.648| 193 | 0001c0 e5810000 STR r0,[r1,#0] ; f_nGetACK 194 | ;;;122 195 | ;;;123 // Send address 196 | ;;;124 rIICDS = unAddr; 197 | 0001c4 e3a00315 MOV r0,#0x54000000 198 | 0001c8 e580700c STR r7,[r0,#0xc] 199 | ;;;125 rIICCON = 0xef; // Resumes IIC operation. 200 | 0001cc e3a000ef MOV r0,#0xef 201 | 0001d0 e3a01315 MOV r1,#0x54000000 202 | 0001d4 e5810000 STR r0,[r1,#0] 203 | ;;;126 while(f_nGetACK == 0); // Wait ACK 204 | 0001d8 e1a00000 MOV r0,r0 205 | |L1.476| 206 | 0001dc e59f00a4 LDR r0,|L1.648| 207 | 0001e0 e5900000 LDR r0,[r0,#0] ; f_nGetACK 208 | 0001e4 e3500000 CMP r0,#0 209 | 0001e8 0afffffb BEQ |L1.476| 210 | ;;;127 f_nGetACK = 0; 211 | 0001ec e3a00000 MOV r0,#0 212 | 0001f0 e59f1090 LDR r1,|L1.648| 213 | 0001f4 e5810000 STR r0,[r1,#0] ; f_nGetACK 214 | ;;;128 215 | ;;;129 // Send control byte 216 | ;;;130 rIICDS = unSlaveAddr; // 0x70 217 | 0001f8 e3a00315 MOV r0,#0x54000000 218 | 0001fc e580400c STR r4,[r0,#0xc] 219 | ;;;131 rIICSTAT = 0xb0; // Master Rx,Start 220 | 000200 e3a000b0 MOV r0,#0xb0 221 | 000204 e3a01315 MOV r1,#0x54000000 222 | 000208 e5810004 STR r0,[r1,#4] 223 | ;;;132 rIICCON = 0xef; // Resumes IIC operation. 224 | 00020c e3a000ef MOV r0,#0xef 225 | 000210 e5810000 STR r0,[r1,#0] 226 | ;;;133 while(f_nGetACK == 0); // Wait ACK 227 | 000214 e1a00000 MOV r0,r0 228 | |L1.536| 229 | 000218 e59f0068 LDR r0,|L1.648| 230 | 00021c e5900000 LDR r0,[r0,#0] ; f_nGetACK 231 | 000220 e3500000 CMP r0,#0 232 | 000224 0afffffb BEQ |L1.536| 233 | ;;;134 f_nGetACK = 0; 234 | 000228 e3a00000 MOV r0,#0 235 | 00022c e59f1054 LDR r1,|L1.648| 236 | 000230 e5810000 STR r0,[r1,#0] ; f_nGetACK 237 | ;;;135 238 | ;;;136 // Get data 239 | ;;;137 cRecvByte = rIICDS; 240 | 000234 e3a00315 MOV r0,#0x54000000 241 | 000238 e590000c LDR r0,[r0,#0xc] 242 | 00023c e20060ff AND r6,r0,#0xff 243 | ;;;138 rIICCON = 0x2f; 244 | 000240 e3a0002f MOV r0,#0x2f 245 | 000244 e3a01315 MOV r1,#0x54000000 246 | 000248 e5810000 STR r0,[r1,#0] 247 | ;;;139 delay(1); 248 | 00024c e3a00001 MOV r0,#1 249 | 000250 ebfffffe BL delay 250 | ;;;140 251 | ;;;141 // Get data 252 | ;;;142 cRecvByte = rIICDS; 253 | 000254 e3a00315 MOV r0,#0x54000000 254 | 000258 e590000c LDR r0,[r0,#0xc] 255 | 00025c e20060ff AND r6,r0,#0xff 256 | ;;;143 257 | ;;;144 // End receive 258 | ;;;145 rIICSTAT = 0x90; // Stop Master Rx condition 259 | 000260 e3a00090 MOV r0,#0x90 260 | 000264 e3a01315 MOV r1,#0x54000000 261 | 000268 e5810004 STR r0,[r1,#4] 262 | ;;;146 rIICCON = 0xef; // Resumes IIC operation. 263 | 00026c e3a000ef MOV r0,#0xef 264 | 000270 e5810000 STR r0,[r1,#0] 265 | ;;;147 delay(5); // Wait until stop condtion is in effect. 266 | 000274 e3a00005 MOV r0,#5 267 | 000278 ebfffffe BL delay 268 | ;;;148 269 | ;;;149 *pData = cRecvByte; 270 | 00027c e5c56000 STRB r6,[r5,#0] 271 | ;;;150 } 272 | 000280 e8bd41f0 POP {r4-r8,lr} 273 | 000284 e12fff1e BX lr 274 | ;;;151 275 | ENDP 276 | 277 | |L1.648| 278 | 000288 00000000 DCD f_nGetACK 279 | |L1.652| 280 | 00028c 33fff000 DCD 0x33fff000 281 | 282 | AREA ||.data||, DATA, ALIGN=2 283 | 284 | f_nGetACK 285 | 000000 00000000 DCD 0x00000000 286 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/iic_keybd.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/iic_keybd.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/iic_keybd.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\iic_keybd.o: iic_keybd.c 2 | .\SDRAM\iic_keybd.o: ..\Common\Inc\2410lib.h 3 | .\SDRAM\iic_keybd.o: ..\Common\Inc\def.h 4 | .\SDRAM\iic_keybd.o: ..\Common\Inc\memcfg.h 5 | .\SDRAM\iic_keybd.o: ..\Common\Inc\option.h 6 | .\SDRAM\iic_keybd.o: ..\Common\Inc\register.h 7 | .\SDRAM\iic_keybd.o: ..\Common\Inc\2410addr.h 8 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/iic_keybd.txt: -------------------------------------------------------------------------------- 1 | ; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision 2 | ; commandline ArmCC [--debug -c --asm --interleave -o.\SDRAM\iic_keybd.o --depend=.\SDRAM\iic_keybd.d --device=DARMSS9 --apcs=interwork -O0 -I..\Common\Inc -I.\Include -ID:\Keil\ARM\INC\Samsung --omf_browse=.\SDRAM\iic_keybd.crf iic_keybd.c] 3 | ARM 4 | 5 | AREA ||.text||, CODE, READONLY, ALIGN=2 6 | 7 | iic_int_keybd PROC 8 | ;;;150 void __irq iic_int_keybd(void) 9 | ;;;151 { 10 | 000000 e92d0003 PUSH {r0,r1} 11 | ;;;152 ClearPending(BIT_IIC); 12 | 000004 e3a00302 MOV r0,#0x8000000 13 | 000008 e3a0144a MOV r1,#0x4a000000 14 | 00000c e5810000 STR r0,[r1,#0] 15 | 000010 e3a0044a MOV r0,#0x4a000000 16 | 000014 e5900010 LDR r0,[r0,#0x10] 17 | 000018 e5810010 STR r0,[r1,#0x10] 18 | ;;;153 f_nGetACK = 1; 19 | 00001c e3a00001 MOV r0,#1 20 | 000020 e59f125c LDR r1,|L1.644| 21 | 000024 e5810000 STR r0,[r1,#0] ; f_nGetACK 22 | ;;;154 } 23 | 000028 e8bd0003 POP {r0,r1} 24 | 00002c e25ef004 SUBS pc,lr,#4 25 | ENDP 26 | 27 | iic_init_keybd PROC 28 | ;;;37 { 29 | ;;;38 f_nGetACK = 0; 30 | 000030 e3a00000 MOV r0,#0 31 | 000034 e59f1248 LDR r1,|L1.644| 32 | 000038 e5810000 STR r0,[r1,#0] ; f_nGetACK 33 | ;;;39 34 | ;;;40 // Enable interrupt 35 | ;;;41 rINTMOD = 0x0; 36 | 00003c e3a0144a MOV r1,#0x4a000000 37 | 000040 e5810004 STR r0,[r1,#4] 38 | ;;;42 rSRCPND = rSRCPND; // clear all interrupt 39 | 000044 e3a0044a MOV r0,#0x4a000000 40 | 000048 e5900000 LDR r0,[r0,#0] 41 | 00004c e5810000 STR r0,[r1,#0] 42 | ;;;43 rINTPND = rINTPND; // clear all interrupt 43 | 000050 e3a0044a MOV r0,#0x4a000000 44 | 000054 e5900010 LDR r0,[r0,#0x10] 45 | 000058 e5810010 STR r0,[r1,#0x10] 46 | ;;;44 rINTMSK &= ~(BIT_IIC|BIT_EINT1); 47 | 00005c e3a0044a MOV r0,#0x4a000000 48 | 000060 e5900008 LDR r0,[r0,#8] 49 | 000064 e3c00382 BIC r0,r0,#0x8000002 50 | 000068 e5810008 STR r0,[r1,#8] 51 | ;;;45 pISR_IIC= (unsigned)iic_int_keybd; 52 | 00006c e24f0074 ADR r0,iic_int_keybd 53 | 000070 e59f1210 LDR r1,|L1.648| 54 | 000074 e5810f8c STR r0,[r1,#0xf8c] 55 | ;;;46 56 | ;;;47 // Initialize iic 57 | ;;;48 rIICADD = 0x10; // S3C2410X slave address 58 | 000078 e3a00010 MOV r0,#0x10 59 | 00007c e3a01315 MOV r1,#0x54000000 60 | 000080 e5810008 STR r0,[r1,#8] 61 | ;;;49 rIICCON = 0xaf; // Enable ACK, interrupt, set IICCLK=MCLK/16 62 | 000084 e3a000af MOV r0,#0xaf 63 | 000088 e5810000 STR r0,[r1,#0] 64 | ;;;50 rIICSTAT= 0x10; // Enable TX/RX 65 | 00008c e3a00010 MOV r0,#0x10 66 | 000090 e5810004 STR r0,[r1,#4] 67 | ;;;51 } 68 | 000094 e12fff1e BX lr 69 | ;;;52 70 | ENDP 71 | 72 | iic_write_keybd PROC 73 | ;;;64 { 74 | ;;;65 f_nGetACK = 0; 75 | 000098 e3a03000 MOV r3,#0 76 | 00009c e59fc1e0 LDR r12,|L1.644| 77 | 0000a0 e58c3000 STR r3,[r12,#0] ; f_nGetACK 78 | ;;;66 79 | ;;;67 // Send control byte 80 | ;;;68 rIICDS = unSlaveAddr; // 0x70 81 | 0000a4 e3a03315 MOV r3,#0x54000000 82 | 0000a8 e583000c STR r0,[r3,#0xc] 83 | ;;;69 rIICSTAT = 0xf0; // Master Tx,Start 84 | 0000ac e3a030f0 MOV r3,#0xf0 85 | 0000b0 e3a0c315 MOV r12,#0x54000000 86 | 0000b4 e58c3004 STR r3,[r12,#4] 87 | ;;;70 while(f_nGetACK == 0); // Wait ACK 88 | 0000b8 e1a00000 MOV r0,r0 89 | |L1.188| 90 | 0000bc e59f31c0 LDR r3,|L1.644| 91 | 0000c0 e5933000 LDR r3,[r3,#0] ; f_nGetACK 92 | 0000c4 e3530000 CMP r3,#0 93 | 0000c8 0afffffb BEQ |L1.188| 94 | ;;;71 f_nGetACK = 0; 95 | 0000cc e3a03000 MOV r3,#0 96 | 0000d0 e59fc1ac LDR r12,|L1.644| 97 | 0000d4 e58c3000 STR r3,[r12,#0] ; f_nGetACK 98 | ;;;72 99 | ;;;73 // Send address 100 | ;;;74 rIICDS = unAddr; 101 | 0000d8 e3a03315 MOV r3,#0x54000000 102 | 0000dc e583100c STR r1,[r3,#0xc] 103 | ;;;75 rIICCON = 0xaf; // Resumes IIC operation. 104 | 0000e0 e3a030af MOV r3,#0xaf 105 | 0000e4 e3a0c315 MOV r12,#0x54000000 106 | 0000e8 e58c3000 STR r3,[r12,#0] 107 | ;;;76 while(f_nGetACK == 0); // Wait ACK 108 | 0000ec e1a00000 MOV r0,r0 109 | |L1.240| 110 | 0000f0 e59f318c LDR r3,|L1.644| 111 | 0000f4 e5933000 LDR r3,[r3,#0] ; f_nGetACK 112 | 0000f8 e3530000 CMP r3,#0 113 | 0000fc 0afffffb BEQ |L1.240| 114 | ;;;77 f_nGetACK = 0; 115 | 000100 e3a03000 MOV r3,#0 116 | 000104 e59fc178 LDR r12,|L1.644| 117 | 000108 e58c3000 STR r3,[r12,#0] ; f_nGetACK 118 | ;;;78 119 | ;;;79 // Send data 120 | ;;;80 rIICDS = ucData; 121 | 00010c e3a03315 MOV r3,#0x54000000 122 | 000110 e583200c STR r2,[r3,#0xc] 123 | ;;;81 rIICCON = 0xaf; // Resumes IIC operation. 124 | 000114 e3a030af MOV r3,#0xaf 125 | 000118 e3a0c315 MOV r12,#0x54000000 126 | 00011c e58c3000 STR r3,[r12,#0] 127 | ;;;82 while(f_nGetACK == 0); // Wait ACK 128 | 000120 e1a00000 MOV r0,r0 129 | |L1.292| 130 | 000124 e59f3158 LDR r3,|L1.644| 131 | 000128 e5933000 LDR r3,[r3,#0] ; f_nGetACK 132 | 00012c e3530000 CMP r3,#0 133 | 000130 0afffffb BEQ |L1.292| 134 | ;;;83 f_nGetACK = 0; 135 | 000134 e3a03000 MOV r3,#0 136 | 000138 e59fc144 LDR r12,|L1.644| 137 | 00013c e58c3000 STR r3,[r12,#0] ; f_nGetACK 138 | ;;;84 139 | ;;;85 // End send 140 | ;;;86 rIICSTAT = 0xd0; // Stop Master Tx condition 141 | 000140 e3a030d0 MOV r3,#0xd0 142 | 000144 e3a0c315 MOV r12,#0x54000000 143 | 000148 e58c3004 STR r3,[r12,#4] 144 | ;;;87 rIICCON = 0xaf; // Resumes IIC operation. 145 | 00014c e3a030af MOV r3,#0xaf 146 | 000150 e58c3000 STR r3,[r12,#0] 147 | ;;;88 while(rIICSTAT & 0x20 == 1); // Wait until stop condtion is in effect. 148 | 000154 e1a00000 MOV r0,r0 149 | |L1.344| 150 | 000158 e3a03315 MOV r3,#0x54000000 151 | 00015c e5933004 LDR r3,[r3,#4] 152 | 000160 e3a03000 MOV r3,#0 153 | 000164 e3530000 CMP r3,#0 154 | 000168 1afffffa BNE |L1.344| 155 | ;;;89 } 156 | 00016c e12fff1e BX lr 157 | ;;;90 158 | ENDP 159 | 160 | iic_read_keybd PROC 161 | ;;;101 void iic_read_keybd(UINT32T unSlaveAddr,UINT32T unAddr,UINT8T *pData) 162 | ;;;102 { 163 | 000170 e92d41f0 PUSH {r4-r8,lr} 164 | 000174 e1a04000 MOV r4,r0 165 | 000178 e1a07001 MOV r7,r1 166 | 00017c e1a05002 MOV r5,r2 167 | ;;;103 char cRecvByte; 168 | ;;;104 169 | ;;;105 f_nGetACK = 0; 170 | 000180 e3a00000 MOV r0,#0 171 | 000184 e59f10f8 LDR r1,|L1.644| 172 | 000188 e5810000 STR r0,[r1,#0] ; f_nGetACK 173 | ;;;106 174 | ;;;107 // Send control byte 175 | ;;;108 rIICDS = unSlaveAddr; // Write slave address to IICDS 176 | 00018c e3a00315 MOV r0,#0x54000000 177 | 000190 e580400c STR r4,[r0,#0xc] 178 | ;;;109 rIICSTAT = 0xf0; // Master Tx,Start 179 | 000194 e3a000f0 MOV r0,#0xf0 180 | 000198 e3a01315 MOV r1,#0x54000000 181 | 00019c e5810004 STR r0,[r1,#4] 182 | ;;;110 while(f_nGetACK == 0); // Wait ACK 183 | 0001a0 e1a00000 MOV r0,r0 184 | |L1.420| 185 | 0001a4 e59f00d8 LDR r0,|L1.644| 186 | 0001a8 e5900000 LDR r0,[r0,#0] ; f_nGetACK 187 | 0001ac e3500000 CMP r0,#0 188 | 0001b0 0afffffb BEQ |L1.420| 189 | ;;;111 f_nGetACK = 0; 190 | 0001b4 e3a00000 MOV r0,#0 191 | 0001b8 e59f10c4 LDR r1,|L1.644| 192 | 0001bc e5810000 STR r0,[r1,#0] ; f_nGetACK 193 | ;;;112 194 | ;;;113 // Send address 195 | ;;;114 rIICDS = unAddr; 196 | 0001c0 e3a00315 MOV r0,#0x54000000 197 | 0001c4 e580700c STR r7,[r0,#0xc] 198 | ;;;115 rIICCON = 0xaf; // Resumes IIC operation. 199 | 0001c8 e3a000af MOV r0,#0xaf 200 | 0001cc e3a01315 MOV r1,#0x54000000 201 | 0001d0 e5810000 STR r0,[r1,#0] 202 | ;;;116 while(f_nGetACK == 0); // Wait ACK 203 | 0001d4 e1a00000 MOV r0,r0 204 | |L1.472| 205 | 0001d8 e59f00a4 LDR r0,|L1.644| 206 | 0001dc e5900000 LDR r0,[r0,#0] ; f_nGetACK 207 | 0001e0 e3500000 CMP r0,#0 208 | 0001e4 0afffffb BEQ |L1.472| 209 | ;;;117 f_nGetACK = 0; 210 | 0001e8 e3a00000 MOV r0,#0 211 | 0001ec e59f1090 LDR r1,|L1.644| 212 | 0001f0 e5810000 STR r0,[r1,#0] ; f_nGetACK 213 | ;;;118 214 | ;;;119 // Send control byte 215 | ;;;120 rIICDS = unSlaveAddr; // 0x70 216 | 0001f4 e3a00315 MOV r0,#0x54000000 217 | 0001f8 e580400c STR r4,[r0,#0xc] 218 | ;;;121 rIICSTAT = 0xb0; // Master Rx,Start 219 | 0001fc e3a000b0 MOV r0,#0xb0 220 | 000200 e3a01315 MOV r1,#0x54000000 221 | 000204 e5810004 STR r0,[r1,#4] 222 | ;;;122 rIICCON = 0xaf; // Resumes IIC operation. 223 | 000208 e3a000af MOV r0,#0xaf 224 | 00020c e5810000 STR r0,[r1,#0] 225 | ;;;123 while(f_nGetACK == 0); // Wait ACK 226 | 000210 e1a00000 MOV r0,r0 227 | |L1.532| 228 | 000214 e59f0068 LDR r0,|L1.644| 229 | 000218 e5900000 LDR r0,[r0,#0] ; f_nGetACK 230 | 00021c e3500000 CMP r0,#0 231 | 000220 0afffffb BEQ |L1.532| 232 | ;;;124 f_nGetACK = 0; 233 | 000224 e3a00000 MOV r0,#0 234 | 000228 e59f1054 LDR r1,|L1.644| 235 | 00022c e5810000 STR r0,[r1,#0] ; f_nGetACK 236 | ;;;125 237 | ;;;126 // Get data 238 | ;;;127 cRecvByte = rIICDS; 239 | 000230 e3a00315 MOV r0,#0x54000000 240 | 000234 e590000c LDR r0,[r0,#0xc] 241 | 000238 e20060ff AND r6,r0,#0xff 242 | ;;;128 rIICCON = 0x2f; 243 | 00023c e3a0002f MOV r0,#0x2f 244 | 000240 e3a01315 MOV r1,#0x54000000 245 | 000244 e5810000 STR r0,[r1,#0] 246 | ;;;129 delay(1); 247 | 000248 e3a00001 MOV r0,#1 248 | 00024c ebfffffe BL delay 249 | ;;;130 250 | ;;;131 // Get data 251 | ;;;132 cRecvByte = rIICDS; 252 | 000250 e3a00315 MOV r0,#0x54000000 253 | 000254 e590000c LDR r0,[r0,#0xc] 254 | 000258 e20060ff AND r6,r0,#0xff 255 | ;;;133 256 | ;;;134 // End receive 257 | ;;;135 rIICSTAT = 0x90; // Stop Master Rx condition 258 | 00025c e3a00090 MOV r0,#0x90 259 | 000260 e3a01315 MOV r1,#0x54000000 260 | 000264 e5810004 STR r0,[r1,#4] 261 | ;;;136 rIICCON = 0xaf; // Resumes IIC operation. 262 | 000268 e3a000af MOV r0,#0xaf 263 | 00026c e5810000 STR r0,[r1,#0] 264 | ;;;137 delay(5); // Wait until stop condtion is in effect. 265 | 000270 e3a00005 MOV r0,#5 266 | 000274 ebfffffe BL delay 267 | ;;;138 268 | ;;;139 *pData = cRecvByte; 269 | 000278 e5c56000 STRB r6,[r5,#0] 270 | ;;;140 } 271 | 00027c e8bd41f0 POP {r4-r8,lr} 272 | 000280 e12fff1e BX lr 273 | ;;;141 274 | ENDP 275 | 276 | |L1.644| 277 | 000284 00000000 DCD f_nGetACK 278 | |L1.648| 279 | 000288 33fff000 DCD 0x33fff000 280 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/keyboard_test.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/keyboard_test.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/keyboard_test.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\keyboard_test.o: keyboard_test.c 2 | .\SDRAM\keyboard_test.o: ..\Common\Inc\2410lib.h 3 | .\SDRAM\keyboard_test.o: ..\Common\Inc\def.h 4 | .\SDRAM\keyboard_test.o: ..\Common\Inc\memcfg.h 5 | .\SDRAM\keyboard_test.o: ..\Common\Inc\option.h 6 | .\SDRAM\keyboard_test.o: ..\Common\Inc\register.h 7 | .\SDRAM\keyboard_test.o: ..\Common\Inc\2410addr.h 8 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/main.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/main.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/main.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\main.o: main.c 2 | .\SDRAM\main.o: ..\Common\Inc\2410lib.h 3 | .\SDRAM\main.o: ..\Common\Inc\def.h 4 | .\SDRAM\main.o: ..\Common\Inc\memcfg.h 5 | .\SDRAM\main.o: ..\Common\Inc\option.h 6 | .\SDRAM\main.o: ..\Common\Inc\register.h 7 | .\SDRAM\main.o: ..\Common\Inc\2410addr.h 8 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/sys_init.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/sys_init.crf -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/sys_init.d: -------------------------------------------------------------------------------- 1 | .\SDRAM\sys_init.o: ..\Common\Src\sys_init.c 2 | .\SDRAM\sys_init.o: D:\Keil\ARM\RV31\INC\stdarg.h 3 | .\SDRAM\sys_init.o: D:\Keil\ARM\RV31\INC\string.h 4 | .\SDRAM\sys_init.o: D:\Keil\ARM\RV31\INC\stdio.h 5 | .\SDRAM\sys_init.o: D:\Keil\ARM\RV31\INC\ctype.h 6 | .\SDRAM\sys_init.o: ..\Common\Inc\2410lib.h 7 | .\SDRAM\sys_init.o: ..\Common\Inc\def.h 8 | .\SDRAM\sys_init.o: ..\Common\Inc\memcfg.h 9 | .\SDRAM\sys_init.o: ..\Common\Inc\option.h 10 | .\SDRAM\sys_init.o: ..\Common\Inc\register.h 11 | .\SDRAM\sys_init.o: ..\Common\Inc\2410addr.h 12 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/sys_init.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/SDRAM/sys_init.txt -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/iic_8led.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/iic_8led.c -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/iic_keybd.c: -------------------------------------------------------------------------------- 1 | /********************************************************************************************* 2 | * File name: iic.c 3 | * Author: Embest 4 | * Descript: iic source code. 5 | * History: 6 | * Y.J.Guo, Programming start, April 4, 2005 7 | *********************************************************************************************/ 8 | 9 | /*------------------------------------------------------------------------------------------*/ 10 | /* include files */ 11 | /*------------------------------------------------------------------------------------------*/ 12 | #include "2410lib.h" 13 | //#include "iic_keybd.h" 14 | 15 | /*------------------------------------------------------------------------------------------*/ 16 | /* global variables */ 17 | /*------------------------------------------------------------------------------------------*/ 18 | extern int f_nGetACK; 19 | 20 | /*------------------------------------------------------------------------------------------*/ 21 | /* function declare */ 22 | /*------------------------------------------------------------------------------------------*/ 23 | void __irq iic_int_keybd(void) ; 24 | void iic_init_keybd(void); 25 | void iic_write_keybd(UINT32T unSlaveAddr, UINT32T unAddr, UINT8T ucData); 26 | void iic_read_keybd(UINT32T unSlaveAddr, UINT32T unAddr, UINT8T *pData); 27 | 28 | /********************************************************************************************* 29 | * name: iic_init_keybd 30 | * func: initialize iic 31 | * para: none 32 | * ret: none 33 | * modify: 34 | * comment: 35 | *********************************************************************************************/ 36 | void iic_init_keybd(void) 37 | { 38 | f_nGetACK = 0; 39 | 40 | // Enable interrupt 41 | rINTMOD = 0x0; 42 | rSRCPND = rSRCPND; // clear all interrupt 43 | rINTPND = rINTPND; // clear all interrupt 44 | rINTMSK &= ~(BIT_IIC|BIT_EINT1); 45 | pISR_IIC= (unsigned)iic_int_keybd; 46 | 47 | // Initialize iic 48 | rIICADD = 0x10; // S3C2410X slave address 49 | rIICCON = 0xaf; // Enable ACK, interrupt, set IICCLK=MCLK/16 50 | rIICSTAT= 0x10; // Enable TX/RX 51 | } 52 | 53 | /********************************************************************************************* 54 | * name: iic_write_keybd 55 | * func: write data to iic 56 | * para: unSlaveAddr --- input, chip slave address 57 | * unAddr --- input, data address 58 | * ucData --- input, data value 59 | * ret: none 60 | * modify: 61 | * comment: 62 | *********************************************************************************************/ 63 | void iic_write_keybd(UINT32T unSlaveAddr,UINT32T unAddr,UINT8T ucData) 64 | { 65 | f_nGetACK = 0; 66 | 67 | // Send control byte 68 | rIICDS = unSlaveAddr; // 0x70 69 | rIICSTAT = 0xf0; // Master Tx,Start 70 | while(f_nGetACK == 0); // Wait ACK 71 | f_nGetACK = 0; 72 | 73 | // Send address 74 | rIICDS = unAddr; 75 | rIICCON = 0xaf; // Resumes IIC operation. 76 | while(f_nGetACK == 0); // Wait ACK 77 | f_nGetACK = 0; 78 | 79 | // Send data 80 | rIICDS = ucData; 81 | rIICCON = 0xaf; // Resumes IIC operation. 82 | while(f_nGetACK == 0); // Wait ACK 83 | f_nGetACK = 0; 84 | 85 | // End send 86 | rIICSTAT = 0xd0; // Stop Master Tx condition 87 | rIICCON = 0xaf; // Resumes IIC operation. 88 | while(rIICSTAT & 0x20 == 1); // Wait until stop condtion is in effect. 89 | } 90 | 91 | /********************************************************************************************* 92 | * name: iic_read_keybd 93 | * func: read data from iic 94 | * para: unSlaveAddr --- input, chip slave address 95 | * unAddr --- input, data address 96 | * pData --- output, data pointer 97 | * ret: none 98 | * modify: 99 | * comment: 100 | *********************************************************************************************/ 101 | void iic_read_keybd(UINT32T unSlaveAddr,UINT32T unAddr,UINT8T *pData) 102 | { 103 | char cRecvByte; 104 | 105 | f_nGetACK = 0; 106 | 107 | // Send control byte 108 | rIICDS = unSlaveAddr; // Write slave address to IICDS 109 | rIICSTAT = 0xf0; // Master Tx,Start 110 | while(f_nGetACK == 0); // Wait ACK 111 | f_nGetACK = 0; 112 | 113 | // Send address 114 | rIICDS = unAddr; 115 | rIICCON = 0xaf; // Resumes IIC operation. 116 | while(f_nGetACK == 0); // Wait ACK 117 | f_nGetACK = 0; 118 | 119 | // Send control byte 120 | rIICDS = unSlaveAddr; // 0x70 121 | rIICSTAT = 0xb0; // Master Rx,Start 122 | rIICCON = 0xaf; // Resumes IIC operation. 123 | while(f_nGetACK == 0); // Wait ACK 124 | f_nGetACK = 0; 125 | 126 | // Get data 127 | cRecvByte = rIICDS; 128 | rIICCON = 0x2f; 129 | delay(1); 130 | 131 | // Get data 132 | cRecvByte = rIICDS; 133 | 134 | // End receive 135 | rIICSTAT = 0x90; // Stop Master Rx condition 136 | rIICCON = 0xaf; // Resumes IIC operation. 137 | delay(5); // Wait until stop condtion is in effect. 138 | 139 | *pData = cRecvByte; 140 | } 141 | 142 | /********************************************************************************************* 143 | * name: iic_int_keybd 144 | * func: IIC interrupt handler 145 | * para: none 146 | * ret: none 147 | * modify: 148 | * comment: 149 | *********************************************************************************************/ 150 | void __irq iic_int_keybd(void) 151 | { 152 | ClearPending(BIT_IIC); 153 | f_nGetACK = 1; 154 | } 155 | -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/keyboard_test.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/keyboard_test.c -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/main.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/main.c -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/12_KeyBoardTest/readme.txt -------------------------------------------------------------------------------- /EmbeddedSystem/UART_and_KeyBoard/串口通信与键盘控制.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/UART_and_KeyBoard/串口通信与键盘控制.pptx -------------------------------------------------------------------------------- /EmbeddedSystem/embedded_software_design/ARM_architecture.md: -------------------------------------------------------------------------------- 1 | # CISC体系结构和RISC体系结构 2 | ## 计算机体系结构 3 | 计算机体系结构是指从用户角度看到的计算机属性,其中包括计算机的指令集、可见存储器、存储器管理单元和异常处理模式等。 4 | 5 | ## CISC体系结构 6 | CISC(Complex Instruction Set Computer),指的是复杂指令集计算机。其顺应的是上世纪80年代之前的增加指令集的复杂程度提升计算机的综合性能的整体思路,但是其自身却有着许多的缺点。 7 | 主要有: 8 | 9 | - 设计周期延长,资金耗费增加; 10 | - 20%与80%的问题。复杂指令集计算机中仅有五分之一的指令是被经常调用的,而另外的指令实际上相对而言是一种冗余,或者说这一部分实际上是完全没有必要存在的; 11 | - 指令复杂度对处理器的VLSI实现性能的影响---暂时不是太明白 12 | - 软硬件的协同设计问题。指令集的增加,必然带来了软硬件协同设计上的难度增加; 13 | 14 | ## RISC体系结构 15 | RISC(Reduced Instruction Set Computer), 顾名思义,其是精简指令集计算机。RISC体系结构具有的优点是 16 | 17 | - 指令类型少; 18 | - 指令格式和长度固定 19 | - 优化编译效率高 20 | - 大多数指令单周期完成 21 | - 分开的Load/Store结构的存取指令 22 | - 基于多个通用寄存器堆操作 23 | 24 | (**注:**)暂时对于后面三点不是太理解 25 | 26 | RISC的历史贡献 27 | 28 | - 流水线 29 | - 高时钟频率和单周期执行 30 | 31 | **注:** 有时嵌入式系统会限制RISC的高时钟频率,因为时钟频率的增加直接伴随着耗电量的增加。 32 | 33 | 特别值得注意的是,RISC结构不能够执行X86代码,同时给优化编译程序带来了较大的困难,其优点都是相对于CISC而言的。 34 | ARM是第一个为商业用途而开发的RISC微处理器。 35 | # ARM体系结构的发展概述 36 | 关于ARM体系结构详细的发展历程,具体可以参看PPT相关资料。以下介绍几个比较有意思而PPT中基本没有提到的内容。 37 | ARM--Advanced RISC Machines 38 | ARM公司只卖关于产品架构的授权,而不卖具体的产品。 39 | 一般在移动设备上使用较多的都是Cortex-A型处理器,与此同时,由于竞争等原因,因此相对而言奇数位的ARM处理器市场占有率更高。 40 | # 典型的ARM CPU Core体系结构 41 | ## ARM7TDMI 42 | ARM7处理器采用冯诺依曼结构,指令和数据公用一条32位总线。只有装载、存储和交换指令可以对存储器中的数据进行访问。 43 | ARM7采用的是“冯·诺依曼结构”,而ARM9则采用的是“哈佛”结构。 44 | 首先来谈一谈冯诺依曼结构: 45 | 冯诺依曼结构就是将程序和数据都存储在同一个存储器中,其优点是结构简单,但是由于其不能同时进行取址和取数据的操作,因此其处理速度相对较慢。 46 | 47 | ![这里写图片描述](http://img.blog.csdn.net/20170302200413480?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 48 | 49 | ### 三级流水线 50 | ARM7处理器使用的是三级流水线来提高运行的效率。其后,流水线技术在ARM系列产品以及其他处理器中得到了广泛的运用。 51 | ARM7流水线可以分为三级,分别为取指-->译码-->执行。 52 | 53 | 如下概念图所示: 54 | 55 | ![这里写图片描述](http://img.blog.csdn.net/20170302200747700?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 56 | 57 | 其中ARM7具有两套指令集,一套是32位的ARM指令集,一套是16位的Thumb指令集。 58 | 59 | ### 流水线冲突 60 | 流水线冲突的情况主要有如下几点: 61 | 62 | - 资源冲突。一个指令需要使用一个已经被另外一个指令占据的资源; 63 | - 数据冲突。一个指令所需要的数据还没有计算出来,或者是一个指令需要的寄存器内容还没有被调入寄存器。 64 | - 控制流冲突。流水线必须等待一个有条件Goto指令是否会被执行。 65 | 66 | ### 减少冲突的办法 67 | 68 | - 调整代码顺序:将带有与邻近指令不相关的寄存器插到带有相关寄存器的指令之间; 69 | - 合并循环:将两个循环合并成一个循环,或者在一定程度上去降低程序的循环次数(这是一种牺牲时间资源换取空间资源的方法) 70 | 71 | ## ARM9TDMI 72 | ### 哈佛结构 73 | 哈佛结构是相对于冯诺依曼结构的改进而提出的,现在的笔记本电脑大多使用的是哈佛结构。 74 | 哈佛结构具有的突出特点就是指令总线和数据总线及其存储区是相互分开、独立的。取指操作和取数操作可以在同一个时间周期内进行,提高了处理速度。 75 | 以下是哈佛结构的模式图: 76 | 77 | ![这里写图片描述](http://img.blog.csdn.net/20170302201931598?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 78 | 79 | ### ARM9流水线 80 | ARM9流水线为5级流水线,其增加了存储器访问段和回写段,一定程度上提升了处理器的性能。 81 | 82 | Fetch --> Decode --> Execute --> Memory --> Write 83 | (预取-->译码-->执行-->访存-->写入) 84 | 85 | 在此之后,随着ARM的版本的提高,ARM处理器的流水线级数也随之不断增加。 86 | 87 | # ARM编程模型 88 | ## ARM数据类型 89 | ### ARM支持的数据类型: 90 | 91 | - 字节--8位 92 | - 半字--16位 93 | - 字--32位 94 | 95 | ### 各种操作使用的数据类型 96 | 97 | - 所有数据操作,例如ADD,都以字为单位; 98 | - 装载和保存指令可以对字节、半字和字进行操作; 99 | - ARM指令的长度为一个字,而Thumble指令的长度刚好为半字 100 | 101 | 我们知道ARM处理器有ARM状态和Thumb状态,那么计算机是如何分辨当前应该是以半字执行还是以字执行呢? 102 | 实际上,对于任何一段ARM程序代码,ARM处理器将其默认为ARM状态进行执行,然后根据指令的指导合理地进行状态的切换。因此,绝对意义上而言是没有一套完整的存粹的Thumb指令的,该指令的初始指令一定为ARM指令。 103 | 104 | 105 | ### 处理器状态 106 | ARM处理器有两种状态,分别为ARM状态和Thumb状态,通过之前内容的分析我们可以很明确两者之间的区别。 107 | 那么状态之间是如何进行切换的呢? 108 | 109 | #### 从ARM状态切换到Thumb状态 110 | > LDR R0,=Lable+1, 111 | > BX R0 112 | 其中,LDR指令是赋值操作,表示将Lable这一地址变量+1后将地址值给R0,然后BX指令是状态切换指令 113 | 114 | #### 从Thumb状态切换到ARM状态 115 | > LDR R0, =Lable 116 | > BX R0 117 | 其基本情况同上。 118 | 119 | 通过比较上述两个状态切换指令,那么我们肯定会问的一个问题是,为什么Lable加不加一的操作就可以决定状态怎样转换呢? 120 | 原因是ARM状态是以4字节来运行的,因此其为0Xnnn00, 而Thumb状态是以半字来运行的,因此其为0Xnnn0。通过在ARM状态下+1的操作,就可以实现状态的跳转。 121 | ***思考:状态的跳转与其末尾有几位零之间存在什么关系?*** 122 | 123 | ## 处理器模式 124 | c处理器共有其中不同的模式,具体内容如下: 125 | 126 | ![这里写图片描述](http://img.blog.csdn.net/20170303140408549?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 127 | 128 | 其中Fiq以及irq都是硬中断,是引脚(硬件)引起的中断,而软件引起的中断则被称之为软中断,其可以进入管理模式。 129 | 130 | 其中未定义模式实际上就是CPU的一种报错模式,是CPU对于自身不清楚的指令的一种处理方式。 131 | 132 | 处理器启动时进入的模式是管理模式(或者称之为监督模式),其主要是对处理器以及硬件进行初始化。类似于CPU的频率初始化,避免频率过低达不到运行要求,也避免频率过高,大量发热耗电。又如关闭所有中断,以此来防止系统初始化时候被用户进行误操作。 133 | 134 | 然后进入处理管理模式之外的多种特权模式,其主要完成的是各个模式的堆栈的初始化设置,主要完成的是堆栈位置以及大小的设定。特别注意的是,用户模式没有权限进入特权模式,因此主要在此第二个阶段不要进入用户模式。 135 | 136 | 最后是用户程序的运行模式。其一般指的是用户模式。 137 | 138 | ## ARM处理器的寄存器 139 | ARM处理器一共有37个32位寄存器。其中包括一个PC寄存器,一个CPSR(current program state register--当前状态寄存器), 5个SPSR(saved program state register状态保存寄存器)和30个通用寄存器。 140 | 141 | ![通用寄存器](http://img.blog.csdn.net/20170303194408940?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 142 | 143 | 从图中可以看到快中断之所以为“快”的一个重要原因是在快中断之下有一组独立的寄存器,因此其不需要在通用寄存器之上进行压栈和弹栈操作。 144 | 145 | 同时可以看到,五个CPSR(状态保存寄存器)对应着除了系统模式之外的五中特权模式。图中,管理模式的状态保存寄存器的编写存在笔误。 146 | 147 | ## R14寄存器与子程序调用 148 | R14(LR--Link Register),顾名思义是连接寄存器, 其一般是返回程序调用的入口处地址。 149 | 最典型的就是在子程序的调用之中,如果程序A调用了子程序B,如图所示: 150 | 151 | ![子程序调用](http://img.blog.csdn.net/20170303202315666?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 152 | 153 | 其具体的流程是,程序A在执行过程中调用B,当程序跳转至标号Lable时,执行程序B。同时硬件将BL Lable指令的下一条指令所在地址存入R14。当程序B执行完成之后,将R14寄存器的内容放入PC,返回程序A。 154 | 155 | 而当进行子程序嵌套调用时,会出现无限循环嵌套问题,因此在R14链接寄存器的设计上需要采用堆栈的方式进行存储。在子程序调用之前以及子子程序调用完成之后分别进行压栈和弹栈操作。 156 | 157 | ## R14寄存器与异常发生 158 | 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序的调用类似,都是由硬件来完成的,主要区别是有些异常存在一个小的常量的偏移。而且异常发生时会引起IRQ中断。 159 | 160 | 值得注意的是,异常处理的时候R14与R14_irq由于是两个不同的寄存器,因此相互独立,不能彼此之间相互联系,因此在执行完中断程序之后得到一个返回值,将该返回值减去一个小的常量之后就将地址返回源程序对应处执行。 161 | 162 | ## 程序计数器PC(程序指针)(R15) 163 | R15指向的是正在取址的地址。 164 | z在进行正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。 165 | 166 | z值得注意的是,在使用STR或者STM指令保存R15时,这些指令可能会将当前指令加上8字节或者是12个字节进行保存,其与计算机本身有关,但是一旦计算机硬件确定之后其是8还是12就已经确定了。 167 | 168 | ### 偏移量的计算代码 169 | > 0x300000 SUB R1. PC, #4 ;将PC值-4然后加上移位8,因此R1=PC+4 170 | > 0x300004 STR PC, [R0] ;将R0的地址值存入PC中 171 | > 0x300008 LDR R0. [R0] ;将R0的地址值附给R0 172 | > 0x30000c SUB R0, R0, R1 ;通过加法得到offset的值 173 | r如果以偏移量8为例,R1=0X300004, [R0]=0X30000c, R0=0x30000c, R0=8 174 | 175 | # ARM异常与中断 176 | ## 异常的基本概念及分类 177 | 异常是指任何打断处理器正常执行的操作,并且迫使处理器进入一个由有特权的特殊指令执行的事件。 178 | 179 | 异常可以分为同步异常和异步异常两类。其中,同步异常是指由内部时间引起的异常情况,而异步异常是指由外部事件引起的异常。其中,内部事件主要指的是处理器指令本身运行时产生的事件吗,而外部事件则是处理器指令执行不相关的事件。 180 | 181 | 其中,异步异常又被称之为中断。 182 | 183 | ## 异步中断的优先级 184 | ![这里写图片描述](http://img.blog.csdn.net/20170307222500827?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 185 | 186 | 从上述的表格形式可以看到各种异常情况的优先级。其中,我们可以看到,很让人不可思议的是软中断和未定义指令的优先级是一样的,同时其也是从硬件和软件两个角度来分析的。那么我们不由得会思考一个问题,那就是一般而言CPU同一时间只能够执行一条指令,那么发生了这种两种中断方式优先级相同的情况如何去指导计算机执行。经过细致的分析,我们不难发现,实际上软中断和未定义指令一般而言是不可能同时发生的,因此可以将其置于同一优先级。 187 | 188 | ***但是,就需要明确的一点是,异常中断的多种情况中,接收的是不同的信息源,因此如果发生不同中断源的干扰而导致两种异常发生的情况怎么处理?*** 189 | 190 | ## 异常向量表 191 | ![这里写图片描述](http://img.blog.csdn.net/20170307222636109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 192 | 193 | 从上述异常向量表中我们可以得到很多的信息。 194 | 195 | ### 从异常到处理 196 | 我们从向量表中可以看到,每个异常状态的存储空间只有4个字节,也就是刚好为一个ARM指令的长度,但是我们对于异常的处理基本上很难在一个指令内完成,因此在进行异常处理时,需要进行Goto跳转。这在ARM模式之下,一般执行的是“B”指令,一般很少使用“BL”指令,因为BL指令需要记录返回地址的值,但是实际上我们从异常中进行操作之后,不需要再次重复进入异常。 197 | 198 | ### FIQ相对于IRQ称之为"快"中断的原因? 199 | 1. FIQ模式有一组从R8-R12的独立的LR寄存器,因此在存储地址时相对于其他模式不需要进行弹栈和压栈操作,因此速度相对较快。 200 | 201 | 2. 在异常向量表中,FIQ模式的优先级大于IRQ模式的优先级,因此其是优先执行的; 202 | 203 | 3. 在异常向量表中,FIQ模式置于异常向量表的最尾部,因此其不需要在处理异常时执行Goto语句进行相关的异常处理 204 | 205 | ### 低位地址与操作系统执行代码的冲突 206 | 我们知道,操作系统完成必须任务所需要执行的代码一般都是低位地址的序列,而我们异常向量表中的异常模式的模式指定地址也都是低位地址,因此如果在嵌入式设备中使用操作系统,就产生了操作系统与异常向量表在低位地址处的冲突。 207 | 而我们在嵌入式系统开发时,解决此问题的方法有两种,一种是还是将异常向量表交给操作系统进行接管,但是我们将操作系统的低位地址执行异常向量表的序列;另外一种解决方法就是我们可以通过编写程序的方式,将异常向量表的存储位置置为高位地址处。 208 | 209 | ## 异常的入口和出口 210 | ### 进入异常 211 | 在进入异常之后,ARM内核会进行以下操作: 212 | 首先是保存地址,然后执行相关异常处理操作。其中保存地址有两部分内容,一是程序执行状态的地址,二是返回地址。 213 | 214 | 1. 将CPSR复制到适当的SPSR中;(复制状态现场) 215 | 2. 将返回地址保存到对应模式下的LR_寄存器中;(记录返回地址) 216 | 3. 将CPSR模式位强制设置为与异常类型相对应的值;(修改当前状态) 217 | 4. 强制PC重相关的异常向量处取址 (从状态表中执行相应的异常处理跳转) 218 | 219 | **异常总是在ARM状态中进行处理,即使当处理器在Thumb状态发生了异常,但是仍然会跳转为ARM状态进行异常处理。** 220 | 221 | ### 退出异常 222 | 由上述的复制现场的情况,我们知道,退出异常需要返还所有的现场。也就是上述四步操作中的前两步。 223 | 224 | 1. 将SPSR的值复制回CPSR 225 | 2. 将对应LR中的值减去偏移量后存入PC,偏移量根据异常类型而有所不同 226 | 227 | 通过分析,我们可以得知,这两个步骤是同时执行的,否则会存在许多的问题。 228 | 229 | 原因主要如下: 230 | 1. 如果首先执行步骤一然后执行步骤二,那么将状态发生改变之后,由于LR对应的值发生了改变,也就是说如果初始时为用户模式,然后异常进入的是快速中断模式,那么此时用户模式就不能够使用快速中断模式的LR了,因此其返还的地址值就不能够一一对应了; 231 | 2. 如果首先执行步骤二然后执行步骤一,由于我们知道LR向PC的跳转是无条件的,因此SPSR值复制到CPSR这一过程就不会被执行。 232 | 233 | 综上所述,退出异常时这两个现场的返回是同时进行的。 234 | 235 | 236 | ## 异常返回地址修正 237 | 异常返回地址修正的根本原因是**ARM处理器的流水线技术** 238 | 239 | 计算返回地址需要把握两点: 240 | 1. 发生异常时PC寄存器的值是否已经更新 241 | 2. 异常返回后被打断的当前指令的值是否还会被执行 242 | 243 | ## 从异常中断处理程序中返回 244 | ![============挂图片](http://img.blog.csdn.net/20170307222656328?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 245 | ### 不同异常模式偏移量的计算 246 | 1. 未定义异常和软件中断异常的偏移量为0;以上两种指令都是需要在中断处理完成之后执行待处理指令的下一条指令。而本身我们存储LR时,对应地址存储的LR的值实际上-4,但是由于ARM7的三级流水线结构设计,因此以上两者的偏移量为0; 247 | 2. 外部中断请求和快速中断请求的偏移量为4: 以上两种命令都需返回到发生TRQ中断或者是FIQ中断的下一条指令地址,由于完成了当前指令的执行,因此PC的值发生了更新,故此处需要进行减4操作; 248 | 3. 指令预取终止和数据访问中止,前者的偏移量为4,后者的偏移量为8.因为进行指令预取异常时,程序需要重新回到预取指令处,但是PC没有进行更新,因此偏移量为4,而数据访问终止PC更新了,同时也需要回到之前的操作,则其偏移量为8. 249 | 250 | ### 退出异常操作的实时性 251 | 我们使用的MOVS其中MOV后加S,而且操作对象为PC,则在进行LR减去偏移量存入PC的操作同时,需要进行SPSR状态值返回到CPSR的操作。这是解决实时性的关键方式。 252 | 253 | # 内存和I/O 254 | ## 内存系统--大端和小端 255 | 在大端存储中,高地址位存储的是重要性相对较差的内容,而对于小端存储而言,低地址位存储的是重要性相对较差的内容。另外,对于一个数据本身而言,一般数据的高位对于数据本身影响较大。 256 | 257 | 在默认模式之下,通常被认为是小端、但是可以被配置为大端。 258 | 259 | 在使用小端ARM系统时,一个双精度的字将以大端顺序存储,而每个字的每个字节都以小端顺序存储。 260 | 261 | ## I/O端口编址方式 262 | I/O端口编址方式有两种,一种是存储器映射编址,其是I/O端口的地址与内存地址统一编址,即I/O单元与内存单元在同一个地址空间。另外一种是I/O映射编址,其是I/O端口地址与内存地址分开编址,即I/O单元与内存单元都有自己独立的空间。 263 | 264 | ARM CPU的I/O端口都是存储器映射的编制方式,也就是其I/O端口的地址与内存的地址统一编址。 265 | -------------------------------------------------------------------------------- /EmbeddedSystem/embedded_software_design/ARM_programming.md: -------------------------------------------------------------------------------- 1 | # ARM汇编语言的伪操作、宏指令和伪指令 2 | ARM汇编语言源程序中语句一般由指令、伪操作、宏指令和伪指令构成。 3 | 其中,伪操作是指ARM汇编程序中的助记符,在源程序转变为汇编程序的时候被处理,而不是在计算机运行期间被程序执行;宏指令是一段独立的程序代码,通过伪操作进行定义,可以进行宏替换,其仅仅在调用时用宏体插入到源程序中;伪指令也是一种特殊的指令助记符,但是其不是在处理器运行期间由及其运行,而是在汇编时被转换为合适的机器指令替换为ARM或者Thumb指令,从而实现真正的指令操作。 4 | 5 | ## ADS编译环境下的伪操作和伪指令 6 | 相关内容属于手册的部分,因此需要时查阅相关手册即可。 7 | 8 | ## ARM伪指令 9 | ARM伪指令是为了编程的方便而设计出来的一种指令,其可以在源程序进行汇编时将相关指令转变为等效的ARM指令。 10 | ARM伪指令共有四条,分别为ADR伪指令、ADRL伪指令、LDR伪指令、NOP伪指令。 11 | 12 | ### ADR伪指令 13 | 通常,编译器通过一条ADD指令或者SUB指令来实现ADR伪指令的功能。若不能够用一条指令实现,则产生错误,编译失败。 14 | 15 | 其格式大致与ADD指令或者是SUB指令相同。 16 | 17 | ### ADRL伪指令 18 | 其与ADR最大的区别是ADRL有更大的地址读取能力。其他都是相似的。因此,一条ADRL指令可能需要多条SUB或者ADD指令才能完成。因为ARM指令的第二操作数的地址范围比ADRL取址范围小。 19 | 20 | ### LDR伪指令 21 | LDR伪指令用于加载32位的立即数或者一个地址到指定寄存器。在汇编编译源程序时,LDR伪指令被编译器替代为一条合适的指令。若加载的常数未超出MOV或者MVN的范围,则使用MOV或者MVN指令代替该LDR伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的LDR指令从文字池中读出常量。 22 | 与ARM指令的LDR相比,伪指令的LDR的参数中有=号存在。 23 | 24 | ### NOP伪指令 25 | NOP伪指令的重要功能是用于延时操作。其在汇编时被代替成ARM中的空操作。例如MOV R1,R1 等。 26 | 27 | # ARM汇编语言程序设计 28 | ## ARM汇编中的文件格式 29 | ARM程序源文件主要有三种格式,具体的情况说明如下: 30 | 31 | ![ARM源文件格式](http://img.blog.csdn.net/20170326152650496?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 32 | 33 | ## ARM汇编语言语句格式 34 | 值得注意的是,ARM汇编语言中的最开头是符号,接着是指令|伪操作|伪指令,末尾处可以添加注释。 35 | 36 | 只要将任何指令放在开头,ARM汇编都会认为其为符号。 37 | 38 | ## ARM汇编语言程序格式 39 | ARM汇编语言是以**段**为单位进行源文件组织的。 40 | 段又分为数据段和代码段。其中数据段至少要有一个,代码段可以有非负的若干整数。 41 | 42 | 在源程序经过汇编处理后生成一个可执行的映像文件。其包含三个部分的内容: 43 | 一个或者多个代码段,其通常是只读的; 44 | 零个或者多个包含初始值的数据段,这些数据段通常是可读写的; 45 | 零个或者多个不包含初始值的数据段,这些数据段通常也是可以读写的,值得注意的是,这类数据在经过编译之后只会在内存中保留地址,而不会被存储数据等其他信息。 46 | 47 | ## 嵌入式C语言程序设计技巧 48 | ### 变量定义 49 | 在变量声明的时候,为了节省空间的需要,最好把所有相同类型的变量放在一起定义,同时这样可以优化存储器布局。 50 | 51 | 同时,值得注意的是,对于局部变量类型的定义,使用short或者char来定义变量并不总是比int节省空间。由于ARM执行的是32位的运算,因此有时int类型的变量声明更加具有优势。 52 | 53 | 变量定义时,从精简程序的角度,程序眼总是竭力避免使用冗余变量。但是有时使用冗余变量可以减少存储器访问的次数,从而提高系统的性能。 54 | 55 | ### 参数传递 56 | 为了使C语言程序和汇编程序能够相互调用,因此定义了统一的函数过程调用标准ATPCS。ATPCS定义了寄存器组中的{R0-R3}作为参数传递和结果返回寄存器,如果参数数目超过4个,则要使用堆栈的方式进行函数或者参数的传递。 57 | 58 | ### 循环条件 59 | 不同的循环条件,通过汇编执行时,即使完成的是相同的任务,有时也会有不同的系统性能表现。 60 | 61 | ![循环条件](http://img.blog.csdn.net/20170326152721882?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 62 | 63 | # C与汇编语言混合编程 64 | ## 寄存器的使用规则 65 | 在ATPCS标准之下,寄存器的使用遵循以下规则: 66 | 67 | ![寄存器使用规则](http://img.blog.csdn.net/20170326152745809?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 68 | 69 | ## 数据栈的使用规则 70 | ATPCS规定数据栈均为FD(满递减)类型,并且对数据栈的操作是8字节对其的。***此句话如何理解?*** 71 | 72 | ## 参数的使用规则 73 | 当参数不超过4个时,可以使用寄存器R0-R3进行参数传递;当参数超过4个时,剩余参数使用数据栈来传递参数。入栈的顺序和参数顺序相反,即最后一个字数据先入栈。 74 | (为何说此处是参数个数可变的参数传递) 75 | ***而之后的存在参数个数固定的子程序参数传递??*** 76 | 77 | 当结果为一个32位的整数时,可以通过寄存器R0返回;结果为一个64位整数时,可以通过寄存器R0和R1返回,因此类推。**那么如果是一个160位数呢?当然,如果可能的话** 78 | 79 | ## C和ARM汇编程序间相互调用 80 | 在C和ARM汇编程序之间的相互调用必须遵守ATPCS规则。 81 | 此注意相互调用主要有三个方面的内容: 82 | 1. 汇编程序对C全局变量的访问; 83 | 2. 在C语言程序中调用汇编程序; 84 | 3. 在汇编语言中调用C语言程序; 85 | 86 | ### 汇编程序对C全局变量的访问 87 | 可以通过使用IMPORT关键词在汇编语言中对全局变量的调用进行声明。 88 | 89 | ### 在C语言程序中调用汇编程序 90 | 一切胜在不言中: 91 | 92 | ![在C语言中调用汇编程序](http://img.blog.csdn.net/20170326152826294?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 93 | 94 | ### 在汇编语言中调用C语言程序 95 | 需要在汇编语言调用该程序之前,在汇编语言程序中使用IMPORT伪操作来声明该C程序。同时,在汇编程序中通过BL指令来调用子程序。 96 | 97 | ![在汇编语言中调用C语言程序](http://img.blog.csdn.net/20170326152850587?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 98 | # 基于ADS环境的软件开发实例 99 | 详情根据实际内容进行ADS环境之下的软件开发。 100 | 101 | ![数据拷贝程序](http://img.blog.csdn.net/20170326152906513?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 102 | -------------------------------------------------------------------------------- /EmbeddedSystem/embedded_software_design/README.md: -------------------------------------------------------------------------------- 1 | ## 以下的所有内容是本人于2017年(大二下)对于《嵌入式软件设计》学习的笔记与个人心得与体会。 2 | -------------------------------------------------------------------------------- /EmbeddedSystem/embedded_software_design/introduction.md: -------------------------------------------------------------------------------- 1 | # 嵌入式软件的定义及特点 2 | ## 嵌入式系统的定义 3 | 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪、功能、可靠性、功耗严格要求的专用计算机系统。 4 | 5 | 其中要说明的几个点是 6 | 1. 嵌入式系统是专用系统,而不是通用系统,其往往是为了特点领域而进行开发应用的; 7 | 2. 嵌入式系统的软硬件可以进行裁剪。其中主要突出的是嵌入式系统可以根据实际的需要进行软硬件所需内容的选择,具有极大的灵活性以及可选择性; 8 | 3. 嵌入式系统一般要求具有很高的实时性,特别是应用于航天等领域时,其实时性要求会更高; 9 | 4. 嵌入式系统广泛使用,但是其对于成本、体积、功耗都有较多的要求,为的是更为精巧地嵌入到应用中。 10 | 11 | ## 嵌入式系统的知识体系 12 | ![这里写图片描述](http://img.blog.csdn.net/20170301203500919?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 13 | 14 | 其中,对于嵌入式软件而言,更多的是涉及到计算机技术中软件方面的内容,因此需要熟练地掌握上述的种种内容。同时,对于硬件方面也要有一个比较系统化的了解。 15 | 对于其他板块而言,提供这个版块的目的是在需要设计一个嵌入式系统时,根据上述的知识体系以及实际的需要进行合理化的人才选择。 16 | ## 嵌入式系统的特点 17 | - 系统内核小 18 | - 专用性强 19 | - 系统精简 20 | - 高实时性 21 | - 需要专门的开发工具和环境 22 | 23 | # 嵌入式系统的组成结构 24 | ![这里写图片描述](http://img.blog.csdn.net/20170301203841997?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 25 | 26 | 对于这张图暂时没有一个系统化的认识与理解,因此等到学习过程中不断地进行学习巩固,加深认识。 27 | 28 | 值得注意的是,嵌入式系统的硬件是以嵌入式处理器或者微处理器为核心的SoC/SoPC(System on Chips/System-on-a-Programmable-Chip),同时配置必要的外围接口部件。 29 | 30 | ## 微处理器的两个发展分支 31 | ### 通用处理器 32 | - 目标: 高速的数字处理能力 33 | - 路线:总线速度的提升,存储量的扩大 34 | - 其他:功耗的增加、体积的增加 35 | 36 | ### 嵌入式微处理器 37 | - 目标:突出强调嵌入式的性能以及控制能力 38 | - 路线: 单芯片实现,多样性 39 | - 其他:低功耗、小体积、接口丰富 40 | 41 | ## 嵌入式处理器分类 42 | - 嵌入式微处理器MPU(Microprocessor) 43 | - 嵌入式微控制器MCU(Microcontroller Unit)--单片机 44 | - 嵌入式数字信号处理器(Digital Signal Processor) 45 | - Soc/SoPC 46 | 47 | 注:嵌入式片上系统是在一个硅片上实现一个复杂的系统,其特点是整个嵌入式系统大部分均可集成到一块或者几块芯片中去,它可以使应用系统电路板变得很简洁。 48 | 49 | ## 嵌入式SoPC 50 | 嵌入式SoPC来源于SoC,因此其具有嵌入式片上系统高度继承化,电路板简洁的特点,同时作为可编程逻辑技术的实现,其具备了可编程的功能,具体的表现就是可裁减、可扩充、可升级等灵活的设计方式。 51 | 52 | # 嵌入式软件组成结构 53 | ![这里写图片描述](http://img.blog.csdn.net/20170301212509113?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 54 | 嵌入式软件是针对特定应用以及相应的硬件平台,为完成用户预期任务而设计的计算机软件 55 | 嵌入式软件具有四层结构。最低层是BSP/HAL, 称之为板级支持包或者是硬件抽象层, 其功能是提供基本的硬件支持;再上一层是OS,操作系统,负责对于任务资源的分配与管理,接着是中间件,例如我们最为熟知的JVM,其是跨平台中间件的使用,到了最上层就是应用软件。 56 | 57 | ## 实时操作系统(RTOS)体系结构 58 | ![这里写图片描述](http://img.blog.csdn.net/20170301212957932?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbXlpOTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 59 | 在实时操作系统中,操作系统负责的基本任务就是对于内存、文件的管理,以及进程的调度,扩展功能就是对于网络模块等的调度以及使用。 60 | 61 | ## 通用计算机与嵌入式系统 62 | 特别注意的是通用计算机与嵌入式系统在开发方式上的差异。通用计算机开发平台和运行平台均为通用计算机,而嵌入式系统开发平台为通用计算机,运行平台为嵌入式系统。 63 | 64 | # 嵌入式系统开发流程 65 | - 需求分析、规格说明 66 | - 系统结构设计、硬件和软件的选择 67 | - 构件技术、构件设计与实现 68 | - 系统集成、测试与验收 69 | -------------------------------------------------------------------------------- /EmbeddedSystem/embedded_software_design/串口通信与键盘控制.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/EmbeddedSystem/embedded_software_design/串口通信与键盘控制.pptx -------------------------------------------------------------------------------- /Git/Base_information_about_Github.md: -------------------------------------------------------------------------------- 1 | # Git 使用规范流程 2 | 3 | Git 是一个源码管理系统。 4 | 5 | Git 的使用推荐采取ThoughtBot 的Git使用规范流程: 6 | 7 | ![1](pic\20160812\1.jpg) 8 | 9 | 10 | 11 | ## 第一步:新建分支 12 | 13 | 首先,每次开发新功能,都应该新建一个单独的分支。 14 | 15 | ``` 16 | #获取主干最新代码 17 | $ git checkout master 18 | $ git pull 19 | 20 | #新建一个开发分支myfeature 21 | $ git checkout -b myfeature 22 | ``` 23 | 24 | **怎样才能够使用这些命令?** 25 | 26 | ## 第二步:提交分支commit 27 | 28 | 分支修改后,就可以提交commit 了。 29 | 30 | ```javascript 31 | $ git add --all 32 | $ git status 33 | $ git commit --verbose 34 | ``` 35 | 36 | git add 命令的all参数,表示保存所有变化(包括新建、修改和删除)。all 是 git add 的默认参数,所以也可以用git add . 代替。 37 | 38 | git status 命令,用来查看发生变动的文件。 39 | 40 | git commit 命令的verbose 参数,会列出diff 的结果。 41 | 42 | **附:diff是什么东西** 43 | 44 | diff 是 Unix 系统的一个很重要的工具程序,详细情况之后学习。 45 | 46 | http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html 47 | 48 | ## 第三步:撰写提交信息 49 | 50 | 提交commit时,必须给出完整扼要的提交信息。以下是一个范本: 51 | 52 | ``` 53 | Persent-tense summary under 50 characters 54 | 55 | *More information about commit(under 72 characters) 56 | *More information about commit(under 72 characters) 57 | 58 | http://project.management-system.com/ticket/123 59 | ``` 60 | 61 | 第一行是不超过50个字的提要,然后空一行,罗列出改动原因、主要变动、需要注意的问题。最后,提供对应的网址。 62 | 63 | ## 第四步:与主干同步 64 | 65 | 分支的开发过程中,要经常与主干保持同步。 66 | 67 | ``` 68 | $ git fetch origin 69 | $ git rebase origin/master 70 | ``` 71 | 72 | ## 第五步:合并commit 73 | 74 | 分支开发完成后,很可能有一堆commit,但是合并到主干的时候,往往希望只有一个(或最多两三个) commit,这样不仅清晰,也容易管理。 75 | 76 | 怎样才能将多个commit合并呢?这就要用到git rebase 命令。 77 | 78 | ``` 79 | $ git rebase -i origin/master 80 | ``` 81 | 82 | 详情参考:http://www.ruanyifeng.com/blog/2015/08/git-use-process.html 83 | 84 | ## 第六步:推送到远程仓库 85 | 86 | 合并commit后,就可以推送当前分支到远程仓库了。 87 | 88 | ``` 89 | $ git push --force origin myfeature 90 | ``` 91 | 92 | git push 命令要加上force 参数,因为rebase以后,分支历史改变了,跟远程分支不一定兼容,(**此处不太理解**),有可能要强行推送。 93 | 94 | 详情参考:http://willi.am/blog/2014/08/12/the-dark-side-of-the-force-push/ 95 | 96 | ## 第七步:发出Pull Request 97 | 98 | 提交到远程仓库以后,就可以发出Pull Request 到master 分支,然后请求别人进行代码review,确认可以合并到master。 99 | 100 | 101 | 102 | # 常用Git 命令清单 103 | 104 | 一般来说,日常使用只要记住下图六个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。 105 | 106 | ![2](pic\20160812\2.jpg) 107 | 108 | 更多详情,参考:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 109 | 110 | 111 | 112 | # Git 工作流程 113 | 114 | Git 作为一个源码管理系统,不可避免涉及到多人协作。 115 | 116 | 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去。 117 | 118 | ![3](pic\20160812\3.jpg) 119 | 120 | 以下介绍三种广泛使用的工作流程: 121 | 122 | ``` 123 | * Git flow 124 | * Github flow 125 | * Gitlab flow 126 | ``` 127 | 128 | ## 一、功能驱动 129 | 130 | 上述介绍的三种工作流程,有一个共同点:都采用“功能驱动式开发”(Feature-driven development, 简称FDD)。 131 | 132 | 它指的是,需求是开发的起点,先有需求再有功能分支(feature branch) 或者补丁分支(hotfix branch)。完成开发后,该分支就合并到主分支,然后被删除。 133 | 134 | ## 二、Git flow 135 | 136 | 最早诞生、并得到广泛采用的一种工作流程,就是Git flow。 137 | 138 | ### 特点 139 | 140 | 它最为主要的特点有两个。 141 | 142 | ![4](pic\20160812\4.jpg) 143 | 144 | 145 | 146 | 首先,项目存在两个长期分支。 147 | 148 | ``` 149 | * 主分支 master 150 | * 开发分支 develop 151 | ``` 152 | 153 | 前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的发布版;后者用于日常开发,存放最新的开发版。 154 | 155 | 其次,项目存在三种短期分支。 156 | 157 | ``` 158 | * 功能分支 (feature branch) 159 | * 补丁分支 (hotfix branch) 160 | * 预发分支 (release branch) 161 | ``` 162 | 163 | 一旦完成开发,它们就会被合并进develop 或master,然后被删除。 164 | 165 | 详情请参考http://www.ruanyifeng.com/blog/2012/07/git.html 166 | 167 | ### 评价 168 | 169 | Git flow 的优点是清晰可控,缺点是相对复杂,需要同时维护两个长期分支。大多数工具都将master 当作默认分支,可是开发是在develop分支进行的,这导致经常要切换分支,非常麻烦。 170 | 171 | 更大问题在于,这个模式是基于“版本发布”的,目标是一段时间以后产出一个新版本。但是,很多网站项目是“持续发布”,代码一有变动,就部署一次。这时,master分支和develop分支的差别不大,没必要维护两个长期分支。 172 | 173 | ## Github flow 174 | 175 | Github flow 是Git flow 的简化版,专门配合“持续发布”。它是Github.com 使用的工作流程。 176 | 177 | ### 流程 178 | 179 | 它只有一个长期分支,就是master,因此用起来非常简单。 180 | 181 | 官方推荐的流程如下: 182 | 183 | ![5](pic\20160812\5.jpg) 184 | 185 | ``` 186 | 第一步:根据需求,从master 拉出新分支,不区分功能分支或补丁分支; 187 | 第二步:新分支开发完成后,或者需要讨论的时候,就向master发起一个pull request; 188 | 第三步:Pull Request 既是一个通知,让别人注意到你的请求,又是一种对话机制,大家一起评审和讨论你的代码。对话过程中,你还可以不断提交代码; 189 | 第四步:你的Pull Request 被接受,合并进master,重新部署后,原来你拉进来的那个分支就被删除(先部署再合并也可) 190 | ``` 191 | 192 | 193 | 194 | ### 评价 195 | 196 | Github flow 的最大优点就是简单,对于“持续发布”的产品,可以说是最合适的流程。 197 | 198 | 问题在于它的假设:master分支的更新与产品的发布是不一致的。也就是说,master分支的最新代码,默认就是当前的线上代码。 199 | 200 | 可是,有的时候并非如此,代码合并进入master分支,并不代表它就能立即发布。比如,苹果商店的APP提交审核以后,等一段时间才能上架。这时,如果还有新的代码提交,master分支就会与刚发布的版本不一致。另一个例子是,有些公司有发布窗口,只有制定时间才能发布,这也会导致线上版本落后于master分支。 201 | 202 | 上面这种情况,只要master 一个主分支就不够用了。通常,你不得不在master分支以外,另外新建一个production 分支跟踪线上版本。 203 | 204 | ## Gitlab flow 205 | 206 | Gitlab flow 是Git flow 与Github flow 的综合。它吸取了两者的优点,既有适应不同开发环境的弹性,又有单一主分支的简单与便利。它是Gitlab.com 推荐的做法。 207 | 208 | ### 上游优先 209 | 210 | Gitlab flow 最大原则叫做上游优先(upstream first), 即只存在一个主分支master,它是所有其他分支的“上游”。只有上游分支采纳的代码变化,才能应用到其他分支。 211 | 212 | 实例可见Chromium项目。 213 | 214 | 它明确规定,上游分支依次为: 215 | 216 | ``` 217 | 1. Linus Torvalds 的分支 218 | 2. 子系统(比如nerdev)的分支 219 | 3. 设备厂商(比如三星)的分支 220 | ``` 221 | 222 | **此部分目前较为难以理解,之后进行深入分析** 223 | 224 | ### 持续发布 225 | 226 | Gitlab flow 分成两种情况,适应不同的开发流程。 227 | 228 | ![6](pic\20160812\6.jpg) 229 | 230 | 231 | 232 | 对于“持续发布”的项目,它建议在master分支以外,再建立不同的环境分支。比如,“开发环境”的分支是master, “预发环境”的分支是pre-production,“生产环境”的分支是production。 233 | 234 | 开发分支是预发分支的“上游”,预发分支又是产生分支的“上游”。代码的变化,必须由“上游”向“下游”发展。比如,生产环境出现bug,这时就要新建一个功能分支,先把它合并到master,确认没有问题,在cherry-pick到per-production,这一步也没有问题,才进入production。 235 | 236 | 只有紧急情况,才允许跳过上游,直接合并到下游分支。 237 | 238 | ### 版本发布 239 | 240 | ![7](pic\20160812\7.jpg) 241 | 242 | 对于“版本发布”的项目,建议的做法是每一个稳定版本,都要从master分支拉出一个分支,比如2-3-stable、2-4-stable等等。 243 | 244 | 以后,只有修补bug,才允许将代码合并到这些分支,并且此时要更新小版本号。 245 | 246 | # 一些小技巧 247 | 248 | ## pull request 249 | 250 | 功能分支合并进master分支,必须通过pull request(Gitlab 里面叫做Merge Request) 251 | 252 | ![8](pic\20160812\8.jpg) 253 | 254 | 前面讲过,Pull Request 本质是一种对话机制,你可以在提交的时候,@相关人员或团队,引起他们的注意。 255 | 256 | ## protected branch 257 | 258 | master 分支应该受到保护,不是每个人都可以修改这个分支,以及拥有审批Pull Request 的权利。 259 | 260 | Github 和 Gitlab 都提供“保护分支”(protected branch) 这个功能。 261 | 262 | ### Issue 263 | 264 | Issue 用于Bug 追踪和需求管理。建议先新建Issue,再新建对应的功能分支。功能分支总是为了解决一个或多个Issue。 265 | 266 | 功能分支的名称,可以与issue的名字保持一致,并且以issue的编号起首,比如“15-require-a-password-to-change-it”. 267 | 268 | **“practice”** 269 | 270 | 开发完成后,在提交说明里面,可以写上“fixed #14” 或者 “closes # 67”。 Github 规定,只要commit message 里面有下面这些动词 + 编号,就会关闭对应的issue。 271 | 272 | ``` 273 | * close 274 | * closes 275 | * closed 276 | * fix 277 | * fixes 278 | * fixed 279 | * resolve 280 | * resolves 281 | * resolved 282 | ``` 283 | 284 | 这种方式还可以一次关闭多个issue,或者关闭其他代码库的issue,格式是: 285 | 286 | ``` 287 | username/repository#issue_number 288 | ``` 289 | 290 | Pull Request 被接受以后,issue 关闭,原始分支就应该删除。如果以后该issue重新打开,新分支可以复用原来的名字。 291 | 292 | ### Merge 结点 293 | 294 | Git 有两种合并:一种是“直进式合并”(fast forward), 不生成单独的合并结点;另一种是“非直进式合并”(none fast forward), 会生成单独结点。 295 | 296 | 前者不利于保持commit 信息的清晰,也不利于以后的回滚,建议总是采用后者(即使用--no-ff参数)。只要发生合并,就要有一个单独的合并结点。 297 | 298 | **practice** 299 | 300 | ### Squash 多个 commit 301 | 302 | 为了便于他人阅读你的提交,也便于cherry-pick 或撤销代码变化,在发起Pull Request 之前,应该把多个commit合并成一个。 303 | 304 | (前提是,该分支只有你一个人开发,且没有跟master合并过。) 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | -------------------------------------------------------------------------------- /Git/github问题.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/github问题.txt -------------------------------------------------------------------------------- /Git/pic/20160812/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/pic/20160812/1.jpg -------------------------------------------------------------------------------- /Git/pic/20160812/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/pic/20160812/2.jpg -------------------------------------------------------------------------------- /Git/pic/20160812/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/pic/20160812/3.jpg -------------------------------------------------------------------------------- /Git/pic/20160812/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/pic/20160812/4.jpg -------------------------------------------------------------------------------- /Git/pic/20160812/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/pic/20160812/5.jpg -------------------------------------------------------------------------------- /Git/pic/20160812/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/pic/20160812/6.jpg -------------------------------------------------------------------------------- /Git/pic/20160812/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/pic/20160812/7.jpg -------------------------------------------------------------------------------- /Git/pic/20160812/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WilliamYi96/CS_Learning/9ff408c40307fefd24e5a6192a5b3bd4777a10c2/Git/pic/20160812/8.jpg -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 William Yi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /OS/OS.md: -------------------------------------------------------------------------------- 1 | # 操作系统基本介绍 2 | 什么是操作系统: 操作系统是管理计算机硬件的程序,同时其也是在计算机硬件和计算机用户之间起媒介作用的一种程序。 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CS_Learning 2 | This is all my summary and harvests of Computer Science learning. 3 | 4 | 5 | 6 | ------------------------- 7 | 8 | # Git 9 | 10 | [Git教程](./Git/Base_information_about_Github.md) 11 | 12 | ------------------------------ 13 | 14 | # 数据库系统(DATABASE) 15 | ## 数据库系统原理 16 | [基本情况说明](./DataBase/principle_of_database/README.md) 17 | [数据库系统原理(1)--绪论](./DataBase/principle_of_database/introduction.md) 18 | [数据库系统原理(2)--关系模型](./DataBase/principle_of_database/relationship_model.md) 19 | 数据库系统原理(3)--关系数据库语言SQL 20 | [数据库系统原理(4)--数据依赖与关系模式规范化](./DataBase/principle_of_database/data_dependence_and_relationship_pattern_normalization.md) 21 | [数据库系统原理(5)--数据库设计](./DataBase/principle_of_database/database_design.md) 22 | [数据库系统原理(7)--查询处理与查询优化](./DataBase/principle_of_database/query_processing_and_optimization.md) 23 | [数据库期末考试复习规划](./DataBase/principle_of_database/数据库期末考试复习规划.md) 24 | [数据库系统原理复习](./DataBase/principle_of_database/数据库系统原理复习.md) 25 | 《数据库系统原理》课内实验报告 [pdf](./DataBase/principle_of_database/《数据库系统原理》综合实验报告.pdf) [tex](./DataBase/principle_of_database/《数据库系统原理》综合实验报告.tex) 26 | 27 | -------------------------------------------- 28 | 29 | # 嵌入式系统(EMBEDDED SYSTEM) 30 | ## 嵌入式软件设计 31 | [基本情况说明](./EmbeddedSystem/embedded_software_design/README.md) 32 | [嵌入式软件设计(1)--绪论](./EmbeddedSystem/embedded_software_design/introduction.md) 33 | [嵌入式软件设计(2)--ARM体系结构](./EmbeddedSystem/embedded_software_design/ARM_architecture.md) 34 | 嵌入式软件设计(1)--ARM指令集   35 | [嵌入式软件设计(4)--ARM程序设计](./EmbeddedSystem/embedded_software_design/ARM_programming.md) 36 | [嵌入式实验(1)(主讲)](./EmbeddedSystem/embedded_software_design/串口通信与键盘控制.pptx) 37 | 38 | --------------------------------------- 39 | 40 | 41 | 42 | # 数字逻辑(DIGITAL LOGIC) 43 | 44 | [基本情况说明](./DigitalLogic/基本情况说明.md) 45 | 46 | [数字逻辑知识点-概念-重点-解题思路归纳总结](./DigitalLogic/数字逻辑知识点-概念-重点-解题思路归纳总结.md) --------------------------------------------------------------------------------