DBWR writes dirty buffers to files when one of the following occurs.
- dirty list reaches a threshold value.
- A process scans a specified number of blocks in LRU list but doesn't find a free block.
- a time-out occurs.
- a checkpoint occurs.

So, a checkpoint forces DBWR to write dirty blocks to datafile BUT writing of dirty blocks to datafile in other scenarios doesn't force any checkpoint.

HTH