對於jz2440開發板,有三個時鐘:fclk是cpu時鐘,hclk是外設時鐘,通訊輸入用pclk時鐘。2440的晶振頻率是12mb,設定pll暫存器將其提高,再將其分頻給fclk, hclk和pclk。
如何設定fclk, hclk, pclk?
1.鎖定時間:設定pll的同時,fclk停止(cpu停止執行),經過一定的鎖定時間後,cpu以設定的新頻率執行(fclk以新的頻率)
2.pll暫存器(查詢2440手冊的mpllcon)
3.分頻:將cpu的晶振頻率經過處理後分發給各個時鐘
**:head.s:
@***
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
***@ file:head.s
@ 功能:設定sdram,將程式複製到sdram,然後跳到sdram繼續執行@**
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
.extern main
.text
.global _start
_start:
reset:
ldr sp,
=4096 @ 設定棧指標,以下都是c函式,呼叫前需要設好棧
bl disable_watch_dog @ 關閉watchdog,否則cpu會不斷重啟
// bl是位置無關碼,相當於:pcnew = pc + 偏移
// pcnew = (4+8) + 0x28 = 0x34
ldr pc,
=disable_watch_dog
bl clock_init @ 設定mpll,改變fclk、hclk、pclk
bl memsetup @ 設定儲存控制器以使用sdram
bl copy_steppingstone_to_sdram @ 複製**到sdram中
ldr pc,
=on_sdram @ 跳到sdram中繼續執行
on_sdram:
ldr sp,
=0x34000000 @ 設定棧指標
ldr lr,
=halt_loop @ 設定返回位址
ldr pc,
=main @ 呼叫main函式
halt_loop:
b halt_loop
init.c:
/*
* init.c: 進行一些初始化
*/ #include "s3c24xx.h"
void disable_watch_dog
(void)
;void clock_init
(void)
;void memsetup
(void)
;void copy_steppingstone_to_sdram
(void);/*
* 關閉watchdog,否則cpu會不斷重啟
*/void disable_watch_dog
(void)
#define s3c2410_mpll_200mhz (
(0x5c
<
<12)
|(0x04
<
<4)
|(0x00))
#define s3c2440_mpll_200mhz (
(0x5c
<
<12)
|(0x01
<
<4)
|(0x02))
/* * 對於mpllcon暫存器,[19:12]為mdiv,[9:4]為pdiv,[1:0]為sdiv
* 有如下計算公式:
* s3c2410: mpll(fclk) = (m * fin)/(p * 2^s)
* s3c2440: mpll(fclk) = (2 * m * fin)/(p * 2^s)
* 其中: m = mdiv + 8, p = pdiv + 2, s = sdiv(mdiv,pdiv,sdiv位於pllcon)
* 對於本開發板,fin = 12mhz
* 設定clkdivn,令分頻比為:fclk:hclk:pclk=1:2:4,
* fclk=200mhz,hclk=100mhz,pclk=50mhz
*/void clock_init
(void)
else}/*
* 設定儲存控制器以使用sdram
*/void memsetup
(void)
void copy_steppingstone_to_sdram
(void)
}
如何使用串列埠:
1.確定使用哪個串列埠
2.設定波特率和流控
3.開啟
4.收發
**:
#include
"s3c24xx.h"
#include
"serial.h"
#define txd0ready (1<<2)
//矚目********
#define rxd0ready (1)
#define pclk 50000000
// init.c中的clock_init函式設定pclk為50mhz
#define uart_clk pclk
// uart0的時鐘源設為pclk
#define uart_baud_rate 115200
// 波特率
#define uart_brd ((uart_clk / (uart_baud_rate * 16)) - 1)
/* * 初始化uart0
* 115200,8n1,無流控
*/void
uart0_init
(void)/*
* 傳送乙個字元
*/void
putc
(unsigned
char c)
/* * 接收字元
*/unsigned
char
getc
(void)/*
* 判斷乙個字元是否數字
*/int
isdigit
(unsigned
char c)
/* * 判斷乙個字元是否英文本母
*/int
isletter
(unsigned
char c)
位置無關碼,依賴於程式當前執行的pc值,進行相對的跳轉,導致的結果就是,無論**在哪,總能達到指令的正常目的,因此是位置無關的。pc = pc0 + 偏移。對arm架構,pc值為當前指令的位址+8。檢視反編譯得知,偏移量為0x28,這個偏移值由編譯器自動算出,與機器碼存在對應關係。彙編用b和bl來跳轉。
位置有關碼不依賴當前pc值,是絕對跳轉,只有程式執行在鏈結位址處時,才能達到指令的正常目的,因此是位置有關係的。
第七課 光照和鍵盤
這一課我會教您如何使用三種不同的紋理濾波方式。教您如何使用鍵盤來移動場景中的物件,還會教您在opengl場景中應用簡單的光照。這一課包含了很多內容,如果您對前面的課程有疑問的話,先回頭複習一下。進入後面的 之前,很好的理解基礎知識十分重要。我們要在第一課的 上進行改動就可以了。我們將要增加乙個loa...
第七課類和結構體
類和結構體是人們構建 所用的一種通用且靈活的構造體。為了在類和結構體中實現各種功能,我們必須要嚴格按照對於常量,變數以及函式所規定的語法規則來定義屬性和新增方法。乙個類的例項,被成為物件。swift 中類和結構體有很多共同點。1 類和結構體對比 共同處 定義屬性用於儲存值 定義方法用於提供功能 定義...
NeHe OpenGL第七課 光照和鍵盤
nehe opengl第七課 光照和鍵盤 光照和鍵盤控制 在這一課裡,我們將新增光照和鍵盤控制,它讓程式看起來更美觀。這一課我會教您如何使用三種不同的紋理濾波方式。教您如何使用鍵盤來移動場景中的物件,還會教您在opengl場景中應用簡單的光照。這一課包含了很多內容,如果您對前面的課程有疑問的話,先回...