打印

S3C44B0X开发技巧

[复制链接]
3080|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mon51|  楼主 | 2007-10-6 09:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
KEIL下是不支持S3C44B0X的开发的。现在许多人还是用ADS1.2。在开发时,会发现,查看内部寄存器的值,是非常麻烦的。现在告诉大家一个简单而且方便的方法:
1:唾弃三星源码定义。
2:全部采用数据结构定义。
三星的源码,如果仔细分析,会发现许多问题。编写的并不精炼!学习者,不应该照葫芦画瓢。
ADS1.2中对数据结构的查看是非产简单的。可以当做变量查看。
例如:
/******************************************************************************/
/*                                                                            */
/*  CLOCK.H:  Header file for Clock & Power Management                        */
/*            Samsung S3C44B0X                                                */
/*                                                                            */
/******************************************************************************/

#ifndef __CLOCK_H
#define __CLOCK_H


#define CLK_BASE    0x01D80000  // Clock & Power Management Base Address


// Clock & Power Management Registers
typedef struct {
  reg32 PLLCON;     // PLL Control
  reg32 CLKCON;     // Clock Control
  reg32 CLKSLOW;    // Slow Clock Control
  reg32 LOCKTIME;   // PLL Lock Time Counter
} regCLK;

#define pCLK ((regCLK *)CLK_BASE)

extern void CLOCK_Set(void);

#endif /* __CLOCK_H */

相关帖子

沙发
mon51|  楼主 | 2007-10-6 09:26 | 只看该作者

ADC

/******************************************************************************/
/*                                                                            */
/*  ADC.H:  Header file for A/D Converter                                     */
/*          Samsung S3C44B0X                                                  */
/*                                                                            */
/******************************************************************************/

#ifndef __ADC_H
#define __ADC_H


#define ADC_BASE    0x01D40000  // A/D Converter Base Address


// A/D Converter Registers
typedef struct {
  reg32 ADCCON;     // ADC Control
  reg32 ADCPSR;     // ADC Prescaler
  reg32 ADCDAT;     // ADC Data
} regADC;

#define pADC ((regADC *)ADC_BASE)


// ADCCON: ADC Control Register
#define ENABLE_START    0x00000001
#define READ_START      0x00000002
#define INPUT_AIN0      0x00000000
#define INPUT_AIN1      0x00000004
#define INPUT_AIN2      0x00000008
#define INPUT_AIN3      0x0000000C
#define INPUT_AIN4      0x00000010
#define INPUT_AIN5      0x00000014
#define INPUT_AIN6      0x00000018
#define INPUT_AIN7      0x0000001C
#define ADC_SLEEP       0x00000020
#define ADC_FLAG        0x00000040


#endif /* __ADC_H */

使用特权

评论回复
板凳
mon51|  楼主 | 2007-10-6 09:28 | 只看该作者

uart

/******************************************************************************/
/*                                                                            */
/*  UART.H:  Header file for UART                                             */
/*           Samsung S3C44B0X                                                 */
/*                                                                            */
/******************************************************************************/

#ifndef __UART_H
#define __UART_H


#define UART0_BASE  0x01D00000  // UART0 Base Address
#define UART1_BASE  0x01D04000  // UART1 Base Address


// UART Registers
typedef struct {
  reg32 ULCON;      // UART Line Control
  reg32 UCON;       // UART Control
  reg32 UFCON;      // UART FIFO Control
  reg32 UMCON;      // UART MODEM Control
  reg32 UTRSTAT;    // UART Tx/Rx Status
  reg32 UERSTAT;    // UART Error Status
  reg32 UFSTAT;     // UART FIFO Status
  reg32 UMSTAT;     // UART MODEM Status
  reg8  UTXH;       // UART Tx Hold
  reg8  pad0[3];
  reg8  URXH;       // UART RX Buffer
  reg8  pad1[3];
  reg32 UBRDIV;     // UART Baud Rate Divisor
} regUART;

#define pUART0 ((regUART *)UART0_BASE)
#define pUART1 ((regUART *)UART1_BASE)


// ULCON: UART Line Control Register
#define DATA_5          0x00
#define DATA_6          0x01
#define DATA_7          0x02
#define DATA_8          0x03
#define STOP_ONE        0x00
#define STOP_TWO        0x04
#define PARITY_NONE     0x00
#define PARITY_ODD      0x20
#define PARITY_EVEN     0x28
#define PARITY_FC1      0x30
#define PARITY_FC0      0x38
#define NORMAL_MODE     0x00
#define IRDA_MODE       0x40

// UCON: UART Control Register
#define RXM_INTPOL      0x0001
#define RXM_BDMA0       0x0002  // UART0 Only
#define RXM_BDMA1       0x0003  // UART1 Only
#define TXM_INTPOL      0x0004
#define TXM_BDMA0       0x0008  // UART0 Only
#define TXM_BDMA1       0x000C  // UART1 Only
#define SEND_BREAK_SIG  0x0010
#define LOOPBACK_MODE   0x0020
#define RXINT_ERRSTAT   0x0040
#define RX_TIMEOUT      0x0080
#define RXINTTYP_LEVEL  0x0100
#define TXINTTYP_LEVEL  0x0200

// UFCON: UART FIFO Control Register
#define FIFO_EN         0x01
#define RXF_RST         0x02
#define TXF_RST         0x04
#define RXF_TRIG4B      0x00
#define RXF_TRIG8B      0x10
#define RXF_TRIG12B     0x20
#define RXF_TRIG16B     0x30
#define TXF_TRIG4B      0x40
#define TXF_TRIG8B      0x80
#define TXF_TRIG12B     0xC0

// UMCON: UART MODEM Control Register
#define RTS_ACTIVE      0x01
#define AFC_EN          0x10

// UTRSTAT: UART Tx/Rx Status Register
#define RX_BUF_READY    0x01
#define TX_BUF_EMPTY    0x02
#define TX_EMPTY        0x04

// UERSTAT: UART Error Status Register
#define OVERRUN_ERR     0x01
#define PARITY_ERR      0x02
#define FRAME_ERR       0x04
#define BREAK           0x08

// UFSTAT: UART FIFO Status Register
#define RXF_SHIFT       0
#define TXF_SHIFT       4
#define RXF_CMASK       0x000F
#define TXF_CMASK       0x00F0
#define RXF_FULL        0x0100
#define TXF_FULL        0x0200

// UMSTAT: UART MODEM Status Register
#define CTS_ACTIVE      0x01    // CTS Pin is Low
#define CTS_CHANGED     0x10
//******************************************************************************
extern regUART *UART_Get(unsigned char com);
extern void UART_Printf(unsigned char com,char *fmt,...);
extern void UART_FIFO_Get_Buf(unsigned char com,unsigned char *pBuf,unsigned int Long);
extern void UART_FIFO_Send_Buf(unsigned char com,unsigned char *pBuf,unsigned int Long);
extern void UART_Send_Buf(unsigned char com,unsigned char *p,unsigned int Long);
extern void UART_Get_Buf(unsigned char com,unsigned char *p,unsigned int Long);
extern void UART_Send_Byte (unsigned char com,unsigned char Dat);
extern unsigned char UART_Get_Byte (unsigned char com);
extern void UART_Init(unsigned char com,unsigned int BPS);
#endif /* __UART_H */

使用特权

评论回复
地板
mon51|  楼主 | 2007-10-6 09:31 | 只看该作者

RTC(更多的定义,请发邮件!)

/******************************************************************************/
/*                                                                            */
/*  RTC.H:  Header file for Real Time Clock (RTC)                             */
/*          Samsung S3C44B0X                                                  */
/*                                                                            */
/******************************************************************************/

#ifndef __RTC_H
#define __RTC_H


#define RTC_BASE    0x01D70040  // Real Time Clock Base Address


// Real Time Clock Registers
typedef struct {
  reg8  RTCCON;     // RTC Control
  reg8  pad0[15];
  reg8  RTCALM;     // RTC Alarm
  reg8  pad1[3];
  reg8  ALMSEC;     // Alarm Second
  reg8  pad2[3];
  reg8  ALMMIN;     // Alarm Minute
  reg8  pad3[3];
  reg8  ALMHOUR;    // Alarm Hour
  reg8  pad4[3];
  reg8  ALMDAY;     // Alarm Day
  reg8  pad5[3];
  reg8  ALMMON;     // Alarm Month
  reg8  pad6[3];
  reg8  ALMYEAR;    // Alarm Year
  reg8  pad7[3];
  reg8  RTCRST;     // RTC Round Reset
  reg8  pad8[3];
  reg8  BCDSEC;     // BCD Second
  reg8  pad9[3];
  reg8  BCDMIN;     // BCD Minute
  reg8  padA[3];
  reg8  BCDHOUR;    // BCD Hour
  reg8  padB[3];
  reg8  BCDDAY;     // BCD Day
  reg8  padC[3];
  reg8  BCDDATE;    // BCD Date
  reg8  padD[3];
  reg8  BCDMON;     // BCD Month
  reg8  padE[3];
  reg8  BCDYEAR;    // BCD Year
  reg8  padF[3];
  reg8  TICINT;     // Tick Time Count
  reg8  padG[3];
} regRTC;

欢迎到:http://auction1.taobao.com/auction/0/item_detail-0db2-14a681ee629ab3ceee2dfa1dce58b19c.jhtml
提供S3C44B0X的开发资料和芯片!

使用特权

评论回复
5
computer00| | 2007-10-6 11:02 | 只看该作者
6
xieqin| | 2007-10-6 16:24 | 只看该作者

你这个方法是从keil那里学来的吧

MDK安装目录ARMINCSamsungS3C44B0X目录就有这些头文件.

使用特权

评论回复
7
shgeng2005| | 2007-10-19 11:36 | 只看该作者

这种结构蛮好的

这种结构蛮好的,可是在实际应用中怎么来调用呢?我现在要编个程序,用UART0接收数据然后用6位数码管将数据实时地显示出来,用这样的结构怎么做呀?!

使用特权

评论回复
8
computer00| | 2007-10-19 12:32 | 只看该作者

就是结构体调用啊

使用特权

评论回复
9
shgeng2005| | 2007-10-19 13:07 | 只看该作者

结构体。

哦。谢谢
struct 前面的typedef是什么意思,结构定义的时候要加上这个吗?说上怎么没有这个说明呀?

使用特权

评论回复
10
computer00| | 2007-10-19 13:25 | 只看该作者

那样就定义了一个类型,下面可以用它做强制类型转换

#define pCLK ((regCLK *)CLK_BASE)

这样就得到了一个pCLK的指针,使用时,直接用pCLK.

pCLK->PLLCON = xxx;

或者

(*pCLK).PLLCON = xxx;

使用特权

评论回复
11
shgeng2005| | 2007-10-19 14:44 | 只看该作者

computer00

太感谢您的解释了,虽然我没有理解透,但至少我懂得他的用法了,谢谢您!

使用特权

评论回复
12
1527820835| | 2013-7-19 15:55 | 只看该作者
了解了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

121

主题

472

帖子

7

粉丝