最后是主程序 main()
首先初始化设备,设备指的是 CPU,主要是时钟和堆栈等。
然后 cachecontrol 不用 DATA CACHE。
在开发板上,由于 53:56 脚被连接到 UART,这意味着我们要么选择 DQ32 模式,要么选择 LppMode.
不然 UART 就没办法用了。Lpp 模式好象是 GPIO+UART 模式,见 datasheet 33 页。
几个参数 用 UART,不用 IIC 不用 IIS,不用 SPI。没有 GPIO 使用到(简单复杂都没有)。
然后就是设置配置了。
最后进入到内核。不返回。结束主程序。
内核于是调用某一个函数,也就是 CyFxApplicationDefine(void)。程序就从此开始了。
问:
1 程序是如何下载到 USB 中去的。要怎么做。例如将这个编译好的代码放到什么目录里还是怎么办,还是
启动时,安装 driver 时,自动下载,这个下载的东西是个什么文件格式?该放在哪里?不明白
2.难道 GPIF 口上没接任何东西, 如何将 PC 机发下来的数据发回到 PC 机上去?
生产者:USB 的 OUT 接口 1,向 GPIF 发送一批数据
消费者:GPIF 向 IN 接口 81,由它消费掉一批数据。然后通过 IN 发回 PC 机。
再看一个简单一点的 GPIO 的例子
1 先是一个错误处理的函数,我们不需要它,故这是一个死循环。
2 CyFxDebugInit 这个函数,将串口作为调试口用 115200bps
3 void CyFxGpioIntrCb (
uint8_t gpioId /* Indicates the pin that triggered the
interrupt */
)
这个函数是一个中断回调函数。必须在某个地方注册一下。
它有下列过程:apiRetStatus =CyU3PGpioGetValue(gpioID,&gpioValue); //这个函数得到某个端口中断的值
这个 gpioValue 是一个 BOOL 值。而 ID 则是某一个端口的端口号。这个函数只能返回一个引脚。
等会看这个 ID 是什么指定的。
CyU3PEventSet(&glFxGpioAppEvent,
CY_FX_GPIOAPP_GPIO_HIGH_EVENT,CYU3P_EVENT_OR);
如果为高,则设置一个事件。是一个高事件发生。注意到事件是一个全局变量,而这个事件中有许多参数,
其中比较重要的是一个回调函数。应该在某个地方将这个事件与一个回调函数联系起来。一会要补充这里
5. Void CyFxGpioInit (void)
apiRetStatus = CyU3PGpioInit(&gpioClock,CyFxGpioIntrCB);
这个函数是设定 gpio 的时钟,以及中断的回调函数。这与 4 中部分形成对照。
然后将 gpio45 定义为输入且允许中断
gpioConfig.intrMode = CY_U3P_GPIO_INTR_BOTH_EDGE;
apiRetStatus = CyU3PGpioSetSimpleConfig(45, &gpioConfig);
GPIO 的 21 脚本来作为 GPIF 的控制信号的。不能用 CyU3PDeviceConfigureIOMatrix 来将它作为 GPIF IOs.
这个过载 API 调用必须进行必须小心当改变这个引脚的功能时。如果 IO 脚作为 GPIF 的一部分连到外部设