Cannot enter programming mode ATMega328p
EDIT: Below descrobed HVSP apparently doesn't work for ATmega328p, check this HVPP as an alternative. The remainder of my answer is still valid. 



Check this blog article: Arduino AVR High-Voltage Serial Programmer. You'll probably need to tweak a couple bytes in the code, check the datasheet for the default fuse bytes and change them in the code near the top:

// Desired fuse configuration
#define  HFUSE  0xDF   // Defaults for ATtiny25/45/85
#define  LFUSE  0x62   


Basically what it does is create a High Voltage programmer using an Arduino board and a handful discretes to reset the fuse bytes. Once the fuses are reset to their default values, you can program the chip in the regular way.

The circuit needs a 12V supply to pull !RESET high and enter HV programming mode. Be careful, only this single pin is 12V tolerant.

This little (Linux based) project defaultFuses may be of some help trying to figure out the default fuses. All it does is program the default fuses to the configured controller, but of course you'll first need the HV-programmer to unbrick your controller. It does however show the values which it will attampt to program.