I have a microblaze design that instances an AXI IIC on a spartan series device. I have two tasks, one that manages the iic control, and the other that manages other peripherals. I want to schedule the iic peripheral task so that an iic controller can always read from it and write to it. What I’m afraid of is the scheduler interrupting the task while it’s polling on the AXI IIC registers and performing functions.
I’m having trouble googling the right terms for it but I’m trying to figure out how to tell the freeRTOS kernel to always check on this task under a certain amount of time. I’m thinking less than a 400khz iic cycle. I can’t use taskENTER_CRITICAL() because i2c transactions take waaaay too long to finish and I would hang up the other task. My microblaze runs at 100mhz so it has plenty of horsepower to check in on the iic peripheral handling code.
I also had to change my tick_rate from 100 to 100000 in my BSP to get better results. I know I’m having issues in task switching because if my only task is the IIC peripheral task, I never get any iic errors from my controller. It seems I’m missing certain iic data when my task is sleeping because another task is being performed.
So I guess my tl;dr for this is how do I tell freertos “Hey, make sure to check in on this task every 2.5 microseconds to collect or send data”