The Braves extended the largest division lead in the majors to six games over Washington in the National League East.
Atlanta took a 6-2 lead through four innings with much of the key offense being supplied by Freeman, whose four RBI ran his total for the year to 62.
Freeman doubled in two runs in the first to bring Atlanta back from an early 2-0 deficit, delivered an RBI single in the second and had another during a three-run fourth.
Tim Hudson (6-7) went seven innings to get the victory, allowing four runs on eight hits with five strikeouts. Craig Kimbrel gave up a leadoff single in the ninth, but retired the next three batters to register his 25th save.
Mat Latos (8-3) was charged with the loss, surrendering six runs on four hits in four innings.
Brandon Phillips drove in two runs for the Reds, one of them with a double in the eighth that cut the Atlanta lead to one.