#define uchar unsigned char
#define uint unsigned int
sbit DIO=P3^0
sbit SCLK=P3^1
/*从SPI总线上读入一个字节*/
uchar read(void)
{
uchar data i,inData
for(i=0i<8i++) // 移告蔽8次
{
SCLK = 0 // 拉低时钟线
inData <<= 1// Most Significant Bit First
inData |= DIO // 从SPI总线的数据输出线SO上读入一位
SCLK = 1 //腔友猜 拉高时钟线
}
return(inData)
}
/*输出一个字节到SPI总线伍型上*/
void write(uchar outData)
{
uchar data i
for(i=0i<8i++) // 移8次
{
SCLK = 0
outData <<= 1
DIO = CY // 移出一位,送出至SPI总线的数据输入线SI上
SCLK = 1
}
}
void do_n_byte(uint length,uint* pSend)
{
while(length--)
{
write(*pSend)
pSend++
}
// PORTB |= (1<<ADS1255_CS)
}
long int read_data(void)
{
uchar i,send[]={0x01,0xff,0xff,0xff}
long int date
do_n_byte(sizeof(send),send)
// strncpy((uchar*)&data,send+1,3)
for(i=0i<24i++)
{
SCLK = 0 // 拉低时钟线
date <<= 1 // Most Significant Bit First
date |= DIO // 从SPI总线的数据输出线SO上读入一位
SCLK = 1 // 拉高时钟线
}
// _NOP()
//send[1]=read()
//send[2]=read()
//send[3]=read()
//date = send[1]*65536 + send[2]*256 +send[1]
return date
}
/*
long int read_data_c(uchar num)
{
uchar send[]={0x03,0xff,0xff,0xff}
long int date[]
long int j=0
do_n_byte(sizeof(send),send)
date[0] = send[1]*65536 + send[2]*256 +send[1]
for(j<numj++)
{
uchar send[]={0xff,0xff,0xff}
do_n_byte(sizeof(send),send)
date[j+1] = send[1]*65536 + send[2]*256 +send[1]
}
return date
}
*/
long int read_standby(void)
{
uchar send[]={0x01,0xff,0xff,0xff,0xfd}
long int date
do_n_byte(sizeof(send),send)
strncpy((uchar*)&date,send+1,3)
return date
}
void set_selfcal(void)
{
//PORTB &= ~(1<<ADS1255_CS)
write(0xf0)// lfcal command byte(in order to get the best performance)
// PORTB |= (1<<ADS1255_CS)
}
void set_wakeup(void)
{
//PORTB &= ~(1<<ADS1255_CS)
write(0x00)//wakeup command byte(0xff can too)
//PORTB |= (1<<ADS1255_CS)
}
void set_standby(void)
{
//PORTB &= ~(1<<ADS1255_CS)
write(0xfd)//standby command byte
//PORTB |= (1<<ADS1255_CS)
}
void set_sync(void)
{
//PORTB &= ~(1<<ADS1255_CS)
write(0xfc)//sync command byte
//PORTB |= (1<<ADS1255_CS)
}
void write_register(uchar addr,uchar date)
{
uchar send[] = {0x50,0x00,0x00}//write 1 register(as used 0x00)
send[0] |= addr//starting from register addr(as used 0101 "addr"b)
send[2] |= date//data writed
do_n_byte(sizeof(send),send)
}
uchar read_register(uchar addr)
{
uchar send[] = {0x10,0x00,0xff}//read 1 register(as used 0x00)
send[0] |= addr//starting from register addr(as used 0001 "addr"b)
do_n_byte(sizeof(send),send)
send[2]=read()
return send[2]//content saved in the send[2]
}
void init_spi(void)
{
}
void main()
{
while(1)
}
我不是神人,但我希望可以帮你解决问题,呵呵……首先,我有个小问题,你要求算的是2+4+8+……+100,是不是2的1次方,2次方,3次方?如果是,那应该是2+4+8+16+32+64,怎么有还加100呢?或者你笔误,应该是2—100之间的偶数相加呢?
好,下面来解决你的问题:
1.用ADS1.2运行你的加法程序,要注意一点就是ADS不能直链接运行C遍出来的程序,要用汇编代码启动。下面是启动代码startup.s文件(我空间有关于这个代码的分析,你可以去看看):
IMPORT |Image$$RO$$Limit|
IMPORT |Image$$RW$$Base|
IMPORT |Image$$ZI$$Base|
IMPORT |Image$$ZI$$Limit|
IMPORT Main 声明C程序中的Main()函数
AREA Start,CODE,READONLY 声明代码段Start
ENTRY标识程序入口
CODE32声明32位ARM指令
Reset LDR SP,=0x40003F00
初始化C程序的运行环境
LDR R0,=|Image$$RO$$Limit|
LDR R1,=|Image$$RW$$Base|
LDR R3,=|Image$$ZI$$Base|
CMP R0,R1
BEQ LOOP1
LOOP0 CMP R1,R3
LDRCC R2,[R0],#4
STRCC R2,[R1],#4
BCC LOOP0
LOOP1 LDR R1,=|Image$$ZI$$Limit|
MOV R2,#0
LOOP2 CMP R3,R1
STRCC R2,[R3],#4
BCC LOOP2
B Main 跳转到C程序代判差码Main()函数
END
2. 启动代码写好后,再编写C代码,运行你的程序(按你的意思算)
#define uint8 unsigned char //这两个宏定义是ADS里面防止数据溢迹冲好出带的
#define uint32 unsigned int
#define N 100
uint32 sum
// 使用加法运算来计算2+4+8+……+N的值。
void Main(void)
{ uint32 i
sum = 0
for(i=0i<=Ni=i*2)
{ sum += i
}
while(1)
}
3. 这两个程序合在一起才是是完整的ADS实现程序,希望可以解决你的困惑。姿铅
祝你进步!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)