START167 AND BOOT167
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka10535.html
C166: START167 AND BOOT167
QUESTION
I do not quite understand the files START167.A66 and BOOT167.A66.
Is BOOT.A66 used for the monitor and START167.A66 used for the final application ?
ANSWER
The BOOT167.A66 file is part of the boot loader used by the monitor.
Actually, the monitor consists of three files: BOOT*.A66, CONF*.INC, and INST*.A66.
CONF contains definitions for the stuff that gets initialized in the startup code for the monitor.
This code is in BOOT.
The CONF file contains definitions that are identical to those found in START167.A66.
So, to get a monitor working, the startup should be the same in CONF and in START167.
The INST file is the initialization for the monitor.
This includes things like the serial port used for communication with dScope and so on.
The START167.A66 file is the startup code that is executed immediately after reset by the CPU.
There's nothing much to add here.
If you have a monitor configuration that works, but your stand-alone program doesn't work,
you should compare the CONF*.INC from the monitor to the START167.A66 file for the stand-alone program.
There's probably a difference that prevents your program from working.
START167.A66
The START167.A66 file contains the startup code for the C161, C163, C164, C165, and C167 microcontrollers.
The startup code is executed immediately upon reset of the target system and performs the following operations in order:
- Initializes the SYSCON SFRs including BUSCON0.
- Initializes the ADDRSELx/BUSCONx SFRs (if configured).
- Reserves and initializes the hardware stack and stack overflow/underflow registers.
- Sets DPP0-DPP3 and CP for memory and register bank accesses.
- Reserves and initializes the user stack area and user stack pointer (R0).
- Clears data memory.
- Initializes explicitly initialized variables.
- Transfers control to the main C function.
START167.A66 contains definitions that are used to configure the hardware of the C16x and to setup the C runtime system.
The functions of the individual EQU statements are described below.
Name | Definition |
---|---|
_ALECTL0 | ALE Lengthening Control Bit; see the C167 data sheet for description. |
_BTYP0 or BYTP |
Defines the external bus configuration the CPU uses. The bus configuration is used only if BTYP_ENABLE is set to 1. |
_BUSACT0 or BUSACT | Bus Active Control Bit. Default: 1 to enable the external bus. |
_BYTDIS |
Byte High Enable pin control bit initialization value. Default: 0 for enabled. (This is the reset value of the CPU). To disable the BHE# output, set _BYTDIS to 1. |
_CLREN |
System Clock Output Enable bit initialization value. Default: 0 to disable the CLKOUT output (this is also the reset value of the CPU.) To enable the CLKOUT output set _CLKEN to 1. |
_MCTC0 or _MCTC |
Memory Cycle Time initialization value. Default: 1 for one memory wait state (MCTC = 0EH). Reset value of the CPU is 15 for 15 additional state times. |
_MCTCn-_CSWENn |
Defines the bus characteristics for the address range specified with ADDRESSn and RANGEn. These values are used to set the BUSCON1-BUSCON4 registers. |
_MTTC0 or MTTC |
Memory Tri-State Time initialization value. Default: 0 for 0.5 states; this is also the reset value of the CPU. To select 0 states for the Tri-State time, set _MTTC to 1. |
_RDY_AS |
Synchronous / Asynchronous READY# input selection. Default: 0 for synchronous READY# input. |
_RDYEN0 or RDYEN |
READY# Input Enable Control Bit. Default: 0 to disable the READY# input. |
_ROMEN |
The Internal ROM Access Enable bit is read-only. Do not change this value. |
_ROMS1 |
On-Chip ROM Segment-Mapping Control Bit. Default: 0 for on-chip ROM mapped to segment 0 (address range 0x0000-0xFFFF). Seg _ROMS1 to 1 for segment 1 (address range 0x10000-0x1FFFF). |
_RWDC0 or RWDC |
Read/Write Signal Delay initialization value. Default: 1 for no delay (this is the typical value in most systems). Reset value of the CPU is 0 for 0.5 states delay time. |
_SGTDIS |
Segmentation Disable Control Bit initialization value. The segmentation is disabled for the TINY memory model; in all other memory models it is enabled. Do not change the definition of _SGTDIS. |
_WRCFG |
Write Configuration Control Bit. Default: 0 for normal configuration of WR# and BHE# outputs. |
_XRAMEN |
XRAM Enable Control Bit. Default: 0 to disable access to XRAM area. External bus accesses are generated in the XRAM area. |
ADDRESS1-ADDRESS4 |
Define the start address of the Chip Select 1-4 output (CS1#-CS4#). This value is used to set the ADDRSEL1-ADDRSEL4 register. |
BTYP_ENABLE |
Allow software to modify BTYP and change the bus mode. By default, this is disabled and the bus type is set by the hardware pins of the C16x/ST10. To enable the external bus configuration, set BTYP_ENABLE = 1. |
BUSCON1-BUSCON4 |
Initialization for BUSCON1/ADDRSEL1-BUSCON4/ADDRSEL4 registers. Set BUSCON1 = 1 to initialize BUSCON1/ADDRSEL1. |
CLR_MEMORY |
Memory Zero Initialization of RAM areas. Default: enable the memory zero initialization of RAM area. To disable the memory zero initialization, set CLR_MEMORY = 1. This reduces the startup code size. |
DPPUSE |
Allow re-assignment of DPP registers. Default: 1 to support the L166 DPPUSE directive. To disable the DPP re-assignment, set DPPUSE = 0. This reduces the startup code size. |
EXT_RAM |
External RAM Write-Access Enable (P3.13 = WR-Pin) initialization value. The default value enables the external RAM access. To disable external RAM, remove the statement $SET (EXT_RAM). |
INIT_VARS |
Variable Initialization of explicitly initialized variables (variables are to be defined as static or declared at file level). Default: initialize variables. To disable the variable initialization, set INIT_VARS = 0. This reduces the startup code size. |
RANGE1-RANGE4 |
Define the address range of the Chip Select 1-4 output (CS1#-CS4#). This value is used to set the ADDRSEL1-ADDRSEL4 register. |
SSTSZ |
Set the system stack space, if you selected 7 for the STK_SIZE. |
STK_SIZE |
STK_SIZE: Maximum System Stack Size selection initialization value. Default value is 0 for 256-word stack size. Set STK_SIZE to the following values for other stack sizes: 0 for 256-word system stack If you select 7, the system-stack size is defined with the SSTSZ variable. |
USTSZ |
Set the user stack space. The user stack is used for automatic variables. |
WATCHDOG |
Hardware Watchdog control. Default: disable the hardware watchdog. To enable the watchdog set WATCHDOG = 1. |
C166: PURPOSE OF START167.A66
QUESTION
What is the purpose of the START167.A66 file? It seems to configure the memory arrangements of the device. If that is the case, when is it executed?
ANSWER
START167.A66 contains the startup code for the C167 derivative devices. It executes immediately upon reset of the device and optionally performs the following operations in order:
- Initializes the SYSCON SFR registers (and BUSCON0 for the C167).
- Initializes the ADDRSELx and BUSCONx SFR registers to configure memory access.
- Reserves and initializes the hardware stack and the stack underflow and overflow registers.
- Sets up DPP0 to DPP3 and CP for memory and registerbank access.
- Reserves and initializes the user stack area and the user stack pointer (R0).
- Clears data memory.
- Initializes variables that were explicitly initialized.
- Calls the main function.
If you are using the monitor, then the monitor contains it's own startup code that performs most of these operations. Once it has been completed, the startup code in your own application has no effect on the configuration of the device.
C166: START167.A66 FOR EVALUATION BOARDS
QUESTION
I have a Phytec KC167CR evaluation board and a simple IO port example to demonstrate the board. I use the default START167.A66 provided by the Keil C166 compiler. The program does not run on the KC167CR board. What could be wrong?
ANSWER
The purpose of the START167.A66 file is to configure specific hardware conditions of the C16X device specifically for the target hardware. In this case the target hardware is the Phytec KC167CR evaluation board. Therefore, you must have the specific Phytec provided START167.A66 file for the KC167CR.
The START167.A66 contains the startup code for the C167 derivative devices. It is executed immediately upon reset of the device and optionally performs the following operations in order:
- Initializes the SYSCON SFR registers (and BUSCON0 for the C167)
- Initializes the ADDRSELx and BUSCONx SFR registers to configure memory access
- Reserves and initializes the hardware stack and the stack underflow and overflow registers
- Sets up DPP0 to DPP3 and CP for memory and registerbank access
- Reserves and initializes the user stack area and the user stack pointer (R0)
- Clears data memory
- Initializes variables that were explicitly initialized
- Calls the main function
If you are using the monitor, then the monitor contains it's own startup code that performs most of these operations. Once it has been completed, the startup code in your own application has no effect on the configuration of the device.
The C:\Keil\C166\EXAMPLES\BOARDS directory has examples and the appropriate START167.A66 files for popular C16X evaluation boards.
START167 AND BOOT167的更多相关文章
- MON166 FAQ
MON166: SOFTWARE RESET USING THE MONITOR QUESTION What happens when debugging using MON166 and my pr ...
随机推荐
- 使用git自动将子工程发布到百度开放云上
我的项目中包含多个子工程,如web工程.python工程等.我在项目的根目录下建立了git管理,因此如果使用git push只能把整个项目推送上去,但我只想推送web工程目录.因此,编写了cmd脚本如 ...
- N元数组的子数组之和的最大值
题目:有N个整数的元素的一维数组,求子数组中元素之和中最大的一组(思想:动态规划) 分析: 设该数组为array[N], 那么对于array[i]该不该在元素之和最大的那个子数组中呢?首先,不如假设a ...
- 基于XMPP协议的手机多方多端即时通讯方案
一.开发背景 1.国际背景 随着Internet技术的高速发展,即时通信已经成为一种广泛使用的通信方式.1996年Mirabilis公司推出了世界上第一个即时通信系统ICQ,不到10年间,即时通信(I ...
- java 判断两个时间段是不是有交集
如上图:X Y Z 分别为传来的开始时间可能位于数据库中时间段的位置. X有三种可能 即传来的开始时间为与数据可中某条数据的开始位置! 这样他的结束时间就有三种可能 1.位于 ...
- springMVC框架访问web-inf下的jsp文件
博客原文章:http://td.xue163.com/1042/1/10425265.html 用户提出问题:springMVC框架访问web-inf下的jsp文件,具体如下: 使用springMVC ...
- 插入排序 --- 排序算法 --- 算法 --- java
设数组为a[0…n-1]. 1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1].令i=1 2. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间 ...
- For Microsoft Azure Network VNET to VNET Connection
将一个 Azure 虚拟网络 (VNet) 连接到另一个 Azure 虚拟网络非常类似于将虚拟网络连接到本地站点位置.这两种连接类型都使用虚拟网络网关通过 IPsec/IKE 提供安全隧道.连接的 V ...
- ado无法访问数据库问题
现象:以ADO方式访问数据库的C++程序,在一台计算机上能访问成功,在另一台计算机上却访问不成功,报告不能连接错误,并且这两台计算机都装有ado. 原因:ado版本不对 解决方案:下载KB983246 ...
- Linux系统github使用
命令行下使用: 1.检查ssh key cd ~/.ssh 如果提示"No such file or directory",则需要创建一个ssh key. 2.创建ssh key. ...
- Uva 10007 / HDU 1131 - Count the Trees (卡特兰数)
Count the Trees Another common social inability is known as ACM (Abnormally Compulsive Meditation) ...