When migrating form NCS 2.5.0 to 2.7.0, some of my PPI + GPIOTE code just stopped working. To debug this issue, I have added print statements after the PPI alloc function as shown below.
nrfx_err_t err = nrfx_ppi_channel_alloc(channel); if (err != NRFX_SUCCESS) { return false; } err = nrfx_ppi_channel_assign(*channel, event, task); if (err != NRFX_SUCCESS) { return false; } if (use_fork) { err = nrfx_ppi_channel_fork_assign(*channel, task2); if (err != NRFX_SUCCESS) { return false; } } err = nrfx_ppi_channel_enable(*channel); if (err != NRFX_SUCCESS) { return false; } NRF_PPI_Type* ppi_reg = (NRF_PPI_Type*)NRF_PPI_BASE; LOG_INFO(""); LOG_INFO("Channel num is %x", *channel); LOG_INFO("Channel EEP reg is %x", ppi_reg->CH[*channel].EEP); LOG_INFO("Channel TEP reg is %x", ppi_reg->CH[*channel].TEP); LOG_INFO("Channel enable reg is %x", ppi_reg->CHEN);
/////////////////// 2.7.0 /////////////////// <INF> <INF> Channel num is 12 <INF> Channel EEP reg is 4001b140 <INF> Channel TEP reg is 4001a004 <INF> Channel enable reg is c0000 <INF> <INF> <INF> Channel num is 11 <INF> Channel EEP reg is 4001a140 <INF> Channel TEP reg is 40004010 <INF> Channel enable reg is e0000 <INF> <INF> <INF> Channel num is 10 <INF> Channel EEP reg is 40004118 <INF> Channel TEP reg is 4001b008 <INF> Channel enable reg is f0000 <INF> <INF> <INF> Channel num is f <INF> Channel EEP reg is 40006108 <INF> Channel TEP reg is 40023010 <INF> Channel enable reg is f8000 <INF> <INF> <INF> Channel num is e <INF> Channel EEP reg is 40023118 <INF> Channel TEP reg is 4000600c <INF> Channel enable reg is fc000
/////////////////// 2.5.0 /////////////////// <INF> Channel num is 5 <INF> Channel EEP reg is 4001b140 <INF> Channel TEP reg is 4001a004 <INF> Channel enable reg is 4020 <INF> <INF> <INF> Channel num is 4 <INF> Channel EEP reg is 4001a140 <INF> Channel TEP reg is 40004010 <INF> Channel enable reg is 4030 <INF> <INF> <INF> Channel num is 3 <INF> Channel EEP reg is 40004118 <INF> Channel TEP reg is 4001b008 <INF> Channel enable reg is 4038 <INF> <INF> <INF> Channel num is 2 <INF> Channel EEP reg is 40006108 <INF> Channel TEP reg is 40023010 <INF> Channel enable reg is 403c <INF> <INF> <INF> Channel num is 1 <INF> Channel EEP reg is 40023118 <INF> Channel TEP reg is 4000600c <INF> Channel enable reg is 403e <INF>
I am really confused to why the channel allocation number is now different when migrating to 2.7.0. I haven't really add anything new in my prj.conf file during the migration. Any help or suggestion would be greatly appreciated. Thanks!