Question: Do we use cache memory in microcontrollers, if not, why not? If yes, what is its application in embedded systems or it is enough just to have RAM?

Answer: 
Above a certain speed, fast memory costs more per byte than slow memory (below that speed, making memory slower won't make it any cheaper). If a system has a large amount of memory, having most of it be slow but then including a cache of fast memory and the logic to run it will be cheaper than making all of the memory fast. If the system doesn't run very fast, however, memory which can keep up with the system won't cost more than slower memory, so there's no reason not to have all the memory be fast enough to keep up with the system. If the system is fast but doesn't have much memory, the cost savings from making the bulk of the memory slow won't be sufficient to justify the cost of adding a cache.

Many microcontrollers have a flash interface which can fetch multiple bytes at once into a buffer; while this might be viewed as a sort of cache, in many cases it won't be an addressable memory, since each bit of the buffer will only be able to take data from a single source [a bit line from the flash array].
Having a level 1 cache is a trade-off between speed and cost. For speed, the bigger you make memory, the the longer the path to the data gets. That means that it'll take longer and longer (in terms of latency) the more memory you add. At some point performance degrades due this latency, which is the point when adding a level 1 cache makes sense. Cost is also a consideration, in that high-speed memory is more expensive than other types of memory. Finally, an additional benefit is that caches can make the micro-controller oblivious to the *kind* of memory it is read from.

Micro-controllers have typically had small memories, and therefore they often have no level 1 cache. In a sense their whole memory could be considered a level 1 cache! However, many micro-controllers today are very capable and start crossing over into the micro-processor territory, with bigger memories and therefore also level-1 (and level-2) caches.

Having caches adds a rather significant toll on the programming side, since real-time behavior on cache-misses can be hard to predict. Sometimes, this doesn't matter and/or can be worked around, but in the cases where it does there are a few options:

* Use smaller micro controllers for specific sub-tasks in a larger system.
* Use a chip that has embedded physical real-time units.

The first solution is quite attractive, as micro-controllers are cheap and capable. However, communication between the controllers and the main (CPU) unit could become an issue. This is why chips with embedded real-time capabilities can be a better solution.

As with all engineering, there are pros and cons for every solution. Pick the right tool for the job!