組み込みシステムの概要

1.アーム命令構造には、32ビットのアーム命令セットと16ビットのサム命令セットが含まれます。
arm命令は、単語境界の配置を満たす必要があります。
サム命令は、ハーフワード境界の配置を満たします。
アームビット[0] = 1からサムレジスタRmのステータスビットを入力する場合は、BXRm命令を実行してジャンプします。
サムから入力されたアームレジスタRmのステータスビットbit [0] = 0の場合、BXRm命令ジャンプが実行されます。プロセッサが例外処理に入ると、例外ベクトルアドレスから実行が開始され、システムは自動的にアームに入ります。
例:腕から親指へ
    LDR R0、= Lable + 1
    BX R0
例:親指から腕へ
    LDR R0、= Lable
    BX R0

アームプロセッサは、バイト(8ビット)、ニブル(16ビット)、およびワード(32ビット)をサポートします。
ビッグエンディアン形式:上位バイトは下位ストレージバイトアドレスに格納されます。
リトルエンディアン形式:上位バイトは上位ストレージバイトアドレスに格納されます。
例:0x12345678開始アドレスは次のとおりです:0x8000
    大きい:小さい:
        0x78 0x8003 0x12
        0x56 0x8002 0x34 
        0x34 0x8001 0x45
        0x12 0x8000 0x78

アームによって処理される7つのモード:
                            CPSR [4:0]モード目的:              
                            1000ユーザーユーザーモード
   特権モード:{例外モード:{1001FIQ高速割り込み
                            1002IRQ通常割り込み
                            1003SVCソフトウェア割り込み
                            1004処理メモリ障害の中止、仮想メモリとメモリの実現保護
                            1005未定義、トラップされた未定義コマンドの処理}
                            特権オペレーティングシステムタスクを実行している1006システム}

アームプロセッサには全部で37個のレジスタがあり、31個の一般レジスタと6個のステータスレジスタに分けられます。
FIQ処理プログラムは、割り込みサイトを保存および復元する必要がないため、FIQ割り込み処理プロセスがより高速になります。
R13(SP):スタックポインタSPと呼ばれます。アプリケーションプログラムが各例外モードを初期化するとき、対応するスタックを指すようにこのモードでR13を初期化する必要があります。
           例外モードを終了すると、ポインタR13に保存されます。スタック内のレジスタ値がポップされます。
R14(LR):サブルーチンの戻りアドレスを格納するために使用します。実行後、R14の値をpcにコピーすると、サブルーチンが戻ることができます。
R15(PC):アドレス値をR15に書き込むと、プログラムはこのアドレスにジャンプします。
ステータスレジスタ:CPSR、SPSR
            CPSR 1、4条件コードフラグ:負、ゼロ、キャリー、オーバーフロー
                2、2割り込み禁止ビット
                3、5コード化ビット             4、1
                アームかサムかを示す
NZCV --- IFT M4 M3 M2 M1M0
            条件コードフラグ予約ビット制御ビット

異常なベクトルアドレステーブル:異常な割り込みタイプ
アドレスタイプモードに入るI状態に入るF状態に入る優先度
0x00000000リセット管理禁止禁止10x00000004
未定義命令未定義禁止F6 0x0000 0008SWI
管理F7
0x0000000C中止中止F 5
0x00000010データが中止されました中止F2
0x00000014予約済み予約済みF               
0x0000
0018IRQ割り込みF4 0x0000 001CFIQ高速割り込み無効無効3

S3C2440は、arm902T、AHBバス、APBバスの3つの部分に分かれています。
ARM920tコア16ビット/ 32ビットRISCマイクロプロセッサ。
AHBは、高クロック周波数と高性能システムモジュールを接続するために使用されます。
APBは、パフォーマンスが低く、周辺機器が遅い、よりシンプルなインターフェイスを提供します。
キャリー付きADCの加算器
ADD加算
ANDロジックおよび
B分岐ジャンプ
BICは、クリアビット
接続分岐ジャンプとBL
BX分岐と状態切替ジャンプ
処理CDPコプロセッサデータを
CMNの負の数の比較
CMP比較
EOR論理XOR
LDCをメモリからコプロセッサへのデジタルデータのロード、コプロセッサは
LMDをロードしてデジタルデータをロードし、メモリから複数のレジスタへ、スタック操作

レジスタアドレス指定:
MOV R1、R2; R1 <R2
SUB R0、R1、R2; R0 <R1-R2

即時アドレス指定:
ADD R0、R0、#1; R0 <R0 + 1
MOV R0、#0XFF00; R0 <0XFF00

レジスタシフトアドレッシング:
MOV R0、R2、LSL#3; R0 <R2 << 3
ADD R3、R2、R2、LSR#2; R3 <R2 + R1 >> 2

レジスタ間接アドレス指定:
LDR R0、[R1]; R0 <-[R1]
STR R0、[R1]; [R1] <-R0

ベースアドレスと
アドレス変更前のオフセットアドレス:LDR R0、[R1、#4]; R0 <-[R1 + 4]
自動アドレス変更:LDR R0、[R1、#4] !; R0 <-[R1 + 4]、R1 <-R1 + 4
!自動インデックス機能
ポストインデックスモード:LDR R0、[R1]、#4; R0 <-[R1]はデータを送信、R1 <-R1 + 4はアドレスを送信
例:
    LDR R0 、[R1、R2]; R0 <-[R1 + R2]
    LDR R0、[R1、R2、LSL#2]; R0 <-[R1 + R2 * 4]

データ転送命令MOVMOV
R1、R2;
MOV PC、R14
MOV R1、R0、LSL#3と同様に、レジスタR0の値をレジスタR1に転送します。

リバースデータ送信:MVN
MVN R0、#0;リバース0およびR0への送信

比較命令:CMP
CMP R1、R0; R1とR0を減算し、結果に応じてCPSRフラグを設定します

BICビット
BICR0、R0、#0XBをクリアします。R0の0、1、3ビットをクリアし、残りは変更されません。

BジャンプCMPR1
、#1; R1の値から0を引いた値、CPSRのフラグビット
BEQ Lableを設定します;条件付きでジャンプします。CPSRのフラグビットZが設定されると、プログラムはLableにジャンプします。

状態切り替えBXを使用した転送命令
Rnの最下位ビットが1の場合、CPSRのTフラグを1に設定し、Thumb命令セット
MOV R6、#0X8000 BXR6に
切り替えます。アドレス0x8000でThumb命令に切り替えます。

転送命令
BLBL Lable with return ;プログラムは、実行のために無条件にLableにジャンプし、同時にR14にPCの値を保存します。

リターンおよびステートリターン付きの転送命令BLX

乗算命令および乗算加算命令(MUL、MLA)
MUL R0、R1、R2; R0 = R1 * R2
MULS R0、R1、R2; R0 = R1 * R2同時に、CPSR関連フラグ
MLA R0、R1、R2、R3を設定します。 ; R0 = R1 * R2 + R3
MLAS R0、R1、R2、R3; R0 = R1 * R2 + R3同時に、CPSRの関連するフラグビットを設定します

長い乗算命令(SMULL、UMULL)
SMULLは、64ビットの符号付き乗算演算を表します:
SMULL R0、R1、R2、R3、R4; R0 =(R2 * R3)の下位32ビット、R1 =(R2 * R3)の上位32ビットビット
UMULLは64ビットの符号付き乗算を表します:
UMULL R0、R1、R2、R3、R4; R0 =(R2 * R3)の下位32ビット、R1 =(R2 * R3)の上位32ビット

ワードデータロードコマンド:LDR、上記の例があります。
バイトデータロードコマンド:LDRB
LDRB R0、[R1];メモリアドレスR1のバイトデータをレジスタR0に
読み込みR0の上位24ビット0にクリアします。LDRBR0、 [R1、#8];メモリアドレスR1 + 8のバイトデータをレジスタR0に
読み込み、R0の上位24ビットを0にクリアします。ハーフワードデータロード命令:LDRH
LDRH R0、[R1];メモリアドレスをに設定します。 R1のニブルデータをレジスタR0に読み込み、R0の上位16ビット
0にクリアします。LDRHR0、[R1、#8];メモリアドレスがR1 + 8のニブルデータをレジスタR0に読み込み、R0を設定します。
R0 LDRH R0、[R1、R2]の上位16ビットをクリアします。メモリアドレスR1 + R2のニブルデータをレジスタR0に読み込み、R0の上位16ビットを0にクリアします。

ワードデータストレージ命令:STR
STR R0、[R1]、#8; R1 <-R0はデータを転送し、R1 <-R1 +8はアドレスを転送します
STRR0、[R1、#8]; R1 + 8 <-R0
バイトデータストレージ命令:STRBはソースレジスタの下位8ビットバイトデータをメモリに転送します
STRB R0、[R1]
STRB R0、[R1、#8]
ハーフワードデータストレージ:STRHはソースレジスタの16ビットバイトを転送しますデータはメモリ
STRHR0、[R1]
STRH R0、[R1、#8]に転送されます

ワードデータ交換命令:SWP
SWP R0、R1、[R2]; R0 <-R2、R2 <
-R1バイトデータ交換命令:SWPB上位24ビットがクリアされ、下位8ビットが交換されます
SWPB R0、R1、[R2]; R0 <-R2、R2 <-R1

プログラムステータスレジスタから一般プログラムレジスタへのデータ転送:MRS
MRS R0、CPSR; R0 <-CPSR
MRS R0、SPSR; R0 <-
一般プログラムレジスタからプログラムステータスレジスタへのSPSRデータ転送:MSR
MSR CPSR、R0; CPSR <- R0
MSR SPSR、R0; SPSR <
-R0 MSR CPSR_C、R0; CPSR <-R0は制御ビットフィールドのみを変更します

 

ARMマイクロプロセッサは16個のコプロセッサ、
1、データ操作命令をサポートできます:CDP
CDP P2、5、C12、C10、C3、4;コプロセッサp2の初期化を完了し、p2にc10、c35での操作を実行させますそして4、そして結果をc12に保存します。
2.データロード命令:LDC P5、C3、[R0]; P5のC3 <-R0
3、データストレージ命令:STC P8、C8、[R2、#4]!;(R2 +4)<-P8のC8 、R2は、< - R2 + 4
4、コプロセッサのレジスタからのデータ転送命令:MCR
MCR P3,3、R0、C4、C5,6; R5のデータはP3のC4及びC5に転送される
5、コプロセッサレジスタへのデータ転送命令:MRC
MRC P15,2、R5、C0、C2,4; P15レジスタのデータはR5に転送され、C0、C2は元のオペランドを格納するコプロセッサレジスタであり、opcode1はIです。 Opcode2は4です。

ソフトウェア割り込み:SWI
MOV R0、#34;機能番号を34
SWI 12に設定;ソフトウェア割り込みを生成、割り込み番号は12

シンボル定義インジケーター:
GBLAはグローバル算術変数を定義し、0に初期化
GBLLはグローバル論理変数を定義し、falseに初期化
GBLSはグローバル文字列変数を定義し、NULLに初期化例
:GBLS S1;グローバル文字列変数S1を
宣言ローカル変数宣言:
LCLA
LCLL
LCLS;
変数値を上記のように設定します:
SETA
SETL
SETS;意味は上記と同じです。
例:S1 SETS "string"
シンボル名に定数値を指定します:
num2 EQU25;シンボルnum2に値25を割り当てます。

ADRは、PCの相対オフセットに基づいてアドレス値をレジスタに読み取る、小範囲のアドレス読み取り疑似命令です。ldrが取得するのは、メモリの値であり、ポインタのような間接アドレス指定です。
test1
MOV r1、#0
ADR r2、test1; SUB命令を生成し、アドレスtest1からr2をロードします。LDRを
使用する2つの主な目的は、1は、即値の値が範囲外の場合、MOVおよびMVN命令を使用できない場合です。レジスタにロードするときは、LDR命令を使用してリテラルプール定数を生成します。2は、相対プログラムまたは外部アドレスをレジスタにロードすることです。
アセンブリ言語のコマンドを大文字と小文字を混在させることはできません。
PCはプログラムカウンターの略で、パイプラインは3つのステージを使用するため、命令は3つのステージで実行され
ます。1。フェッチ(メモリから命令をロード)、2。デコード(実行する命令を特定)、3。実行(処理)指示し、結果をレジスタに書き戻します)。
また、R15(PC)は、「実行」命令や「デコード」命令ではなく、常に「フェッチ」命令を指します。
一般的に、現在の第1命令と呼ばれる「基準点として実行されている命令」を使用することに人々は習慣的に同意しているため、PCは常に第3命令を指します。
ARM状態の場合、各命令の長さは4バイトであるため、PCは常に命令のアドレスに8バイトを加えたものを指します。つまり、PC値=現在のプログラム実行位置+ 8;

組み込みプロセッサS3C2440は400MHZのクロック周波数で動作できるため、クロック管理ユニットがチップに統合されています。このユニットは、主に位相ロックループと分周器で構成されています。
S3C2440チップ内のクロック信号は、FCLK、HCLK、およびPCLKです。
S3C2440には、MPLLとUPLLの2つのフェーズロックループがあります。MPLLは、3種類の信号を生成します。FCLK、HCLK、PCLK、FCLKはarm920Tに使用され、HCLKはAHBバスに使用され、PCLKはAPBバス
使用され、USBフェーズロックループによって生成されるクロック信号UPLL UCLKはUSBに使用され、UPLLはUSBデバイス専用です
/ *設定MPLLCON(0x4C000004)=(92 << 12)|(1 << 4)|(1 << 0) 
     * m = MDIV + 8 = 92 + 8 = 100
     * p = PDIV + 2 = 1 + 2 = 3
     * s = SDIV = 1
     * FCLK = 2 * m * Fin /(p * 2 ^ s)= 2 * 100 * 12 /(3 * 2 ^ 1)= 400M 

 

  システムクロックの初期化

 

システム起動後の基本設定:
ldr r0、= 0x53000000 //ウォッチドッグタイマーをオフにする
    ldrr1、= 0
    str r1、[r0]
    / * MPLL、FCLK:HCLK:PCLK = 400m:100m:50mを設定* /
    / * LOCKTIME(0x4C000000)= 0xFFFFFFFF * ///デフォルト値に設定
    ldrr0、= 0x4C000000
    ldr r1、= 0xffffffff
    str r1、[r0]
   / * CLKDIVN(0x4C000014)= 0X5、tFCLK:tHCLK:tPCLK = 1:4: 8 * /// 3つの基本比率を設定し     ます     ldrr0
    、= 0x4C000014
ldr r1、= 0x5
str r1、[r0]
    / * CPUを非同期モードで動作するように設定します* /
    mrc p15,0、r0、c1、c0,0
    orr r0、r0、#0xc0000000 // R1_nF:OR:R1_iA
    mcr p15,0、r0、c1、c0,0
    / * MPLLCON(0x4C000004)=(92 << 12)|(1 << 4)|(1 < <0) 
     * m = MDIV + 8 = 92 + 8 = 100
     * p = PDIV + 2 = 1 + 2 = 3
     * s = SDIV = 1
     * FCLK = 2 * m * Fin /(p * 2 ^ s)= 2 * 100 * 12 /(3 * 2 ^ 1)= 400M
     * /
    ldr r0、= 0x4C000004 //設定fclk是
    400MHZldr r1、=((92 << 12)|(1 << 4)|(1 << 0))
    str r1、[r0]

    / * PLLが設定されると、PLL出力が安定するまでロック時間がロックされます
     *その後、CPUは新しい周波数FCLKで動作します
     * /
    
    

    / *メモリを設定します:sp stack * /
    / *区別はnor / nand start
     * 0から0のアドレスを書き込んでから、それを読み取り
     ます* 0を取得した場合、アドレス0のコンテンツが変更されたことを意味します。これはramに対応し、これはnandstartです。
     *それ以外の場合は、norで開始します
     * /
    mov r1、#0
    ldr r0、[r1]
    str r1、[r1]
    ldr r2、[r1]
    cmp r1、r2
    ldr sp、= 0x40000000 + 4096
    streq r0、[r1]
    blメイン
停止:
    b停止

タイマークロック周波数= PCLK /((8ビットプリ
スケーラー+ 1)*クロック分周器値)TCNTBnとTCMPBnのダブルバッファー機能により、周波数とデューティサイクルを変更することにより、タイマーが安定した出力を生成します。
PWMパルス幅はTCMPBnによって実現され、周波​​数はTCNTBnによって決定されます。
ウォッチドッグタイマーの動作周波数= PCLK /((プリスケール値+ 1)/除算係数)


S3c2440のストレージコントローラーには、次の機能が含まれています
。1。システムはラージ/リトルエンディアンデータストレージ形式をサポートします
。2。ストレージスペースは8つのバンクに分割され、各バンクには128Mバイトのスペースがあり、アドレス可能な合計スペースは1GBです。nGCS0を使用〜nGCS7は、対応するバンク選択信号として機能します。
3. bank0を除いて、他のすべてのバンクには、8、16、32ビットの幅でプログラミングによってアクセスできます。
4. Bank1〜bank5はROMとSRAMを使用でき、bank6と7はROM / SRAM / SDRAMを使用できます
。5。Bank0〜bank6の開始アドレスは固定され、bank7の開始アドレスとサイズはプログラム可能です。
ストレージシステムは通常、フラッシュ(フラッシュメモリ)とSDRAMで構成されます。
フラッシュ機能もありません:小容量、高コスト、高信頼性、短寿命、高速読み取り速度。システムは、norflashで直接コマンドを実行して、システムを起動および起動できます。主に起動コードを保存するために使用されます。
nandflash:大容量、低価格、長寿命、高速書き込み速度、メインメモリには使用できず、セクターごとの読み取りと書き込みのみが可能で、小さなハードディスクとして使用できます。主にデータとプログラムを保存するために使用されます。nandflashからシステムを起動して起動し、SDRAMでメインプログラムを実行することもできます。
通常、組み込みハードウェアシステムのSDRAMストレージ領域としてbank6とbank7を使用します。
bank0のデータバスは、16ビット幅と32ビット幅で構成できます。Bank0はブートROMとして使用され、0x00000000にマップされます。したがって、bank0のバス幅は最初のROMアクセスで決定され、メソッドはリセット時にOM [1:0]のロジックレベルを介して行われます。
nandflashが開始されると、nandflashコントローラーは最初の4KデータをSRAMに自動的にコピーし、SRAM上のデータをnGCS0(0x000000000)にマップします。システムはSRAMから起動します
Norflashの起動:OM1ピンとOM0ピンは、norflashのビット幅に応じて構成する必要があります。ビット幅が16ビットの場合、OM1とOM0はそれぞれローとハイになり、ビット幅が32ビットの場合はその逆になります。この時点で、norflashはアドレス0x00000000にマップされています

 

おすすめ

転載: blog.csdn.net/qq_38531460/article/details/103103554