|
|
View previous topic :: View next topic |
Author |
Message |
Einly
Joined: 10 Sep 2003 Posts: 60
|
How to read & output 32 bits using shift operator? |
Posted: Tue Mar 30, 2004 3:48 am |
|
|
Dear all,
1) How to write 32 bits through an adc pin using shift operator?
I have successfully output a byte using
output_bit(SDIO,shift_left(&insr,1,0));
Ex:
insr=0x64;
for(i=0;i<8;i++)
{
output_high(SCLK);
output_bit(SDIO,shift_left(&insr,1,0));
delay_us(1);
output_low(SCLK);
delay_us(1);
}
However, I failed to output 32 bits. I check with an oscilloscope & I got low for all the 32 bits. May I know do I make any mistake in my code?
Below is my code:
cmr[3]=0xC0;
cmr[2]=0x00;
cmr[1]=0x02;
cmr[0]=0x27;
delay_us(1);
for(i=0;i<32;i++)
{
output_high(SCLK);
output_bit(SDIO,shift_left(&cmr,4,0));
delay_us(1);
output_low(SCLK);
delay_us(1);
}
2) May I know how should I receive bit through an adc pin? Am I code correct? My code is as shown below...
for(i=0;i<32;i++)
{
output_high(SCLK);
delay_us(1);
output_low(SCLK);
shift_left(cmrrb,4,input(SDIO));
delay_us(1);
}
3) How should I access all the 4 bytes being read?
Is it cmrrb[3], cmrrb[2], cmrrb[1], cmrrb[0]...?
Thanks a lot:-)
Yours truly,
Einly _________________ Einly |
|
|
Haplo
Joined: 06 Sep 2003 Posts: 659 Location: Sydney, Australia
|
|
Posted: Tue Mar 30, 2004 6:39 am |
|
|
1) You need to pass the address of the variable into the shift_left() function. Since cmr is an array, its name is already its address, so you'll need to change your code to:
output_bit(SDIO,shift_left(cmr,4,0)); //The & is not needed anymore
2) Please explain more what you are trying to do.
3) You can declare a int32 variable and use it:
int32 cmrrb;
shift_left(&cmrrb,4,input(SDIO)); //The & is needed here
By the way, if you are using the delay statements just to wait for the value of the pins to change, it is better to use delay_cycles(1) rather than delay_us(1), in case your crystal speed is (or will ever be) less than 4MHz. |
|
|
Einly
Joined: 10 Sep 2003 Posts: 60
|
replace int32? |
Posted: Wed Mar 31, 2004 6:20 am |
|
|
Dear Haplo,
Hi, Thanks for your reply. Actually I'm using PCM 2.73 which doesn't support int32.
For your answer in question 3. What are the methods that you can suggest?
Wait for your good news.
Regards: Einly, _________________ Einly |
|
|
Haplo
Joined: 06 Sep 2003 Posts: 659 Location: Sydney, Australia
|
|
Posted: Wed Mar 31, 2004 6:50 am |
|
|
The first ever PCM I used was PCM 3.112 so I'm afraid I'm not aware of the limitations in PCM 2.73. If it doesn't support int32 then you're probaby stuck with cmrrb[3], cmrrb[2], cmrrb[1], cmrrb[0]. Or if working with int16 variables are easier for you then you can try this code:
Code: | union Convert
{
byte Bytes[4];
int16 Integers[2];
};
union Convert cmrrb;
shift_left(cmrrb.Bytes,4,input(SDIO)); |
Then cmrrb.Integers[0] and cmmrrb.Integers[1] will be it two int16 variables holding your data.
Or someone who has experience with PCM 2.xx may be able to suggest a better solution? |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|