Update.
The "Receive Queue" may actually work for you.
First, some background.
When a CAN message is received, the chip has to perform some sort of "Matching" against all of the Receive buffers. Simple chips may do this in parallel hardware. But once you have 16 (or 64) message buffers, that would take a lot of silicon. So in those ones there is usually a programmed sequencer that compares the buffers sequentially.
In the latest chips this is insanely complicated. There are 64 MBs, multiple passes, multiple "potential winners", options of checking the FIFO or MBs first and so on. The matching process starts when the data field starts to be received (to allow enough time for it to execute). You should read "26.6.5 Matching Process" in "IMX6DQRM.pdf" to see what this is like. "Table 26-15. Matching Possibilities and Resulting Reception Structures" has 26 different possibilities and seven "Notes".
The above matching takes SO LONG that "Table 26-18. Minimum Ratio Between Peripheral Clock Frequency and CAN Bit Rate" details that if you want to use 64 MBs then you have to program a minimum of 25 peripheral clocks per Quanta. If that doesn't work (for your baud rate) then you have to drop the number of MBs.
I suggest you read the above to work out which SUBSET of those operations your chip is performing.
I don't think you're going to be able to believe the MCF548x manual as the FlexCAN chapter isn't well written.
But the FlexCAN module has been used in a lot of other parts, and in some of them the Reference Manual is better written.
I searched the Freescale site for a match on ("reception queue" can be implemented) and got some interesting matches, specifically:
http://cache.freescale.com/files/32bit/doc/prod_brief/MPC5566PB.pdf
That manual is well written, has a very good "Matching Process" section. Damn - this is a newer chip with 64 MBs and the IRMQ/BCC bit, but renamed "MBFEN". Bizarrely this version doesn't have the FIFO Enable bit. This "mix and match" of features makes writing general purpose FlexCAN drivers really, really difficult.
So does a particular FlexCAN module match by searching for the FIRST matching buffer (full or empty), or the first EMPTY matching buffer? Surprisingly the second is a lot harder, as if it doesn't find any empty matching ones it then has to run a second pass to "blame" the first (or last) FULL one to flag the overflow.
The MC68376 manual's TouCAN module is probably close to the FlexCAN module in your chip. It doesn't explicitly state that it only matches the first one, but this is implied.
The MCF5235 and MCF5329 have FlexCAN modules without a FIFO (FEN bit) or the BCC bit. The "Matching Process" sections are subtly different, which means that one is probably wrong:
MCF5235
An MB with a matching ID is free to receive a new frame if the MB is not locked (see Section 23.3.15.3,
“Locking and Releasing Message Buffers”). The CODE field is EMPTY, FULL, or OVERRUN but the
CPU has already serviced the MB (read the C/S word and then unlocked the MB).
The grammar in the above is bad. There shouldn't be a full-stop in the middle, as the second sentence is hanging and has no meaning. This is better written in the other manual. Also, it implies that no MB will receive a frame unless the CPU "services" it first.
MCF5329
An MB with a matching ID is “free to receive” a new frame if the MB is not locked (see
Section 21.4.5.3, “Locking and Releasing Message Buffers”) and the CODE field is either
EMPTY or else it is FULL or OVERRUN but the CPU has already serviced the MB (read the C/S
word and then unlocked the MB).
If the first MB with a matching ID is not “free to receive” the new frame, then the matching
algorithm will overwrite the matching MB (unless it is locked) and set the CODE field to
OVERRUN (refer to Table 21-13). If the last matching MB is locked, then the new message
remains in the SMB, waiting for the MB to be unlocked (see Section 21.4.5.3, “Locking and
Releasing Message Buffers”).
That one makes more sense. It says an unlocked empty, OR an unlocked FULL or OVERRUN MB that has been "serviced" is "free to receive". That would allow a "Message Queue". Except you've then got to somehow signal an overrun when it happens.
But then the second paragraph says that even if it isn't "free to receive" the FIRST ONE will be overwritten and set to OVERRUN, so what was the point if it won't then look for a better match?
All this confusion may be the technical writers editing chapters to say what they think it should do, rather than finding out what it actually does, which may or may not be sensible.
You only option in these cases is a severe bout of reverse-engineering. You may still find out it doesn't work (that it can't implement a "message queue").
You didn't say what baud rate you're trying to use. What's the Application here? Vehicle, Industrial or Custom?
Do you have control of "the other end"? Can you program the other end to either rate-limit the transmissions or to use different IDs so you can spread the reception across multiple matching MBs? Or do you have to drop into an existing vehicle and work with what it has?
It a properly designed CAN system in a vehicle, specific messages (with specific IDs) are rate limited. They shouldn't repeat at more than 100Hz or so, or maybe a bit faster on the high-speed or engine/transmission bus. That means you should be able to program up to 15 Receive MBs with properly matching filters. The only time when you'd expect to get "back to back messages with the same IDs" would be during diagnostics or a firmware upgrade. If your device only has to receive specific messages, then programming the filters should have it working fine. It is only when you need to receive diagnostic streams, act as an "all messages bridge" or you have to receive more IDs than there are filters available that you should have the hardware receive everything and use software filtering.
So you have to receive all IDs? You may not be able to change the hardware, but you could add a two-port CAN "bridge" between your device and the network. It could rate-limit transmissions to your device, or you could implement a "software handshake" so it only sends a CAN message (to a specific filtered receive buffer) to your device after it has sent a CAN message back saying it has emptied that MB.
Tom