OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6504|回复: 3

关于hid和spi的问题

[复制链接]

3

主题

4

帖子

0

精华

新手入门

积分
36
金钱
36
注册时间
2012-12-14
在线时间
0 小时
发表于 2013-1-15 11:44:52 | 显示全部楼层 |阅读模式

第一个问题是
void EP3_OUT_Callback(void)
{
  HID_Data_Out( ); 

 这个函数是产生数据的
int8_t HID_Data_Out( void )
{
uint8_t  RcvBuffer  [HID_MAX_BUFFER_SIZE], //0x3F bytes reserved for data + 1 for report ID
    SendBuffer [CR95HF_RESPONSEBUFFER_SIZE]; //0x3F bytes reserved for data + 1 for report ID

   
 HID_TRANSACTION = TRUE;

 memset  (RcvBuffer,  0x00,HID_MAX_BUFFER_SIZE);
 memset  (SendBuffer, 0x00,HID_MAX_BUFFER_SIZE);

 /* Read received data (64 bytes) ... */
 SetEPRxStatus(ENDP3, EP_RX_VALID); 
 USB_SIL_Read(EP3_OUT, RcvBuffer);

 // Rcv buffer = command to CR95HF
 // SendBuffer = CR95HF response


 switch(RcvBuffer[HID_OFFSET])
 {
  // Send CR95HF command to CR95HF
  case HID_SPI_SEND_CR95HFCMD :
   if (RcvBuffer[HID_OFFSET_CMDCODE] != BAUD_RATE)
    SPIUART_SendReceive(&RcvBuffer[HID_OFFSET_CMDCODE], &SendBuffer[HID_OFFSET_CMDCODE]);
   else // UART baud rate is a specific command because MCU and CR95HF has to modify their configurations
    CR95HF_ChangeUARTBaudRate (&RcvBuffer[HID_OFFSET_CMDCODE], &SendBuffer[HID_OFFSET_CMDCODE]); 
  break;
  // send customs command
  case HID_SPI_SEND_DATA:    
   CR95HF_SendCustomCommand(&RcvBuffer[HID_OFFSET_CMDCODE], &SendBuffer[HID_OFFSET_CMDCODE]);     
  break;
 }
  
 // the baudrate command are an exeption and shall be threat seperately
 if (RcvBuffer[HID_OFFSET_CMDCODE] == BAUD_RATE)
 {
  // the baud rate command has been emmiting
  UART_Initialization(BAUDRATE_DATARATE_DEFAULT );   
 }

 

 /* SendBuffer format
  1st byte : ID_SEND_HID_RESPONSE
  2nd byte : repply or error code flag
  3rd byte : nb byte
  others bytes: data
 */

 SendBuffer[HID_OFFSET] = HID_SEND_HID_RESPONSE;
 SendBuffer[HID_OFFSET_LENGTH] =MIN(HID_MAX_BUFFER_SIZE,SendBuffer[HID_OFFSET_LENGTH]);

 /* Allows the transmission */
 SetEPTxStatus(ENDP3, EP_TX_VALID);
 USB_SIL_Write(EP3_IN, SendBuffer, HID_MAX_BUFFER_SIZE);


 return CR95HF_SUCCESS_CODE;
}
这个中断是在哪里触发的呢,没有找到那个触发的地方,还有就是怎么把读出的这个sendbuffer提取出来显示到LCD上呢

第二个问题是SPI的,
uint8_t SPI_SendReceiveByte(SPI_TypeDef* SPIx, uint8_t data)
这个spi是什么时候触发的中断呢,也没有找到那个点。
上边有这么一句 SPIUART_SendReceive(&RcvBuffer[HID_OFFSET_CMDCODE], &SendBuffer[HID_OFFSET_CMDCODE]);
这个是发送指令RcvBuffer,它是通过 USB_SIL_Read(EP3_OUT, RcvBuffer);读出的
我怎么找到这个指令是什么呢
或者我能不能给这个指令赋值,然后让它执行呢

这些问题不知道大神们能不能看明白,帮帮我吧,作为菜鸟,实在弄不懂,身边也没有懂的,先谢谢大家了

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-15 12:41:44 | 显示全部楼层
回复【楼主位】crystal416:
---------------------------------
1,哪个中断?
2,SPI中断在哪里?你说的又是哪个指令?
整一个没弄明白...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

4

帖子

0

精华

新手入门

积分
36
金钱
36
注册时间
2012-12-14
在线时间
0 小时
 楼主| 发表于 2013-1-16 10:25:10 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
两个中断,一个是SPI,一个是USB,我也找不到是怎么触发的这两个中断,这个代码有点乱,我一层层的找的嵌套的程序,源头是USB_HP_IRQ_HANDLER,但不知道是什么时候触发的中断
 还有那个指令,我说错了,是RcvBuffer这个数组,代表的发送的操作指令(比如读写等指令),也没找到源头,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-16 10:41:54 | 显示全部楼层
 USB中断由USB事件触发,电脑连接开发板的时候,有一系列的事件,都可以触发中断(前提是你开启了)。
SPI中断,看你的SPI初始化设置就知道了。
RcvBuffer,全编译-->右键-->goto definition
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 21:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表