spi_cmd.c
上传用户:plenty2008
上传日期:2022-08-02
资源大小:11k
文件大小:2k
源码类别:

驱动编程

开发平台:

Unix_Linux

  1. /*
  2. Module Name: SPI_CMD.C
  3. Abstract: Function definition for the CAN's spi command interface
  4.   
  5. Notes: Presently, only the SPI Channel 0 is supported.
  6. Environment: MCP2515
  7. Date:  2004/01/28
  8. By:  Li zhongmin
  9.    
  10. */ 
  11. #include <asm-arm/arch-s3c2410/S3C2410.h>
  12. #include  "spi.h"
  13. #include "spi_cmd.h"
  14. unsigned char CAN_SPI_CMD( unsigned char cmd, unsigned long addr, unsigned char arg1, unsigned char arg2 )
  15. {
  16. unsigned char ret=0;
  17. unsigned char data=0;
  18. // Empty the spi's transfer and receive buffer
  19. // SPI_TXFlush( CAN_SPI_MODULE );
  20. // SPI_RXFlush( CAN_SPI_MODULE );
  21. //StartSPIClock();
  22. *(unsigned int *)rGPGDAT = (*(unsigned int *)rGPGDAT) & CHIP_SELECT_nSS0;
  23. switch( cmd ){
  24. case SPI_CMD_READ:
  25. // printk("SPI_CMD_READn");
  26. ret = SPI_SendByte(SPI_CMD_READ, &data);
  27. ret = SPI_SendByte(addr, &data);
  28. ret = SPI_SendByte(0xff, &data);
  29. break;
  30. case SPI_CMD_WRITE:
  31. // printk("SPI_CMD_WRITEn");
  32. ret = SPI_SendByte(SPI_CMD_WRITE, &data);
  33. // printk("send byte return value = %dn",ret);
  34. ret = SPI_SendByte(addr, &data);
  35. ret = SPI_SendByte(arg1, &data);
  36. break;
  37. case SPI_CMD_RTS:
  38. ret = SPI_SendByte(SPI_CMD_RTS, &data);
  39. break;
  40. case SPI_CMD_READSTA:
  41. ret = SPI_SendByte(SPI_CMD_READSTA, &data);
  42. ret = SPI_SendByte(0xff, &data);
  43. break;
  44. case SPI_CMD_BITMOD:
  45. // printk("SPI_CMD_BITMODn");
  46. ret = SPI_SendByte(SPI_CMD_BITMOD, &data);
  47. // printk("send byte 1 return value = %dn",ret);
  48. ret = SPI_SendByte(addr, &data);
  49. // printk("send byte 2 return value = %dn",ret);
  50. ret = SPI_SendByte(arg1, &data);
  51. // printk("send byte 3 return value = %dn",ret);
  52. ret = SPI_SendByte(arg2, &data);
  53. // printk("send byte 4 return value = %dn",ret);
  54. break;
  55. case SPI_CMD_RESET:
  56. // printk("SPI_CMD_RESETn");
  57. ret = SPI_SendByte(SPI_CMD_RESET, &data);
  58. break;
  59. default:
  60. ret = 0x30; // any value is ok
  61. }
  62. *(unsigned int *)rGPGDAT = (*(unsigned int *)rGPGDAT)|CHIP_DESELECT_nSS0;
  63.   //StopSPIClock();
  64.  
  65. //SPI_RXFlush( CAN_SPI_MODULE );
  66. return data;
  67. }