We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I have implemented an SPI interface in Cypress FX2. I have problems in giving the XDATA and CODE. I gave the settings as CODE - 0X80-0X0fff and XDATA 0X1000. But when I program it ,Iam not able to see the SCLK. IS anything wrong with the memory settings . Thanks. Vanitha
> I have implemented an SPI interface in Cypress FX2.
How did you implement SPI? EZ-USB FX2(LP) doesn't have any on-chip SPI. Did you connect an external SPI chip? Or, did you trick the UART as this app note shows, or bit banging?
"SPI Implementation Using Serial Mode 0 on EZ-USB - AN1067" www.cypress.com/
> I have problems in giving the XDATA and CODE. I gave the settings as CODE - 0X80-0X0fff and XDATA 0X1000.
Did you see any error on the linker log? If not, it sounds like fine.
> But when I program it ,Iam not able to see the SCLK. IS anything wrong with the memory settings .
Did you see any other trouble than SCLK? Other functions - like USB enumeration - works fine? Why do you think the trouble is related to the memory setting?
Information is too short to comment something helpful.
Tsuneo
I have written a software SPI refering the application note AN-1068 from cypress. I did not use the file FW.C and other files that is needed for reenumeration. Should I re enumerate the FX2 for proper functioning ? Thanks Vanitha
The target MCU of AN1068 is the original EZ-USB (Anchor AN2131). Therefore, you have to rewrite the code intensively for FX2(LP).
In this appnote, port C is assigned to the bit-banging port. The original EZ-USB maps port C on XDATA area (OUTC: 0x7F98). FX2(LP) places it on the register area (IOC: 0xA - bit-addressable). It is the reason the code doesn't work.
I am using port E , I have already replaced OUTC by IOE(0xB1). Now Iam also re enumerating the FX2. I have used TD_Init() and TD_poll() in the coding . Still I have problems . Vanitha
BIT banging seems to be very slow .I cant se anything on scope.
vanitha
>I am using port E , I have already replaced OUTC by IOE(0xB1).
Maybe, some bug of your code disturbs it. Post your code for the asm routine, spiwritebyte and spireadbyte
>Now Iam also re enumerating the FX2. I have used TD_Init() and TD_poll() in the coding .
Re-enumeration is not required, when you don't use USB on FX2. As you are testing a short code on MON51 debugger, TD_Init() and TD_poll() is also not required.
I have code for spibytewrite only .Iam using PORT E.PE.0 is my SCLK and PE.7 is my SDO and PE.3 is my CS.
?PR?SPIWRITEBYTE?MODULE segment code ?DT?SPIWRITEBYTE?MODULE segment data overlayable PUBLIC _spiwritebyte, ?_spiwritebyte?BYTE rseg ?DT?SPIWRITEBYTE?MODULE ?_spiwritebyte?BYTE: d: ds 1 rseg ?PR?SPIWRITEBYTE?MODULE CLKHIGH equ 00000001B ;Bitmask to turn clk pin high CLKLOW equ 11111110B ;Bitmask to turn clk pin low BITHIGH equ 10000000B ;Bitmask to turn out pin high BITLOW equ 01111111B ;Bitmask to turn out pin low IOE XDATA 0xB1 ;7F98H _spiwritebyte: mov DPTR,#IOE ;point to IOE mov R6, #8 ;set up loop loop: mov A, R7 ;move data to send to A rrc A ;rotate left through carry to send LSB first mov R7, A ;save rotated movx A, @DPTR ;setup to change bit jc highbit ;if bit is high jump anl A, #BITLOW ;else set bit low sjmp skip ;skip setting bit high highbit: orl A, #BITHIGH ;set out high and clock skip: orl A, #CLKHIGH ;set clock bit high movx @DPTR, A ;output data nop ;may need this to stretch clock high time anl A, #CLKLOW ;set clock low movx @DPTR, A ;output low clock djnz R6, loop ;repeat eight times ret end
Vanitha
I solved the problem finally. The IOE in FX2 is located in direct memory access region. The indirect addressing (movx @DPTR, A ) was causing problem. Simply it can be written as mov 0xB1,A. DPTR is not required as it is used to access external memory. Vanitha